hlgl/vertex_buffer.go
2024-11-23 21:54:20 -07:00

60 lines
1.2 KiB
Go

package main
import "github.com/go-gl/gl/v4.1-core/gl"
type VertexBuffer struct {
bufferId uint32
}
func NewVertexBuffer(data []float32) *VertexBuffer {
var bufferID uint32
gl.GenBuffers(1, &bufferID)
gl.BindBuffer(gl.ARRAY_BUFFER, bufferID)
gl.BufferData(gl.ARRAY_BUFFER, len(data)*4, gl.Ptr(data), gl.STATIC_DRAW)
return &VertexBuffer{bufferId: bufferID}
}
func (vb *VertexBuffer) Bind() {
gl.BindBuffer(gl.ARRAY_BUFFER, vb.bufferId)
}
func (vb *VertexBuffer) Unbind() {
gl.BindBuffer(gl.ARRAY_BUFFER, 0)
}
type VertexArray struct {
ID uint32
}
func NewVertexArray() *VertexArray {
var id uint32
gl.GenVertexArrays(1, &id)
return &VertexArray{ID: id}
}
func (va *VertexArray) AddBuffer(vb *VertexBuffer, layout []int32) {
va.Bind()
vb.Bind()
stride := int32(0)
for _, size := range layout {
stride += size
}
stride *= 4 // Each float is 4 bytes
offset := uintptr(0)
for i, size := range layout {
gl.EnableVertexAttribArray(uint32(i))
gl.VertexAttribPointer(uint32(i), size, gl.FLOAT, false, stride, gl.PtrOffset(int(offset)))
offset += uintptr(size * 4)
}
}
func (va *VertexArray) Bind() {
gl.BindVertexArray(va.ID)
}
func (va *VertexArray) Unbind() {
gl.BindVertexArray(0)
}