2

私が持っているGLSL頂点シェーダーでは:

#version 330
layout (location=0) uniform mat4 wm_;
layout (location=1) uniform mat4 vm_;
...more code...

シェーダーのコンパイル時にコンパイル エラーが発生しません。その後、wm_ と vm_ の glGetUniformLocation を assert() して、シェーダー ソースで指定された場所を返します。glGetUniformLocation が異なる値を返すため、アセリオンが起動します (-1 は返されません。つまり、ユニフォームは最適化されず、有効に見えるが異なる場所が割り当てられます)。

誰でもこの動作を説明できますか?

4

1 に答える 1

3

GLSL 4.30 以降、または拡張機能 GL_ARB_explicit_uniform_location によって、明示的な一様な場所がサポートされています。ここでのコンパイラは許容度が高すぎて、GLSL 3.30 でサポートされていない構文を許可します。これはドライバーのバグと見なす必要があります。

于 2013-02-17T18:14:38.373 に答える