Единая переменная, вызывающая проблемы во фрагментном шейдере
Это мой фрагмент кода шейдера. Это реализация функции 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));
моя программа работает, но экран продолжает циклически переключаться между случайными цветами.
когда я заменяю весь код в основной функции на
gl_FragColor = vec4(u_FilParOne, u_FilParOne, u_FilParOne, 1.0);
Мой экран становится серым, и когда я изменяю значение формы из моего кода Java со строками:
filterParameterOne=0.2f;
glUniform1f(mUniformFilterParameterOneHandle, filterParameterOne);
Я могу контролировать яркость и темноту серого, что означает, что значение правильно отправляется из Java в OpenGL.
Есть что-то, чего я здесь не хватает? Почему я не могу использовать униформу в самой оригинальной программе?