2

glGetUnfiormLocation 呼び出しの実行に問題がありました。ATI グラフィックス カードを実行している学校のコンピュータでプロジェクトを構築している間、プログラムは問題なく機能します。ただし、nvidia カードを実行している学校のコンピューターを使用すると、glGetUniformLocation への呼び出しは -1 を返します。

//c++ side
glLinkProgram(ShaderIds[0]);
ExitOnGLError("ERROR: Could not link the shader program");

ModelMatrixUniformLocaion = glGetUniformLocation(ShaderIds[0], "ModelMatrix");
ViewMatrixUniformLocation = glGetUniformLocation(ShaderIds[0], "ViewMatrix");
ProjectionMatrixUniformLocation = glGetUniformLocation(ShaderIds[0], "ProjectionMatrix");

ExitOnGLError("ERROR: Could not get the shader uniform locations");

そして、これが頂点シェーダーです

    layout(location=0) in vec4 in_Position;
    layout(location=1) in vec4 in_Color;
    layout(location=2) in vec2 in_Coord;

    uniform mat4 ModelMatrix;
    uniform mat4 ViewMatrix;
    uniform mat4 ProjectionMatrix;

    varying vec2 v_UVCoord;
    out vec4 ex_Color;

    void main(void)
    {
        gl_Position = (ProjectionMatrix * ViewMatrix * ModelMatrix) * in_Position;
        gl_PointSize = in_Coord.x; 
        ex_Color = in_Color;
        v_UVCoord = in_Coord; 
    }

私が知る限り、ユニフォームの最適化に基づいて-1を与えるべきではありません.属性と同様に、それらはすべて使用されているためです. この問題についての洞察をいただければ幸いです。

4

1 に答える 1

2

OpenGL プログラムをリンクしても、失敗しても OpenGL エラーは発生しませんプログラムが正しくリンクされているかどうかを実際に確認する必要があります。

于 2012-11-21T04:44:04.657 に答える