这是我的片段着色器代码。它是Gradient Map函数的一个实现。
varying vec2 v_TextureCoord;
uniform samplerExternalOES sTexture;
uniform sampler2D u_GradientTexture;
uniform float u_FilParOne;
const highp vec3 W = vec3(0.2989, 0.5870, 0.1140);
void main() {
lowp vec4 textureColor = texture2D(sTexture, v_TextureCoord);
float gray = dot(textureColor.rgb, W);
float samplePoint = (0.2 + ((1.0 - 0.2) * gray));
vec4 map = texture2D(u_GradientTexture, vec2(samplePoint, 5.0));
gl_FragColor = vec4(vec3(map), textureColor.a);
}
注意这一行
float samplePoint = (0.2 + ((1.0 - 0.2) * gray));
0.2有一些我想用参数替换的东西。所以我用了制服u_FilParOne。但是当我用这个变量替换0.2:
float samplePoint = (u_FilParOne + ((1.0 - u_FilParOne) * gray));
我的程序运行但屏幕只是随机颜色循环。
当我用
替换main函数中的所有代码时gl_FragColor = vec4(u_FilParOne, u_FilParOne, u_FilParOne, 1.0);
我的屏幕变为灰色,当我从我的java代码更改制服的值时使用以下行:
filterParameterOne=0.2f;
glUniform1f(mUniformFilterParameterOneHandle, filterParameterOne);
我可以控制灰色的亮度和暗度,这意味着值正在从Java正确发送到OpenGL。
我在这里缺少什么吗?为什么我不能在原始程序中使用制服呢?