1

フラグメントシェーダーでは、以下が正常にコンパイルされます。

uniform isampler2D testTexture;
/* in main() x, y, xoff and yoff are declared as int and assigned here, then... */
int tmp = texelFetchOffset(testTexture, ivec2(x, y), 0, ivec2(xoff, yoff)).r;

ただし、以下はコンパイルされません。

uniform usampler2D testTexture;
/* in main() x, y, xoff and yoff are declared as uint and assigned here, then... */
uint tmp = texelFetchOffset(testTexture, uvec2(x, y), 0, uvec2(xoff, yoff)).r;

OpenGL 4.2ドライバーは、次のコンパイラエラーメッセージを表示します。

エラーC1115:互換性のあるオーバーロードされた関数 "texelFetchOffset(usampler2D、uvec2、int、uvec2)が見つかりません

これは、Quadro5010M用のNvidiaのLinuxドライバー290.*ですが、(初心者の)間違いを犯して、ここで何とか仕様を作成していなかったのではないかと思います。

4

1 に答える 1

3

静止画をとるtexelFetchOffset関数は、テクスチャの座標とオフセットとしてを取ります。サンプラーのタイプと戻り値にのみ適用されます。関数に関するすべてが符号なしになるわけではありません。usampler2D ivec2u

また、OpenGLでは、符号なし整数型と符号付き整数型の間の暗黙的な変換は許可されていません。

于 2012-03-19T09:22:58.937 に答える