60 lines
1.2 KiB
Go
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)
|
||
|
}
|