2013-02-20 61 views
11

में सक्रिय है या नहीं, मैं जानना चाहता हूं कि GL_TEXTURE_2D शेडर में सक्रिय है या नहीं।पता लगाएं कि क्या GL_TEXTURE_2D शेडर

मैं शेडर के साथ-साथ सक्रिय बनावट (यदि GL_TEXTURE_2D सेट है) पर रंग बाध्य कर रहा हूं और इन दोनों को गठबंधन करने की आवश्यकता है।

तो यदि बनावट बना है, तो रंग और बनावट (नमूना 2 डी * रंग) मिलाएं और यदि कोई बनावट बाध्य नहीं है, तो रंग का उपयोग करें।

या मुझे इसके बारे में एक और तरीका जाना चाहिए?

उत्तर

17

यह स्पष्ट नहीं है कि 'GL_TEXTURE_2D सक्रिय है' या 'GL_TEXTURE_2D सेट है' से आपका क्या मतलब है।

कृपया ध्यान दें निम्नलिखित:

  • glEnable(GL_TEXTURE_2D) अपने (टुकड़ा) शेडर पर कोई प्रभाव नहीं है। यह आपकी पाइपलाइन के निश्चित फ़ंक्शन भाग को पैरामीटरेट करता है जिसे आपने अभी एक टुकड़ा शेडर का उपयोग करके प्रतिस्थापित किया है।
  • जीएलएसएल शेडर के अंदर से कहने का कोई 'प्रत्यक्ष'/​​'साफ' तरीका नहीं है कि क्या आपके बनावट नमूने (मेरे ज्ञान के लिए) से बना बनावट इकाई से जुड़ा एक वैध बनावट है या नहीं।
  • जीएलएसएल 1.3 से शुरू होकर नमूना से जुड़े एक वैध बनावट की उपस्थिति का पता लगाने के लिए आपको textureSize(sampler, 0).x > 0 का उपयोग करके भाग्य हो सकता है, लेकिन इसका परिणाम अपरिभाषित व्यवहार हो सकता है।
  • ARB_texture_query_levels एक्सटेंशन वास्तव में स्पष्ट रूप से बताता है कि textureQueryLevels(gsampler2D sampler)नमूना से संबंधित कोई बनावट नहीं है।

क्या आपको इसके बारे में एक और तरीका जाना चाहिए? मुझे ऐसा लगता है: शेडर के अंदर निर्णय लेने के बजाय, बस 'सफेद' के 1x1 पिक्सेल बनावट को बांधें और बिना शर्त नमूने जो रंग के साथ परिणाम को गुणा करें, जो स्पष्ट रूप से 1.0 * color लौटाएगा। यह भी अधिक पोर्टेबल और तेज होने जा रहा है।

+0

धन्यवाद, सफेद बनावट विधि के लिए बहुत मदद करता है :) – RobotRock

+4

+1। कहीं और सूचीबद्ध एकमात्र समाधान दो अलग-अलग शेडरों का उपयोग करना है, जो ज्यादातर मामलों में व्यर्थ है। डिफ़ॉल्ट रूप से – SystemParadox

+0

opengl आपके शेडर नमूने के लिए एक मान निर्दिष्ट करता है, इसलिए काम करने के लिए आपको यह जांचने की आवश्यकता है कि बनावट आकार 1 से अधिक है या नहीं – Sherlock