厳密なコア プロファイルではレンダリングされないが、「通常の」(コアのみとして明示的に要求されていない) プロファイル コンテキストでは問題なくレンダリングされることに気付いた 3D コードがいくつかありました。この問題を切り分けるために、三角形と四角形だけを描画する最小で最も単純な OpenGL プログラムを作成しました。
その OpenGL プログラムを Gist here として投稿しました。
useStrictCoreProfile変数を false に設定すると、プログラムはコンソールにエラー メッセージを出力せず、上記のスクリーンショットのように、Intel HD OpenGL 3.3 と OpenGL 4.2 を使用する GeForce の両方で四角形と三角形を描画します。
ただし、useStrictCoreProfileを true に設定すると、背景色はクリアされますが、三角形と四角形は描画されません。コンソール出力は次のとおりです。
GLCONN: OpenGL 3.2.0 @ NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 (GLSL: 1.50 NVIDIA via Cg compiler)
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step '(post loop)': GL_INVALID_OPERATION
EXIT
... 3.2 の代わりに 4.2 の厳格なコア プロファイルが要求された場合、同じ問題が発生します。3 つの異なる nvidia GPU に適用されるため、厳密なコア プロファイルに適切に準拠していないと思います。何が間違っていましたか?どうすれば修正できますか?
インポートしている glutil パッケージ内にあるため、上記の Gist にはglEnableVertexAttribArray呼び出しが見つからないことに注意してください。ただし、これはGist のcompileShaders()関数の最後のステップとして呼び出されます。