Мне показалось, что я работал, но я все еще не могу понять, как изменить значение в моем вершинном шейдере. Что мне делать в OpenGL заключается в следующем, для каждого рендеринга:change float in vertex shader (GLSL)
//i bind my shader
shader.bind();
// Then trying to set the value in my vertex shader like so:
GLuint test = glGetUniformLocation(shader.id(), "Test");
glUniform1f(test, 6.0f);
// Do some other stuff like rendering an object
// ...
// then unbind shader
shader.unbind();
Это значение я хочу изменить в моей вершинных шейдеров:
uniform float Test = 0.66; // Doesn't work
//const float Test = 0.66; // Works
Но мой затенение не работает, когда я пытаюсь что он делает мой объект черным.
Если я комментировать glGetUniform (Location) части, и если использовать поплавок как сопзИте вместо униформы тогда мой шейдер работает отлично. Но я хочу, чтобы иметь возможность изменять значение в моем шейдере в каждом рендеринге. Я, хотя я должен был использовать форму для этого ...?
Есть ли что-то, что мне не хватает .. ??
EDIT:
Appearently я получаю следующее сообщение об ошибке: GLSL
non constant expression in initialization
Так должно быть постоянным для того, чтобы работать ... Означает ли это, что не существует способ иметь это как динамическое значение ..?
Это мой Vertex Shader:
const float FresnelPower = 1.0;
uniform float Eta; // <---- MUST BE CONSTANT...
const float F = ((1.0-Eta) * (1.0-Eta))/((1.0+Eta) * (1.0+Eta));
varying vec3 Reflect;
varying vec3 Refract;
varying float Ratio;
void main()
{
vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex;
vec3 ecPosition3 = ecPosition.xyz/ecPosition.w;
vec3 i = normalize(ecPosition3);
vec3 n = normalize(gl_NormalMatrix * gl_Normal);
Ratio = F + (1.0 - F) * pow((1.0 - dot(-i, n)), FresnelPower);
Refract = refract(i, n, Eta);
Refract = vec3(gl_TextureMatrix[0] * vec4(Refract, 1.0));
Reflect = reflect(i, n);
Reflect = vec3(gl_TextureMatrix[0] * vec4(Reflect, 1.0));
gl_Position = ftransform();
}
Я попробовал то, что вы сказали, я проверил с помощью glGetError(), и это дало мне ошибку, когда я попытался связать шейдер (glUserProgram). Я отлаживал еще немного и заметил, что у меня возникла ошибка компиляции glsl. Я опубликовал свой первый пост с более подробной информацией. Может быть, вы знаете ответ на этот вопрос? – w00