2012-03-22 21 views
5

Ho uno shader frammento con i seguenti attributi:glGetUniformLocation ritorno -1 OpenGL ES (iPhone)

varying highp vec2 coordinate; 
precision mediump float; 

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

sto ottenendo le loro posizioni e poi impostandole:

_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); 

Tuttavia, il registro rivela: 0 2 1 -1

Dalla documentazione, vedo che -1 (l'uniforme della soglia) significa che non è riuscito. Perché sta fallendo? Grazie

risposta

10

Il compilatore GLSL può (e di solito lo farà) ottimizzare le uniformi e gli attributi che non sono utilizzati nello shader. Puoi solo interrogare le posizioni delle uniformi attive, essendo quelle che sono utilizzate in almeno un ramo dello shader.

Quindi immagino che la variabile threshold non sia utilizzata da nessuna parte nel codice dello shader. Ma in questo caso non è comunque necessario il suo valore e l'impostazione di un valore uniforme per la posizione -1 non farà nulla. Quindi in realtà non devi preoccuparti di questo.

+0

Wow ... anche se lo sapevo, grazie per il promemoria. Questo era il problema ... – 0xSina