Exercise the GL_ELEMENT_ARRAY_BUFFER_ARB path

This commit is contained in:
Brian Paul
2003-09-17 18:15:47 +00:00
parent d2afb39d19
commit de8d410a99

View File

@@ -18,9 +18,11 @@
struct object struct object
{ {
GLuint BufferID; GLuint BufferID;
GLuint ElementsBufferID;
GLuint NumVerts; GLuint NumVerts;
GLuint VertexOffset; GLuint VertexOffset;
GLuint ColorOffset; GLuint ColorOffset;
GLuint NumElements;
}; };
static struct object Objects[NUM_OBJECTS]; static struct object Objects[NUM_OBJECTS];
@@ -46,8 +48,17 @@ static void DrawObject( const struct object *obj )
glEnable(GL_VERTEX_ARRAY); glEnable(GL_VERTEX_ARRAY);
glColorPointer(3, GL_FLOAT, 0, (void *) obj->ColorOffset); glColorPointer(3, GL_FLOAT, 0, (void *) obj->ColorOffset);
glEnable(GL_COLOR_ARRAY); glEnable(GL_COLOR_ARRAY);
if (obj->NumElements > 0) {
/* indexed arrays */
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, obj->ElementsBufferID);
glDrawElements(GL_LINE_LOOP, obj->NumElements, GL_UNSIGNED_INT, NULL);
}
else {
/* non-indexed arrays */
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
glDrawArrays(GL_LINE_LOOP, 0, obj->NumVerts); glDrawArrays(GL_LINE_LOOP, 0, obj->NumVerts);
} }
}
static void Idle( void ) static void Idle( void )
@@ -167,6 +178,7 @@ static void MakeObject1(struct object *obj)
obj->NumVerts = 4; obj->NumVerts = 4;
obj->VertexOffset = 0; obj->VertexOffset = 0;
obj->ColorOffset = 3 * sizeof(GLfloat) * obj->NumVerts; obj->ColorOffset = 3 * sizeof(GLfloat) * obj->NumVerts;
obj->NumElements = 0;
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
} }
@@ -192,6 +204,7 @@ static void MakeObject2(struct object *obj)
obj->NumVerts = 3; obj->NumVerts = 3;
obj->VertexOffset = 0; obj->VertexOffset = 0;
obj->ColorOffset = 3 * sizeof(GLfloat) * obj->NumVerts; obj->ColorOffset = 3 * sizeof(GLfloat) * obj->NumVerts;
obj->NumElements = 0;
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
} }
@@ -200,6 +213,7 @@ static void MakeObject2(struct object *obj)
static void MakeObject3(struct object *obj) static void MakeObject3(struct object *obj)
{ {
GLfloat *v, *c; GLfloat *v, *c;
GLuint *i;
glGenBuffersARB(1, &obj->BufferID); glGenBuffersARB(1, &obj->BufferID);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, obj->BufferID); glBindBufferARB(GL_ARRAY_BUFFER_ARB, obj->BufferID);
@@ -221,6 +235,18 @@ static void MakeObject3(struct object *obj)
obj->ColorOffset = 3 * sizeof(GLfloat) * obj->NumVerts; obj->ColorOffset = 3 * sizeof(GLfloat) * obj->NumVerts;
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
/* Setup a buffer of indices to test the ELEMENTS path */
glGenBuffersARB(1, &obj->ElementsBufferID);
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, obj->ElementsBufferID);
glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 100, NULL, GL_STATIC_DRAW_ARB);
i = (GLuint *) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_READ_WRITE_ARB);
i[0] = 0;
i[1] = 1;
i[2] = 2;
i[3] = 3;
glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB);
obj->NumElements = 4;
} }