Exercise the GL_ELEMENT_ARRAY_BUFFER_ARB path
This commit is contained in:
@@ -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,7 +48,16 @@ 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);
|
||||||
glDrawArrays(GL_LINE_LOOP, 0, obj->NumVerts);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user