2012-06-03 12 views
20

मैंने OpenGL 2.1 में एक बनावट उदाहरण पढ़ा है। टुकड़ा शेडर इस तरह दिखता है:sampler2d स्टोर क्या करता है?

#version 120 

uniform sampler2D texture; 
varying vec2 texcoord; 

void main(void) 
{ 
    gl_FragColor = texture2D(texture, texcoord); 
} 

texcoord शिखर शेडर से पारित कर दिया है।

निम्नलिखित सी ++ प्रतिपादन कोड प्रयोग किया जाता है:

void render() 
{ 
    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, texture_id); 
    glUniform1i(unf_texture, 0); 
} 

मैं कुछ चीजों के बारे में उलझन में हूँ। मेरे पास कुछ सवाल है:

  1. खंड टुकड़े में, बनावट शून्य मूल्य (glUniform1i द्वारा) पारित की जाती है। क्या कीमत वास्तव में शून्य है? क्या मूल्य कुछ और है?

  2. glActiveTexture कॉल वास्तव में आवश्यकता है?

  3. हम gluniform1i में शून्य मूल्य क्यों पास करते हैं?

उत्तर

29

नमूना 2 डी texture unit से जुड़ा हुआ है। GlUniform कॉल इसे बनावट इकाई शून्य से बांधता है। GlActiveTexture कॉल केवल तभी जरूरी है जब आप एकाधिक बनावट इकाइयों का उपयोग करने जा रहे हैं (क्योंकि GL_TEXTURE0 वैसे भी डिफ़ॉल्ट है)।

+24

आपको इसे हमेशा 'ग्लैक्टिवटेक्चर' कहने की आदत बनाना चाहिए। इस तरह, जब आपको अचानक एक से अधिक बनावट का उपयोग करने की आवश्यकता होती है, तो आप दुनिया को तोड़ नहीं देंगे। –

+0

स्पष्ट करने के लिए - क्या यह सही है कि प्रत्येक बनावट (1 डी, 2 डी, 3 डी) जिसे "GL_TEXTURE0" के अंतर्गत बाध्य किया जा सकता है, को समान मूल्य (0) नमूना 1 डी/2 डी/3 डी में पास होना होगा? और "GL_TEXTURE1" के तहत असाइन किए गए एक बनावट को शेडर के अंदर वर्दी में दिए गए मान 1 की आवश्यकता होगी? – Chris

+1

@ क्रिस हाँ यह सही है। –

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