均匀变量导致片段着色器出现问题

时间:2016-10-20 18:05:00

标签: java android opengl-es glsl glsles

这是我的片段着色器代码。它是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。

我在这里缺少什么吗?为什么我不能在原始程序中使用制服呢?

0 个答案:

没有答案