私はそれが動作していると思っていましたが、私の頂点シェーダの値を変更する方法はまだ分かりません。私はOpenGLで行うことは、それぞれのために、以下れるレンダリング:頂点シェーダ(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(場所)部分をコメントアウトし、その後、均一の代わりのconstとしてfloatを使用している場合、私のシェーダが正常に動作している場合
。しかし、私は各レンダリングでシェーダの値を変更できるようにしたい。私はそのために制服を使わなければならなかった...?
私には何かがありますか?
EDIT:
Appearently私は、次のGLSLエラーを取得しています:
non constant expression in initialization
だから、それが動作するためには一定でなければならない...それはありませんがあることを意味してい動的な価値としてこれを持つ方法..?
これは私のバーテックスシェーダです:あなたはこのような頂点シェーダであなたの制服を宣言しなければなりません
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