4

私はこのシェーダーコード(GLSL)を持っています:

#version 420

in vec4 vertex;

uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;

void main()
{
    gl_Position = modelViewMatrix * projectionMatrix * vertex;
}

modelViewMatrixと projectMatrix を設定しないと、エラーなしで実行されます。その場合、描画しようとすると、OpenGL は無効な操作の例外をスローします。

このコードを使用して行列を設定します。

glUniformMatrix4fv(location, 1, false, sendArray); 「location」と「sendArray」に適切なデータが含まれていることを確認しました。何が起きてる?

編集: glUniformMatrix4fv 呼び出しに問題があるようですが、何が問題なのかわかりません。

設定するコードlocationは次のとおりです。

GLint location;

GLint location = glGetUniformLocation(this->programID, uniform.c_str());

if (location == -1)
{
    throw ShaderVariableNotFoundException(uniform, this->programID);
}

4

2 に答える 2

11

私はそれを修正しましたが、それがどれほど恥ずかしいので、すべての解決策をあなたに伝えるのは気が進まない...

私...

シェーダー プログラムをバインドするのを忘れていました。

お時間を無駄にしてしまい、大変申し訳ございません。

于 2012-05-27T01:09:36.510 に答える
4

あなたは16カウントを渡していますが、これは間違っています。

ドキュメントから:

count引数は、渡される行列の数を示します。1countつの行列の値を変更する場合は 1 を使用する必要がありcount、行列の配列を変更する場合は 1 より大きい値を使用できます。

そして、予想されるエラーが発生しています

GL_INVALID_OPERATIONcountが1 より大きく、指定された一様変数が配列変数でない場合に生成されます。

ドキュメントのメモセクションは、もう一度教えてくれます

countが 1 より大きく、指定された一様変数が配列でない場合、エラーGL_INVALID_OPERATIONが生成され、指定された一様変数は変更されません。

于 2012-05-27T00:09:56.103 に答える