2012-03-22 15 views
5

Tengo un shader de fragmento con los siguientes atributos:retorno glGetUniformLocation -1 OpenGL ES (iPhone)

varying highp vec2 coordinate; 
precision mediump float; 

uniform sampler2D videoframe; 
uniform sampler2D videosprite; 
uniform vec4 mask; 
uniform float threshold; 

estoy recibiendo sus ubicaciones y establecer posteriormente las:

_frame = glGetUniformLocation(_program, "videoframe"); 
_sprite = glGetUniformLocation(_program, "videosprite"); 
_mask = glGetUniformLocation(_program, "mask"); 
_threshold = glGetUniformLocation(_program, "threshold"); 

NSLog(@"%i %i %i %i", _frame, _sprite, _mask, _threshold); 

Sin embargo, el registro revela: 0 2 1 -1

De la documentación, veo que -1 (el umbral uniforme) significa que falló. ¿Por qué está fallando? Gracias

Respuesta

10

El compilador GLSL puede (y normalmente lo hará) optimizar los uniformes y los atributos que no se usan en el sombreado. Solo puede consultar las ubicaciones de los uniformes activos, que son los que se usan en al menos una rama de su sombreador.

Supongo que la variable threshold no se usa en ningún lugar de su código de sombreado. Pero en este caso, no es necesario que tenga ningún valor, y establecer un valor uniforme para la ubicación -1 simplemente no hará nada. Entonces, en realidad no tienes que preocuparte por esto.

+0

Wow ... aunque sabía esto, gracias por el recordatorio. Ese era el problema ... – 0xSina