2

私はopenGLで作業しています。頂点シェーダーとフラグメント シェーダーは相互に使用するだけで問題なく動作しますが、テッセレーション シェーダーを追加すると、プログラムで以前に認識されていたユニフォームがシェーダーで参照されないと言われます。

これは私が気付いていない特異性ですか?

これは私の.cppにあります:

program = new Shader("tessVshader.glsl", "tessFshader.glsl", "tessGshader.glsl");
// Removed tesselation specific just to try to compile w/ geo shader
...
program->SetUniform("Modelview", model * view);
program->SetUniform("NormalMatrix", normalMatrix);

そして、これは tessGshader.glsl の最初の行です:

uniform mat4 Modelview;
uniform mat3 NormalMatrix;
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;

これは出力です:

Uniform Modelview is not referenced in the shaders.
4

1 に答える 1

0

Shaderクラスはあなたが作成したものですか?はいの場合、そのコードの一部が役立ちます。GLシェーダーオブジェクトが適切に作成されている場合は、ユニフォームにアクセスする前に、glUseProgram(...)が呼び出されていることを確認してください。そうしないと、openGLはそれらを見つけることができなくなります。そしてところで、glslコードでコンパイル/リンク時のエラーが表示されることを確認してください。まだ使用していない場合は、関数glGetInfoLogを検索してください。

于 2012-12-07T00:15:36.783 に答える