Tôi muốn có một đối tượng mảng đỉnh trong OpenGL ES 2.0 để giữ hai thuộc tính từ bộ đệm khác nhau, bộ đệm thứ hai được đọc từ bộ nhớ của khách hàng (glBindBuffer(GL_ARRAY_BUFFER, 0)
) Nhưng tôi nhận được một lỗi runtime:OES_vertex_array_object và khách hàng nhà nước
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)
}
Những gì tôi muốn đạt được là để bọc các ràng buộc của hai thuộc tính như một bộ đệm mảng 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
}
Có thể liên kết hai bộ đệm khác nhau trong một đối tượng mảng đỉnh? Có phải OES_vertex_array_object khác với các đối tượng mảng OpenGL đỉnh (đơn giản) không? Cũng lưu ý rằng tôi nhận được lỗi này trong XCode chạy trình mô phỏng iOS. Đây là những liên kết liên quan:
- Use of VAO around VBO in Open ES iPhone app Causes EXC_BAD_ACCESS When Call to glDrawElements
- OES_vertex_array_object
Bạn nhận được câu trả lời được chấp nhận vì bạn không phải là tôi và cũng trả lời nếu OES-VAO giống như máy tính để bàn-VAO :) cảm ơn bạn. – telephone