2011-04-18 14 views
5

एकाधिक बनावट इकाइयों को कैसे बंद करें क्योंकि वे अन्य रेंडर भागों को प्रभावित करते हैं। मैं अपने उन्हें सक्रिय:ओपनजीएल: एकाधिक बनावट इकाइयों को बंद करें

 glActiveTexture(GL_TEXTURE0 + index); 
     glBindTexture(GL_TEXTURE_2D, 
       ((MaterialSampler2D)specular).texture.getTOB()); 
     shader.setTexture2(index); 

वहाँ glDeactivateTexture की तरह कुछ है?

उत्तर

10

glActiveTexture बनावट-इकाइयों को सक्रिय नहीं करता है। यह केवल उस बनावट-इकाई का चयन करता है जिसे आप वर्तमान में संशोधित कर रहे हैं (हां, ओपनजीएल का ऑब्जेक्ट स्टेट मैनेजमेंट भयानक है)। आप glEnable(<texture-target>) और glDisable(<texture-target>) के साथ बनावट सक्रिय करते हैं। आपके मामले में, लक्ष्य GL_TEXTURE_2D होगा।

तो अपने प्रश्न का उत्तर देने के लिए: glActiveTexture(GL_TEXTURE0+i) का उपयोग करके बनावट-इकाई i का चयन करें और फिर इसे glDisable(GL_TEXTURE_2D) से अक्षम करें।

ध्यान दें कि यह सब शेडर्स के साथ अनावश्यक है - आप केवल मूल्यों तक नहीं पहुंच सकते हैं।

+2

मैं शेडर का उपयोग करता हूं और मुझे glEnable/glDisable (GL_TEXTURE_2D) का उपयोग करने की आवश्यकता नहीं है, क्या मैं? और मैं इसका उपयोग करता हूं, यह मेरी मदद नहीं करता है। – itun

+0

बिल्कुल, कुछ डोडी ड्राइवरों को छोड़कर जो छोटी हैं (और मुझे लगता है कि एक बग था जो इस समस्या को एक समय में अति ड्राइवरों पर प्रभावित करता था) – ltjax

1

आपका मतलब ग्लिडेबल जैसा कुछ है? http://www.opengl.org/sdk/docs/man/xhtml/glEnable.xml

+0

क्या आपको लगता है कि तर्क तर्क मुझे क्या लगता है? – itun

+0

मेरे सिर के शीर्ष से glActiveTexture (GL_TEXTURE0); glDisable (GL_TEXTURE_2D); सुनिश्चित नहीं है कि क्या आप यही करना चाहते हैं? – Bart

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