問題:
私はhttp://www.arcsynthesis.org/gltut/index.htmlチュートリアルからOpenGLを学んでいますが、チュートリアル 13: Geometry Impostorsを機能させるのに非常に苦労しました (6 時間以上)。実際には何の操作もしないはずのコードの小さな変更です。なぜそれが何かを変更するのかを知るためにあなたの助けが必要です.
説明 - 編集:
問題は、変更されていないコードではフラグメント シェーダーがジオメトリ シェーダーから正しい入力を取得できなかったことですが、ジオメトリ シェーダーの出力インターフェイス ブロックを個別の変数に置き換えるか、ブロックにインスタンス名を付けると、プログラムが正常に動作するようになります。ただし、これらの変更はノーオペレーションである必要があります。
問題はおそらく名前の衝突です。
このように動作しません:
in VertexData
{
vec3 cameraSpherePos;
float sphereRadius;
} vert[];
out FragData
{
flat vec3 cameraSpherePos;
flat float sphereRadius;
smooth vec2 mapping;
};
void main()
{
mapping =
cameraSpherePos =
sphereRadius =
EmitVertex();
/* mapping's value doesn't get to the fragment shader correctly */
}
ただし、FragData に frag のようなインスタンス名を付け、マッピングの代わりに frag.mappaing を使用するか、3 つの個別の変数を使用すると、問題が解決します。
インスタンス名がないと機能しないのはなぜですか?
編集:ドライバーの問題のようです。