// renderBuffered uses VBO's. This is the preferred mode for systems // where shader support is not present or deemed necessary. func (mb *MeshBuffer) renderBuffered(mode gl.GLenum, m Mesh, program gl.Program) { is, ic := m[mbIndexKey][0], m[mbIndexKey][1] program.Use() var attribLocation gl.AttribLocation for _, value := range mb.attr { if value.name == "index" { continue } value.bind() if value.Invalid() { value.buffer() } attribLocation = program.GetAttribLocation(value.name) attribLocation.EnableArray() attribLocation.AttribPointer(value.size, value.typ, false, 0, uintptr(0)) value.unbind() } ia := mb.find(mbIndexKey) ia.bind() if ia.Invalid() { ia.buffer() } gl.DrawElements(mode, ic, ia.typ, uintptr(is*ia.stride)) ia.unbind() for _, value := range mb.attr { if value.name == "index" { continue } attribLocation := program.GetAttribLocation(value.name) attribLocation.DisableArray() } }