mirror of
https://github.com/bloeys/nmage.git
synced 2025-12-29 05:18:21 +00:00
55 lines
1.0 KiB
Go
Executable File
55 lines
1.0 KiB
Go
Executable File
package buffers
|
|
|
|
import (
|
|
"github.com/bloeys/nmage/logging"
|
|
"github.com/go-gl/gl/v4.1-core/gl"
|
|
)
|
|
|
|
type VertexArray struct {
|
|
Id uint32
|
|
Vbos []VertexBuffer
|
|
IndexBuffer IndexBuffer
|
|
}
|
|
|
|
func (va *VertexArray) Bind() {
|
|
gl.BindVertexArray(va.Id)
|
|
}
|
|
|
|
func (va *VertexArray) UnBind() {
|
|
gl.BindVertexArray(0)
|
|
}
|
|
|
|
func (va *VertexArray) AddVertexBuffer(vbo VertexBuffer) {
|
|
|
|
// NOTE: VBOs are only bound at 'VertexAttribPointer' (and related) calls
|
|
|
|
va.Bind()
|
|
vbo.Bind()
|
|
|
|
for i := 0; i < len(vbo.layout); i++ {
|
|
|
|
l := &vbo.layout[i]
|
|
|
|
gl.EnableVertexAttribArray(uint32(i))
|
|
gl.VertexAttribPointerWithOffset(uint32(i), l.ElementType.CompCount(), l.ElementType.GLType(), false, vbo.Stride, uintptr(l.Offset))
|
|
}
|
|
}
|
|
|
|
func (va *VertexArray) SetIndexBuffer(ib IndexBuffer) {
|
|
va.Bind()
|
|
ib.Bind()
|
|
va.IndexBuffer = ib
|
|
}
|
|
|
|
func NewVertexArray() VertexArray {
|
|
|
|
vao := VertexArray{}
|
|
|
|
gl.GenVertexArrays(1, &vao.Id)
|
|
if vao.Id == 0 {
|
|
logging.ErrLog.Println("Failed to create OpenGL vertex array object")
|
|
}
|
|
|
|
return vao
|
|
}
|