私は、厳しいコアプロファイルではレンダリングせず、「通常の」(コアとして明示的に要求されていない)プロファイルコンテキストではレンダリングしないと気づいた3Dコードをいくつか持っていました。問題を特定するために、私は、三角形や四角形を描画する最小の最も簡単なOpenGLのプログラムを書いている:この単純なOpenGLコード( "寛大な" 3.3と4.2のプロファイルで動作)は、厳格な3.2と4.2のコアプロファイルで動作するのですか?
私はas a Gist here OpenGLのプログラムということを掲載しています。 falseに設定useStrictCoreProfile変数で
、プログラムは、コンソールにエラーメッセージを出力せず、インテルHDのOpenGL 3.3およびOpenGL 4.2のGeForceの両方、クワッドおよび上記スクリーンショット当たりとして三角形を描画します。
しかし、trueにuseStrictCoreProfileセットで、それは背景色をクリアしますが、トライ&クワッドを描画していない、コンソール出力がこれです:
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
... 4.2厳格なコア場合プロファイルは3.2、同じ問題の代わりに要求されます。 3つの異なるNVIDIA GPUに適用されるので、厳密なコアプロファイルに正しく準拠していないと仮定します。私は間違って何をしていたのですか?これをどのように修正できますか?しかし、これは、その要旨のcompileShaders() FUNCの最後のステップとして呼び出されるん -
注意、あなたはそれがinside the glutil packageだと私は輸入しています、上記の骨子でglEnableVertexAttribArrayコールを見つけることができません。
あなたが「GL_INVALID_OPERATION」よりも、より有用なエラーメッセージを取得するためにGL_ARB_debug_output拡張子を使用してみましたか?それは設定するのはちょっと面倒ですが、絶対にその価値があります。 – postgoodism
+1最も簡単な可能な最小限のOpenGLプログラムの例を共有するために – ANisus
公正であるために、実際には「最小の最も単純な可能なOpenGLプログラム」とは言えません。 ;) – metaleap