2013-07-24 7 views
7

यूबीओ का उपयोग करते समय, हम एक बाध्यकारी बिंदु पर एक समान ब्लॉक बांधते हैं। फिर हम भी एक ही बात करने के लिए बाध्यकारी UBO बाँध: कुछ की तरह:glUniformBlockBinding और glBindBufferBase के बीच ऑर्डर करना महत्वपूर्ण है?

  1. मैं पहली बार या glBindBufferBase glUniformBlockBinding निर्दिष्ट करना चाहिए या आदेश कोई फर्क नहीं पड़ता:

    glUseProgram(ProgramName); 
    glUniformBlockBinding(ProgramName, uniformLocation, bindingPoint); 
    glBindBufferBase(GL_UNIFORM_BUFFER, bindingPoint, bufId); 
    

    मैं इस पर 2 प्रश्न हैं ?

  2. यदि मेरी समझ सही है, तो ग्लोब बाइफरबेस को केवल यूबीओ को डेटा के साथ अपडेट करने के बाद ही बुलाया जाना चाहिए। यदि यह सही है तो यह मेरे पहले प्रश्न का उत्तर देता है।
+1

'वर्दीस्थान' यह एक समान स्थान नहीं है। यह एक समान ब्लॉक सूचकांक है। यह वही बात नहीं है। –

+1

* "यदि यह सही है तो यह मेरे पहले प्रश्न का उत्तर देता है।" * - नहीं, यह नहीं है (* "उत्तर" का जिक्र है * * नहीं "सही है" *)। यह क्यों होना चाहिए –

उत्तर

9

glUniformBlockBinding प्रोग्राम में राज्य सेट करता है (यही कारण है कि आपको इसे हर फ्रेम नहीं कहा जाना चाहिए)। glBindBufferRange ओपनजीएल संदर्भ में राज्य सेट करता है। जब तक आप प्रस्तुत नहीं करते हैं तब तक दूसरे को प्रभावित नहीं करता है, इसलिए नहीं, इससे कोई फर्क नहीं पड़ता।

और हां, आप glBindBufferRange (या बेस, जिसे रेंज के संदर्भ में परिभाषित किया गया है) पर कॉल नहीं कर सकते हैं जब तक कि आपने बफर ऑब्जेक्ट के लिए स्टोरेज आवंटित नहीं किया हो।

+0

धन्यवाद निकोल। वह मेरे प्रश्न का उत्तर देता है। – viktorzeid

+0

बीटीडब्ल्यू, क्या आप कृपया जीएल संदर्भ में प्रोग्राम बनाम सेटिंग स्थिति में राज्य स्थापित करने के बीच अंतर को समझा सकते हैं? – viktorzeid

+0

@kvikram: शायद आपको कुछ समय लेना चाहिए [ओपनजीएल के बारे में कुछ और सीखना] (http://www.opengl.org/wiki/Portal:OpenGL_Concepts)। –

संबंधित मुद्दे