2011-10-01 25 views
5

En OpenGL (OpenGL ES 2.0, en particular), se requiere glVertexAttribPointer ser llamado cada vez que un nuevo VBO está obligado?glVertexAttribPointer necesario cada vez que se llama glBindBuffer?

Por ejemplo:

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer1); 

glVertexAttribPointer(ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(vertexStruct), (void*)offsetof(vertexStruct,position)); 
glEnableVertexAttribArray(ATTRIB_POSITION); 
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(vertexStruct), (void*)offsetof(vertexStruct,color); 
glEnableVertexAttribArray(ATTRIB_COLOR); 

glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices)/sizeof(GLubyte), GL_UNSIGNED_BYTE, (void*)0); 

// If vertexBuffer2 has the exact same attributes as vertexBuffer1 
// is this legal or do the calls to glVertexAttribPointer (and glEnableVertexAttribArray) 
// required again? 

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer2); 
glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices)/sizeof(GLubyte), GL_UNSIGNED_BYTE, (void*)0); 

Yo sé que hay que VAOS dirección no tener que llamar glVertexAttribPointer pero me pregunto si esto está bien que hacer en OpenGL?

Respuesta

8

Si hizo esto:

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer1); 

glVertexAttribPointer(ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(vertexStruct), (void*)offsetof(vertexStruct,position)); 
glEnableVertexAttribArray(ATTRIB_POSITION); 
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(vertexStruct), (void*)offsetof(vertexStruct,color); 
glEnableVertexAttribArray(ATTRIB_COLOR); 

glBindBuffer(GL_ARRAY_BUFFER, 0); 

glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices)/sizeof(GLubyte), GL_UNSIGNED_BYTE, (void*)0); 

Su código funcionaría bien. Lo que todas las llamadas gl*Pointer hacer es mirar a lo que se almacena en GL_ARRAY_BUFFERen el momento de la función se llama, y crear una asociación entre ese búfer y ese atributo. Entonces, la única forma de cambiar qué buffer se usa para un atributo es llamar al gl*Pointer.

Cuestiones relacionadas