यह ज्यादातर टिप्पणियों द्वारा कवर किया गया था, लेकिन जगह में उत्तर देने के हित में, मुझे संक्षेप में बताएं कि कौन से पूर्व परिभाषित जीएलएसएल चर कोर प्रोफाइल में चले गए हैं, और जो अभी भी वहां हैं।
ज्यादातर मामलों में, पूर्व-परिभाषित चर को कोर प्रोफाइल शेडर्स से हटा दिया गया था क्योंकि एपीआई से निकाली गई निश्चित फ़ंक्शन पाइपलाइन के बड़े हिस्सों के प्रत्यक्ष परिणाम के प्रत्यक्ष परिणाम थे। बहुत सारे uniform
वेरिएबल्स थे जो उस स्थिति को प्रतिबिंबित करते हैं जो अब अस्तित्व में नहीं है। विशिष्ट उदाहरण में शामिल हैं:
- फिक्स्ड समारोह परिवर्तन राज्य (
gl_ModelViewMatrix
, gl_ProjectionMatrix
, आदि)।
- प्रकाश पैरामीटर (
gl_Light*
)।
- सामग्री पैरामीटर (
gl_Material*
)।
- क्लिप विमान (
gl_Clip*
)।
इसी तरह, निश्चित फ़ंक्शन वर्टेक्स विशेषताओं को प्राप्त करने वाले वर्टेक्स शेडर इनपुट इसलिए चले गए हैं क्योंकि केवल सामान्य विशेषता कोर प्रोफ़ाइल में समर्थित हैं। इनमें शामिल हैं gl_Vertex
, gl_Normal
, gl_Color
, आदि
वहाँ
भी कुछ पूर्व निर्धारित varying
चर gl_FrontColor
, gl_BackColor
, और gl_TexCoord
कि सभी चले गए हैं की तरह हुआ करता था, और आसानी से अपने खुद out
/in
चर को परिभाषित करते हुए बदला जा सकता है ।
भी पूर्व परिभाषित खंड शेडर आउटपुट gl_FragColor
और gl_FragData
हैं। वे एक दिलचस्प मामला हैं क्योंकि कारण फीचर बहिष्कार नहीं है। मेरी समझ यह है कि उन्हें बहिष्कृत कर दिया गया क्योंकि वे वर्तमान कार्यक्षमता को समायोजित करने के लिए पर्याप्त लचीला नहीं थे। चूंकि gl_FragColor
का प्रकार vec4
था, इसलिए टुकड़े के टुकड़े के आउटपुट को फ्लोट घटकों के साथ वैक्टर होना होगा। यदि आपके रेंडर लक्ष्य का एक अलग प्रकार है, तो यह ठीक से काम नहीं करता है, उदा। यदि आप एक पूर्णांक बनावट में प्रतिपादन कर रहे हैं।
तो क्या पूर्व परिभाषित चर अभी भी बाकी हैं? पहले से बहुत कम, अभी भी कुछ हैं, जो सभी निश्चित फ़ंक्शन से संबंधित हैं जो अभी भी प्रोग्राम करने योग्य पाइपलाइन में मौजूद हैं। उदाहरणों में शामिल हैं:
- शिखर समन्वय शिखर शेडर और टुकड़ा शेडर, जो मुख्य रूप से शीर्ष शेडर में
gl_Position
उत्पादन और टुकड़ा शेडर में gl_FragCoord
इनपुट के होते हैं के बीच इंटरफेस।क्लिपिंग और रास्टरराइजेशन जैसे वर्टेक्स और खंड शेडर्स के बीच बैठे कई निश्चित फ़ंक्शन ब्लॉक अभी भी हैं। वे निश्चित फ़ंक्शन ब्लॉक वर्टेक्स निर्देशांक पर काम करते हैं, इसलिए पूर्व-परिभाषित चर अभी भी समझ में आते हैं।
- इंस्टेंसिंग से संबंधित कुछ चर (
gl_VertexID
, gl_InstanceID
)।
gl_ClipDistance
मनमाने ढंग से विमानों के साथ क्लिपिंग का समर्थन करने के लिए, जो अभी भी निश्चित फ़ंक्शन फॉर्म में मौजूद है।
gl_FrontFacing
। त्रिभुज के घुमावदार क्रम का निर्धारण निश्चित कार्य द्वारा किया जाता है, और टुकड़े के टुकड़े के लिए उपलब्ध कराया जाता है।
इनमें से कोई भी सूची संपूर्ण नहीं है, लेकिन मुझे उम्मीद है कि यह एक उपयोगी अवलोकन है, और कुछ पृष्ठभूमि प्रदान करता है। हमेशा की तरह, spec दस्तावेज़ अंतिम और पूर्ण उत्तर प्रदान करते हैं।
स्रोत
2014-06-26 08:06:58
इनमें से कोई भी [अंतर्निर्मित चर] (http://www.opengl.org/wiki/Built-in_Variable_ (GLSL)) बहिष्कृत हैं। कोर प्रोफाइल (संगतता प्रोफाइल) से पहले, ऐसे अंतर्निहित थे जो निश्चित पाइपलाइन विशेषताओं को प्रतिबिंबित करते थे, जैसे 'gl_Color',' gl_Normal', आदि –
ओह मुझे खेद है। मैंने पढ़ा है कि कुछ 'gl_ * 'चर को बहिष्कृत कर दिया गया था और सोचा था कि वे सभी थे। स्पष्टीकरण के लिए धन्यवाद। वैसे भी, मैं इसे कस्टम आउटपुट वैरिएबल के साथ कैसे काम करूं? या आप वर्टेक्स स्थिति सेट करने के लिए बस gl_Position विशेषता का उपयोग करते हैं? – michy04
आपको अभी भी 'gl_Position' का उपयोग करना होगा। वह चर विशेष है, क्योंकि यह निर्देशांक निर्दिष्ट करता है जो वर्टेक्स और खंड शेडर्स (क्लिपिंग, रास्टरराइजेशन इत्यादि) के बीच फिक्स्ड फ़ंक्शन ब्लॉक द्वारा उपयोग किए जाते हैं। आप इसे एक चर के साथ प्रतिस्थापित नहीं कर सकते जिसे आप परिभाषित करते हैं। उदाहरण के अलावा @ ब्रेटहेल ने पहले से ही उल्लेख किया है, 'gl_FragColor', जो कि ** खंड ** शेडर के पूर्व-निर्धारित आउटपुट के रूप में उपयोग किया जाता है, को भी बहिष्कृत किया जाता है। –