2010-10-28 15 views
9

En OpenGL siempre he entendido que glEnable(GL_TEXTURE_1D), glEnable(GL_TEXTURE_2D) y/o glEnable(GL_TEXTURE_3D) (y correspondiente glDisable) es un parámetro de la unidad por la textura.Debería glEnable (GL_TEXTURE_2D) ser aplicado por unidad de textura

Recientemente traté de confirmar esto pero no he encontrado ninguna documentación clara que confirme de cualquier manera con respecto a esta pregunta.

pocas palabras y en el código, debería hacer esta

glActiveTexture(GL_TEXTURE0); 
glEnable(GL_TEXTURE_2D); 
... bind etc ... 

glActiveTexture(GL_TEXTURE1); 
glEnable(GL_TEXTURE_2D); 
... bind etc ... 

o esta

glEnable(GL_TEXTURE_2D); 

glActiveTexture(GL_TEXTURE0); 
... bind etc ... 

glActiveTexture(GL_TEXTURE1); 
.... bind etc ... 

Tenía la esperanza de encontrar un poco de claridad.

Respuesta

7

Es de hecho por la textura unidad. La documentación más reciente que encontré mencionar esto era explícitamente la especificación Open GL 2.1 (actualización 2006) here

En la sección 8.3.16: la aplicación de texturas

es probable que sea mencionado en algún lugar de las nuevas especificaciones pero eran pesado reorganizado. Puedes echar un vistazo a todas las especificaciones de la versión Open GL en el sitio web de opengl org (quería publicar un enlace, pero parece que no puedo publicar más de uno).

+5

Bueno, de hecho, no estará en las últimas revisiones principales porque la función fija fue desaprobada y luego eliminada, y la Habilitación está controlando el estado de la función fija. No tiene ningún efecto sobre los sombreadores. – Bahbar

+0

¡Eso es bueno saber! – Montdidier

+0

@Bahbar: ¿Quiere decir que los sombreadores GLSL con sus anotaciones pueden controlar el estado de las unidades de textura y los muestreadores y, por lo tanto, no es necesario un glEnable explícito (GL_TEXTURE2D) por ejemplo? – Montdidier

8

Es por unidad de textura.

partir de la especificación GL1.5, 3.8.15:

Cada unidad de textura está habilitado y obligado a los objetos textura independientemente de las otras unidades de textura

1

Si utiliza sombreadores GLSL en OpenGL, la llamada glEnable(GL_TEXTURE) no tiene ninguna influencia.

Además, si tiene la intención de pasar al perfil básico de OpenGL 3.x, tenga en cuenta que glEnable(GL_TEXTURE) está en desuso.

+0

'glEnable (GL_TEXTURE_2D)' todavía está teniendo un efecto en mi código, a pesar de que solo tiene código de sombreado. Parece que las llamadas a 'glBindTexture' cambian el comportamiento ... Este sería el perfil de núcleo de OpenGL 3.2. –

Cuestiones relacionadas