सभी ट्यूटोरियल पर मैं VAO (वर्टेक्स एरे ऑब्जेक्ट्स) के बारे में पा सकता हूं, वे दिखाते हैं कि वे वर्टेक्स विशेषताओं को कॉन्फ़िगर करके और एक वीबीओ (वर्टेक्स बफर ऑब्जेक्ट) को कैसे उपयोग करें। लेकिन मैं एक वीएओ बनाना चाहता हूं जिसे एक निश्चित शेडर के साथ वीबीओ के संयोजन के लिए कॉन्फ़िगर किया जाएगा, जहां प्रत्येक बफर एक ही डेटा पैटर्न (वर्टेक्स, यूवी, रंग, आदि) का उपयोग करता है। इसलिए, मैं कई वीबीओ के लिए एक वीएओ बनाना चाहता हूं जो एक शैडर का उपयोग करके तैयार किया जाएगा।
मुझे इस पर कोई डेमो नहीं मिला, इसलिए मैंने बस इसे आज़माने का फैसला किया। लेकिन यह काम नहीं करता है और glDrawArrayकॉल पर क्रैश हो जाता है । ऐसा लगता है कि VBO बाध्य नहीं है। यहाँ कोड का उपयोग कर रहा हूँ:
प्रतिपादन:
/* Prepare vertex attributes */
glBindVertexArrayOES(vao);
/* Upload the buffer to the GPU */
glBindBuffer(GL_ARRAY_BUFFER, pool->next());
glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer());
/* Draw the triangles */
glDrawArrays(GL_TRIANGLES, 0, parts * 6);
glBindVertexArrayOES(0);
VAO निर्माण:
glBindVertexArrayOES(vao);
glEnableVertexAttribArray(ls.position);
glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0);
glEnableVertexAttribArray(ls.color);
glVertexAttribPointer(ls.color, 3, GL_FLOAT, GL_FALSE, buffer.stride(), GL_BUFFER_OFFSET(buffer.dataTypeSize * 2));
glBindVertexArrayOES(0);
जहां lsएक साधारण structहै जो विशेषता स्थानों को रखता है।
रेंडरिंग भाग में, स्वैपिंग glBindBufferऔर उसके glBindVertexArrayOESआसपास भी काम नहीं किया।
तो, सवाल यह है कि क्या ऐसा करना भी संभव है, या मुझे प्रत्येक बफर को एक वीएओ के लिए बनाना होगा? और अगर मुझे प्रत्येक वीबीओ के लिए एक वीएओ बनाना है, तो क्या वीएओ के glBufferSubDataसाथ संयोजन में वीबीओ के डेटा को अपडेट करना संभव है ?