voglio un oggetto array vertice in OpenGL ES 2.0 per contenere due attributi diversi buffer, il secondo buffer vengono letti dalla memoria client (glBindBuffer(GL_ARRAY_BUFFER, 0)
) ma si verifica un errore di runtime:OES_vertex_array_object e client stato
GLuint my_vao;
GLuint my_buffer_attrib0;
GLfloat attrib0_data[] = { 0, 0, 0, 0 };
GLfloat attrib1_data[] = { 1, 1, 1, 1 };
void init()
{
// setup vao
glGenVertexArraysOES(1, &my_vao);
glBindVertexArrayOES(my_vao);
// setup attrib0 as a vbo
glGenBuffers(1, &my_buffer_attrib0);
glBindBuffer(GL_ARRAY_BUFFER, my_buffer_attrib0);
glBufferData(GL_ARRAY_BUFFER, sizeof(attrib0_data), attrib0_data, GL_STATIC_DRAW);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
// "end" vao
glBindVertexArrayOES(0);
}
void draw()
{
glBindVertexArrayOES(my_vao);
// (now I assume attrib0 is bound to my_buffer_attrib0,
// and attrib1 is not bound. but is this assumption true?)
// setup attrib1
glBindBuffer(GL_ARRAY_BUFFER, 0);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, attrib1_data);
// draw using attrib0 and attrib1
glDrawArrays(GL_POINTS, 0, 1); // runtime error: Thread1: EXC_BAD_ACCESS (code=2, address=0x0)
}
Quello che voglio raggiungere è quello di avvolgere il legame di due attributi come un buffer gamma vertex:
void draw_ok()
{
glBindVertexArrayOES(0);
// setup attrib0
glBindBuffer(GL_ARRAY_BUFFER, my_buffer_attrib0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
// setup attrib1
glBindBuffer(GL_ARRAY_BUFFER, 0);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, attrib1_data);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
// draw using attrib0 and attrib1
glDrawArrays(GL_POINTS, 0, 1); // ok
}
E 'possibile associare due buffer differenti in un oggetto array di vertice? OES_vertex_array_object è diverso dagli oggetti array di vertici OpenGL (semplici)? Si noti inoltre che ottengo questo errore in XCode con il simulatore iOS. Questi sono collegamenti correlati:
- Use of VAO around VBO in Open ES iPhone app Causes EXC_BAD_ACCESS When Call to glDrawElements
- OES_vertex_array_object
Hai la risposta accettata dal momento che non sei me e hai anche risposto se OES-VAO sono gli stessi del desktop-VAO :) grazie. – telephone