2012-03-22 14 views
5

私は次の属性を持つフラグメントシェーダを持っている:glGetUniformLocationリターン-1のOpenGL ES(iPhone)

varying highp vec2 coordinate; 
precision mediump float; 

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

私はその場所を取得し、後でそれを設定しています:

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

しかし、ログを明らかに:0 2 1 -1

ドキュメンテーションからは、-1(しきい値統一)は失敗したことを示しています。それはなぜ失敗ですか? ありがとう

答えて

10

GLSLコンパイラは、シェーダで使用されていないユニフォームと属性を最適化できます(通常はそうなります)。シェイダーの少なくとも1つのブランチで使用されているユニフォームの位置のみを照会することができます。

threshold変数はシェーダコードのどこでも使用されていないと思います。しかし、この場合は、とにかく値を必要とせず、場所-1の一様な値を設定するだけで何も起こりません。だからあなたは実際にこれについて心配する必要はありません。

+0

うわー...私はこれを知っていましたが、思い出してくれてありがとう。それは問題だった... – 0xSina

関連する問題