GLSL में / बाहर कीवर्ड


46

मुझे वास्तव में समझ में नहीं आया कि GLSL में in/ outकीवर्ड का उपयोग कैसे किया जाए , और Google को uncharacteristically unhelpful बनाया जा रहा है।

वास्तव में वे क्या करते हैं? उदाहरण के लिए, मैं उनका उपयोग कैसे करूंगा, मैं खंड प्रति shader के लिए एक अलग चर सेट पास करना चाहते हैं?

शाब्दिक रूप से मुझे मिलने वाला प्रत्येक ट्यूटोरियल varying/ attributeकीवर्ड का उपयोग करता है और यह मददगार नहीं है।

जवाबों:


65

भंडारण क्वालिफायर inऔर outवास्तव में एक उद्देश्य है कि शामिल है और अधिलंघित की है varyingऔर attribute। वे क्या परिभाषित चर क्रमशः में कहते हैं और बाहर शेडर के लिए कहते हैं। देखें GLSL 4.2 संदर्भ कार्ड पेज 7:

  • in: पिछले चरण से shader में लिंकेज
  • out: अगले चरण के लिए एक shader से लिंकेज
  • attribute: inवर्टेकर शेडर के लिए भी
  • varying: outवर्टेक्स शेडर के लिए भी, inटुकड़े टुकड़े करने वाले के लिए समान (ध्यान दें: ये गलत तरीके से उपर्युक्त संदर्भ कार्ड में चारों ओर फ़्लिप किए गए हैं।)

साइड नोट के साथ कि बाद के दोनों पदावनत क्रमबद्ध हैं: वे 4.2 कोर प्रोफाइल में मौजूद नहीं हैं, केवल संगतता प्रोफाइल में।


वास्तव में वे क्या करते हैं?

उपयोग के लिए, एक ओपनरो से आधुनिक ओपनजीएल से वर्टेकर शेडर लें अध्याय 2.2: शेडर्स :

#version 110

attribute vec2 position;    
varying vec2 texcoord;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    texcoord = position * vec2(0.5) + vec2(0.5);
}

इसे 4.2 कोर में फिर से लिखा जाना चाहिए:

#version 420

in vec2 position;    
out vec2 texcoord;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    texcoord = position * vec2(0.5) + vec2(0.5);
}

अनछुए ट्यूटोरियल

मैं आपको "पुराना" ट्यूटोरियल कोड खोजने का मुख्य कारण अनुमान लगा रहा हूं, यह है कि सभी के पास GLSL 3.3+ संगत हार्डवेयर तक पहुंच नहीं है। भले ही, एक अच्छे और अधिक तारीख के ट्यूटोरियल के लिए मैं ख़ुशी से आपको निकोल बोलस के लर्निंग मॉडर्न 3 डी ग्राफिक्स ग्राफिक्स की दिशा में इंगित करूंगा ।


2
@ निचलोलस हा! मुझे पहले से ही लगा था कि इसके साथ कुछ गड़बड़ है। यह उस संदर्भ कार्ड में एक त्रुटि है। धन्यवाद! :-)
एरिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.