From 69032cdcf38793f787933a9b5e4efe8f745b4d84 Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Sat, 31 Dec 2016 02:48:43 +0100
Subject: [PATCH] remove support for indices in vertex array

---
 pixelgl/vertex.go | 65 ++++++-----------------------------------------
 1 file changed, 8 insertions(+), 57 deletions(-)

diff --git a/pixelgl/vertex.go b/pixelgl/vertex.go
index b928a09..5f2633f 100644
--- a/pixelgl/vertex.go
+++ b/pixelgl/vertex.go
@@ -12,19 +12,18 @@ import (
 // VertexArray is an OpenGL vertex array object that also holds it's own vertex buffer object.
 // From the user's points of view, VertexArray is an array of vertices that can be drawn.
 type VertexArray struct {
-	vao, vbo, ebo           binder
-	numVertices, numIndices int
-	format                  AttrFormat
-	stride                  int
-	offset                  map[string]int
+	vao, vbo    binder
+	numVertices int
+	format      AttrFormat
+	stride      int
+	offset      map[string]int
 }
 
 // NewVertexArray creates a new empty vertex array.
 //
 // You cannot specify vertex attributes in this constructor, only their count. Use
-// SetVertexAttribute* methods to set the vertex attributes. Use indices to specify how you
-// want to combine vertices into triangles.
-func NewVertexArray(shader *Shader, numVertices int, indices []int) (*VertexArray, error) {
+// SetVertexAttribute* methods to set the vertex attributes.
+func NewVertexArray(shader *Shader, numVertices int) (*VertexArray, error) {
 	va := &VertexArray{
 		vao: binder{
 			restoreLoc: gl.VERTEX_ARRAY_BINDING,
@@ -38,12 +37,6 @@ func NewVertexArray(shader *Shader, numVertices int, indices []int) (*VertexArra
 				gl.BindBuffer(gl.ARRAY_BUFFER, obj)
 			},
 		},
-		ebo: binder{
-			restoreLoc: gl.ELEMENT_ARRAY_BUFFER_BINDING,
-			bindFunc: func(obj uint32) {
-				gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, obj)
-			},
-		},
 		numVertices: numVertices,
 		format:      shader.VertexFormat(),
 		stride:      shader.VertexFormat().Size(),
@@ -71,9 +64,6 @@ func NewVertexArray(shader *Shader, numVertices int, indices []int) (*VertexArra
 	emptyData := make([]byte, numVertices*va.stride)
 	gl.BufferData(gl.ARRAY_BUFFER, len(emptyData), gl.Ptr(emptyData), gl.DYNAMIC_DRAW)
 
-	gl.GenBuffers(1, &va.ebo.obj)
-	defer va.ebo.bind().restore()
-
 	for name, typ := range va.format {
 		loc := gl.GetAttribLocation(shader.ID(), gl.Str(name+"\x00"))
 
@@ -102,8 +92,6 @@ func NewVertexArray(shader *Shader, numVertices int, indices []int) (*VertexArra
 
 	va.vao.restore()
 
-	va.SetIndices(indices)
-
 	runtime.SetFinalizer(va, (*VertexArray).delete)
 
 	return va, nil
@@ -113,7 +101,6 @@ func (va *VertexArray) delete() {
 	DoNoBlock(func() {
 		gl.DeleteVertexArrays(1, &va.vao.obj)
 		gl.DeleteBuffers(1, &va.vbo.obj)
-		gl.DeleteBuffers(1, &va.ebo.obj)
 	})
 }
 
@@ -138,41 +125,7 @@ func (va *VertexArray) VertexFormat() AttrFormat {
 //
 // The vertex array must be bound before calling this method.
 func (va *VertexArray) Draw() {
-	gl.DrawElements(gl.TRIANGLES, int32(va.numIndices), gl.UNSIGNED_INT, gl.PtrOffset(0))
-}
-
-// SetIndices sets the indices of triangles to be drawn. Triangles will be formed from the
-// vertices of the array as defined by these indices. The first drawn triangle is specified by
-// the first three indices, the second by the fourth through sixth and so on.
-//
-// The vertex array must be bound before calling this method.
-func (va *VertexArray) SetIndices(indices []int) {
-	if len(indices)%3 != 0 {
-		panic("vertex array set indices: number of indices not divisible by 3")
-	}
-	indices32 := make([]uint32, len(indices))
-	for i := range indices32 {
-		indices32[i] = uint32(indices[i])
-	}
-	va.numIndices = len(indices32)
-
-	gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, 4*len(indices32), gl.Ptr(indices32), gl.DYNAMIC_DRAW)
-}
-
-// Indices returns the current indices of triangles to be drawn.
-//
-// The vertex array must be bound before calling this method.
-func (va *VertexArray) Indices() []int {
-	indices32 := make([]uint32, va.numIndices)
-
-	gl.GetBufferSubData(gl.ELEMENT_ARRAY_BUFFER, 0, 4*len(indices32), gl.Ptr(indices32))
-
-	indices := make([]int, len(indices32))
-	for i := range indices {
-		indices[i] = int(indices32[i])
-	}
-
-	return indices
+	gl.DrawArrays(gl.TRIANGLES, 0, int32(va.numVertices))
 }
 
 // SetVertexAttr sets the value of the specified vertex attribute of the specified vertex.
@@ -433,12 +386,10 @@ func (va *VertexArray) Vertices() (vertices []map[Attr]interface{}) {
 func (va *VertexArray) Begin() {
 	va.vao.bind()
 	va.vbo.bind()
-	va.ebo.bind()
 }
 
 // End unbinds a vertex array and restores the previous one.
 func (va *VertexArray) End() {
-	va.ebo.restore()
 	va.vbo.restore()
 	va.vao.restore()
 }
-- 
GitLab