私たち全員が最終的に知るようになると、仕様は1つであり、実装は別のものです。ほとんどのバグは私たち自身が引き起こしますが、そうでない場合もあります。
以下の小さなリストを作成すると便利だと思います。
OpenGLおよびGLSLの最近のバージョンの実装に関連して、GPUドライバーで現在知られているバグは何ですか?
関連するグラフィックカードとドライバのバージョンを常に投稿することを忘れないでください。
始めましょう:
頂点シェーダーに、名前が字句的にの後に続くattribute
( )変数がある場合、組み込み属性、つまりとを使用することはできません。試してみると、シェーダーは機能しません(空白の画面である可能性があります)。in
gl_
gl_VertexID
gl_InstanceID
GLSL 3.3以降、またはGL_ARB_explicit_attrib_location拡張機能でのみ使用できます。
layout(location=0)
頂点シェーダーでの宣言に追加することにより、属性の位置を明示的に0に等しくなるように定義します。他の属性にこれを使用することはできますが、使用する必要はありません。重要なことは、すべての属性の位置が0に等しい必要があるということです。これを行うと、名前付けは重要ではなくなります。
命名規則を使用して、属性変数に.で始まる名前を付ける必要があります。a_
これにより、コードの可読性が損なわれることはなく、すべての変数が字句的に前になりますgl_
(セーフゾーン)。
もう1つのgl_VertexIDバグ:
これはMacbookで発生します。OS XLionに付属するOpenGL3.2を有効にする新しいドライバーで問題が修正された可能性がありますが、多くのフレームワークはレガシー2.1ドライバーのみを使用するように構成されているため、これは依然として関連性があります。
頂点シェーダーで別の属性を読み取る前にgl_VertexIDを読み取ると、後者の属性はジャンクデータを返します。他の属性がgl_Colorの場合、使用方法に関係なく、何もレンダリングされません。他の組み込み属性にアクセスすると、他の奇妙な動作が発生する可能性があります。
gl_VertexIDを使用する必要がある場合は、最初に必要になる他のすべての属性を読み取ります。最初に別の属性を読み取り、次にgl_VertexIDを読み取ると、その後の属性の読み取りはすべて正常に機能します。