He leído un ejemplo de textura en OpenGL 2.1
. El shader de fragmento es el siguiente:¿Qué almacena sampler2d?
#version 120
uniform sampler2D texture;
varying vec2 texcoord;
void main(void)
{
gl_FragColor = texture2D(texture, texcoord);
}
la texcoord
se transmite de vertex shader.
El siguiente código C++ renderizado se utiliza:
void render()
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture_id);
glUniform1i(unf_texture, 0);
}
Estoy confundido acerca de algunas cosas. Tengo algunas dudas:
En fragment shader, la textura se pasa un valor cero (por glUniform1i). ¿El valor es realmente cero? ¿El valor es algo más?
¿Es realmente necesario el llamado
glActiveTexture
?¿Por qué pasamos un valor cero en glUniform1i?
Debería tener la costumbre de llamar siempre a 'glActiveTexture'. De esta forma, cuando de repente necesite usar más de una textura, no romperá el mundo. –
para aclarar: ¿es correcto, por lo tanto, que cada textura (1D, 2D, 3D) que pueda vincularse bajo el mismo "GL_TEXTURE0", tenga que tener el mismo valor (0) pasado a sampler1D/2D/3D? y una textura asignada bajo "GL_TEXTURE1" requeriría que el valor 1 pasara al uniforme dentro del sombreador? – Chris
@Chris Sí, eso es correcto. –