1

我想像这样处理我的代码:

glVertexPointer( 3, GL_FLOAT, sizeof( Vertex ), (GLvoid*)offsetof( Vertex, Position ) );
glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof( Vertex ), (GLvoid*)offsetof( Vertex, Color ) );

for ( /* each buffer */ )
{
    glBindBuffer( GL_VERTEX_ARRAY, buffer );
    glDrawArrays( GL_TRIANGLE_STRIP, 0, buffer_size );
}

这行得通吗?

或者我需要为每个缓冲区调用 gl*Pointer 吗?

4

1 回答 1

1

您必须在调用 glXYZPointer 调用之前调用 glBindBuffer。

OpenGL是一个状态机。当您调用 glVertexPointer(或其他 gl..Pointer)时,它会将顶点指针设置为当前绑定的缓冲区。指针调用之后的 glBindBuffer 将什么也不做(除了它会影响下一个指针调用)。

于 2012-02-09T19:21:55.437 回答