Единая переменная, вызывающая проблемы во фрагментном шейдере

Это мой фрагмент кода шейдера. Это реализация функции 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.

Есть что-то, чего я здесь не хватает? Почему я не могу использовать униформу в самой оригинальной программе?

0 ответов

Другие вопросы по тегам