我有一个具有以下属性的片段着色器:

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(统一阈值)表示失败。为什么会失败?
谢谢

最佳答案

GLSL编译器可以(并且通常会)优化着色器中未使用的任何制服和属性。您只能查询事件制服的位置,即在着色器的至少一个分支中使用的制服。

因此,我猜想您的着色器代码中的任何地方都没有使用threshold变量。但是在这种情况下,无论如何您都不需要它的值,并且为位置-1设置统一的值将无济于事。因此,您实际上不必为此担心。

关于iphone - glGetUniformLocation返回-1 OpenGL ES(iPhone),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9828118/

10-09 06:29