OpenGL 3の既知のバグ、OpenGL 4実装
質問
私たち全員が最終的に知るようになると、仕様は一つのことであり、実装は別のものです。バグのほとんどは私たち自身を引き起こしますが、そうではないこともあります。
小さなリストを作成すると便利だと思います。
OpenGLとGLSLの最近のバージョンの実装に関連するGPUドライバーで現在知られているバグは何ですか?
常に関連するものを投稿することを忘れないでください グラフィックスカード と ドライバーバージョン.
解決
始めましょう:
- GPU:AMD/ATI Radeon HD 4650で確認
- タイプ:GLSLの問題
- GLバージョン関連:3.3、おそらく3.1以上(または前)に確認
- 関連するリンク: http://forums.amd.com/devforum/messageview.cfm?catid=392&threadid=139288
- ドライバーバージョン:Catalyst 10.10(9-28-2010)で確認
- ステータス:2010-11-27の時点で修正がありますが、パブリックドライバーのリリースにまだ到達していません(したがって、修正がリリースされたとしても、それほど有名なバージョンのドライバーのユーザーは引き続き影響を受けます数ヶ月のように)
- 説明:
頂点シェーダーにある場合は、何かがあります attribute
(in
)名前が字句的に後になった変数 gl_
, 、つまり、組み込みの属性を使用することはできません gl_VertexID
と gl_InstanceID
. 。試してみると、シェーダーは機能しません(空白の画面、おそらく)。
- 回避策(新):
GLSL 3.3以上でのみ、または gl_arb_explicit_attrib_location 拡大。
任意の属性の場所を、Applindedによって明示的に0に等しく定義します layout(location=0)
頂点シェーダーでの宣言に。あなたはそうするかもしれませんが、これを他の属性に使用する必要はありません。重要なことは、属性が0に等しい場所である必要があることです。それを行った後、命名はもはや重要ではありません。
- 回避策(代替):
最初に属性変数に名前を付ける必要がある名前の条約を使用してください a_
, 、それはあなたのコードの読みやすさを傷つけることはありません、そしてそれらのすべてを字句的に前にするでしょう gl_
(安全地帯)。
他のヒント
別のgl_vertexidバグ:
- GPU:Nvidia Geforce 9400M
- タイプ:GLSLの問題
- ドライバーバージョン:NVDANV50HAL 1.6.36
- OpenGLバージョン:2.1、GLSL 1.2を使用してGL_EXT_GPU_SHADER4拡張機能
これはMacBooksで発生します。 OS X Lionに付属するOpenGL 3.2を有効にする新しいドライバーが問題を修正した可能性がありますが、多くのフレームワークはレガシー2.1ドライバーを使用するようにのみ構成されているため、これはまだ関連しています。
頂点シェーダーの別の属性を読む前にGL_VERTEXIDを読んだ場合、後者の属性はジャンクデータを返します。他の属性がGL_COLORの場合、それがどのように使用されるかに関係なく、何もレンダリングされません。他の組み込み属性にアクセスすると、他の奇妙な動作につながる可能性があります。
- 回避策:
GL_VERTEXIDを使用する必要がある場合は、最初に必要な他のすべての属性を読み取ります。最初に別の属性を読んでからGL_VERTEXIDが続く場合、属性の後続の読み取りは正常に動作します。