2015-11-13 9 views
14

मैं एक ओपनजीएल ग्लासल शेडर को बुलियन भेजने की कोशिश कर रहा हूं।ओपनजीएल बूल वर्दी?

वर्तमान में मैं शेडर में यह है:

uniform bool foo; 

और मैं इस का उपयोग यह निर्धारित करने के लिए:

glUniform1i(glGetUniformLocation(shader, "foo"), true); 

वहाँ एक glUniform1b होना प्रतीत नहीं होता है, तो मैं यह सेट कर रहा हूं एक पूर्णांक के रूप में। यह ठीक काम करता प्रतीत होता है।

क्या इस दृष्टिकोण के साथ कोई समस्या है? क्या यह पोर्टेबल है, या यह अन्य ग्राफिक्स कार्ड/ड्राइवरों को तोड़ सकता है? मैं इस समय ओपनजीएल 4.3 का उपयोग कर रहा हूं।

+0

जहाँ तक मुझे पता के रूप में यह 4-बाइट alingment के साथ कुछ (बूलियन 1 बाइट तो किसी भी तरह से 3 अतिरिक्त पैडिंग बाइट्स अंत में जोड़ दिया जाएगा) तो बूलियन का उपयोग कर भी कुशल और maby नहीं दे रहा है OpenGL – Amadeusz

+0

@Amadeusz में बहिष्कृत यह निश्चित रूप से बहिष्कृत नहीं है। –

उत्तर

15

§ 4.1 बेसिक प्रकार ओपन छायांकन भाषा बुनियादी डेटा प्रकार निम्नलिखित का समर्थन करता है, के रूप में वर्गीकृत इस प्रकार है:

  • bool एक सशर्त प्रकार, के मूल्यों पर ले सही या गलत
  • bvec2 एक दो घटक बूलियन वेक्टर
  • bvec3 एक तीन घटक बूलियन वेक्टर
  • bvec4 एक चार घटक बूलियन वेक्टर

...

§ 4.1.2 Booleans कोड व्यक्त करने के लिए आसान की सशर्त निष्पादन करने के लिए, प्रकार bool समर्थित है। इस बात की कोई उम्मीद नहीं है कि हार्डवेयर सीधे इस प्रकार के चर का समर्थन करता है। (...)

स्थापित करने के लिए के रूप में:

§ 2.2.1 (...) जब राज्य मूल्यों है कि राज्य के वास्तविक प्रकार से एक अलग पैरामीटर प्रकार का उपयोग कर निर्दिष्ट कर रहे हैं,

  • जब आंतरिक स्थिति के प्रकार बूलियन है, शून्य पूर्णांक या फ्लोटिंग प्वाइंट मूल्यों FALSE और ग़ैर शून्य मान में बदल दिए जातेमें बदल रही हैं: डेटा रूपांतरण इस प्रकार प्रदर्शन कर रहे हैं।
+0

धन्यवाद। 4.1 का मतलब है कि मैं अपने glsl shader में बूल का उपयोग कर सकते हैं। 4.1.2 वास्तव में मेरी मदद नहीं करता है। अभी भी उत्तर नहीं दिया गया है कि अगर मैं glUniform1i का उपयोग कर बूलियन वर्दी सेट कर सकता हूं ... –

+1

@ JanRügg ने इसके लिए एक उद्धरण जोड़ा –

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