web-dev-qa-db-fra.com

Que stocke sampler2D?

J'ai lu un exemple de texture dans OpenGL 2.1. Le fragment shader ressemble à ceci:

#version 120

uniform sampler2D texture;
varying vec2 texcoord;

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

texcoord est passé du vertex shader.

Le code de rendu C++ suivant est utilisé:

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

Je suis confus à propos de certaines choses. J'ai quelques questions:

  1. Dans le shader de fragment, la texture reçoit une valeur nulle (par glUniform1i()). La valeur est-elle vraiment nulle? La valeur est-elle autre chose?

  2. glActiveTexture() appel est-il vraiment nécessaire?

  3. Pourquoi passons-nous une valeur nulle dans glUniform1i()?

31
Bình Nguyên

Le sampler2D Est lié à un nité de texture . L'appel glUniform le lie à l'unité de texture zéro. L'appel glActiveTexture() n'est nécessaire que si vous allez utiliser plusieurs unités de texture (car GL_TEXTURE0 Est de toute façon la valeur par défaut).

32
Ville Krumlinde