2012-03-22 19 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

जीएलएसएल कंपाइलर किसी भी वर्दी और विशेषताओं को अनुकूलित कर सकता है जो शेडर में उपयोग नहीं किए जाते हैं। आप केवल सक्रिय वर्दी के स्थानों से पूछ सकते हैं, जो आपके शेडर की कम से कम एक शाखा में उपयोग किए जाते हैं।

तो मुझे लगता है कि threshold चर आपके शेडर कोड में कहीं भी उपयोग नहीं किया जाता है। लेकिन इस मामले में आपको वैसे भी इसकी कीमत की आवश्यकता नहीं है, और स्थान -1 के लिए एक समान मान सेट करना कुछ भी नहीं करेगा। तो आपको वास्तव में इसके बारे में चिंता करने की ज़रूरत नहीं है।

+0

वाह ... भले ही मुझे यह पता था, अनुस्मारक के लिए धन्यवाद। वह समस्या थी ... – 0xSina

संबंधित मुद्दे