मैं ओपन ES 2.0 में एक शीर्ष सरणी वस्तु अलग बफ़र्स से दो विशेषताओं रखना चाहते हैं, दूसरी बफर ग्राहक स्मृति (glBindBuffer(GL_ARRAY_BUFFER, 0)
) से पढ़ा जा रहा लेकिन मैं एक रनटाइम त्रुटि मिलती है:OES_vertex_array_object और ग्राहक राज्य
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)
}
क्या मैं हासिल करना चाहते हैं एक शीर्ष सरणी बफर के रूप में दो विशेषताओं के बंधन रैप करने के लिए है:
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
}
यह एक शीर्ष सरणी वस्तु में दो अलग अलग बफ़र्स बाध्य करने के लिए संभव है? क्या OES_vertex_array_object अलग (सादे) ओपनजीएल वर्टेक्स सरणी ऑब्जेक्ट्स से अलग है? यह भी ध्यान रखें कि मुझे यह त्रुटि XCode में आईओएस सिम्युलेटर चलाने में मिलती है। ये संबंधित लिंक कर रहे हैं:
- Use of VAO around VBO in Open ES iPhone app Causes EXC_BAD_ACCESS When Call to glDrawElements
- OES_vertex_array_object
आपको स्वीकार्य उत्तर मिलता है क्योंकि आप मेरे नहीं हैं और उत्तर दिया गया है कि ओईएस-वीएओ डेस्कटॉप-वीएओ के समान हैं :) धन्यवाद। – telephone