OpenGL の学習については、openglbookを参照しています。現在、第 2 章で、参照用にここに貼り付けられているコードを実行しようとしています。
私が直面している問題は、以下の機能にあります。
void CreateShaders(void)
{
GLenum ErrorCheckValue = glGetError();
VertexShaderId = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(VertexShaderId, 1, &VertexShader, NULL);
glCompileShader(VertexShaderId);
FragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(FragmentShaderId, 1, &FragmentShader, NULL);
glCompileShader(FragmentShaderId);
ProgramId = glCreateProgram();
glAttachShader(ProgramId, VertexShaderId);
glAttachShader(ProgramId, FragmentShaderId);
glLinkProgram(ProgramId);
glUseProgram(ProgramId);
ErrorCheckValue = glGetError(); // =====> returns GL_INVALID_OPERATION
if (ErrorCheckValue != GL_NO_ERROR)
{
fprintf(
stderr,
"ERROR: Could not create the shaders: %s \n",
gluErrorString(ErrorCheckValue)
);
exit(-1);
}
}
上記の function( glew.h
) に示されているように、なぜ が返されるの"GL_INVALID_OPERATION"
でしょうか?
これらの行にコメントを付けると、機能しますが、空白のウィンドウが表示されます。
これが私のglxinfoです。私のバージョンは 2.2 で、このコードは 3.3 以降を対象としているため、失敗を避けるために以下のコードを削除しました。
glutInitContextVersion(4, 0);
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
glutInitContextProfile(GLUT_CORE_PROFILE);
更新: @Tim の回答からの提案に従った後、プログラムを正常に実行できました。これらの行は作成上の問題だったようです:
"#version 400\n" ("#version 130" に置き換え)
と
レイアウト (場所 = 0) (削除されました)。layout(location=1) (削除済み)。
ただし、これにより、予想される三角形がまったく同じに印刷されません。おそらく、チュートリアルは最新のopenglバージョンを念頭に置いて教えていますが、それは私が持っていないため、問題が発生します。
出力を変更せずに、コードを最新の OpenGL (4.0+) 互換コードから下位バージョン (たとえば < 3.0) に変更する方法はありますか? グラフィックハードウェアをアップグレードできません。