8

頂点属性が頂点シェーダー内から有効になっているかどうかを確認する方法があるかどうか疑問に思っていましたか? 頂点属性が無効になっている場合、すべての値が 0.0 として扱われることがわかっているので、次のようなテストを実行できます。

if (attribute == 0)
{
    // Do something different to normal.
}
else
{
    // Use the attribute.
}

しかし、これには、属性が有効で値が 0 に設定されている場合 (無効であるかのように扱われる) の明らかな問題があります!

もう1つの解決策は、属性を使用するかどうかを示す一様な変数を使用することですが、それを行うGLSLに組み込まれたものがあるかどうか疑問に思いましたか?

4

2 に答える 2

18

ご参考までに:

頂点属性が無効になっている場合、すべての値が 0.0 として扱われることがわかっているので、次のようなテストを実行できます。

そうではありません。属性が無効になっている場合、その値は通常の OpenGL 状態から取得されます。つまり、glVertexAttrib関数によって設定された状態です。したがって、この種の「一定の属性」をシェーダーに送信することは完全に合法です。

そのため、属性が「無効」かどうかをシェーダーが判断する方法が API にありません。「無効」属性には、意味のあるデータがまだ含まれている場合があります。

于 2012-02-22T22:06:47.043 に答える
7

いいえ、ありません。

それをエミュレートするために自分でブール値のユニフォームを渡してください。

于 2012-02-22T20:42:14.783 に答える