2

データを読み取るために、符号なし整数テクスチャに次のシェーダーを使用しています。フラグメントシェーダー:

コード:

#version 150
out uvec4 fragColor;
uniform uint factor;
void main()
{
uint temp=factor;
temp=temp/2;
fragColor = uvec4(temp,temp,temp,temp);
}

しかし、ドライバーAでエラーが発生しています。

"コンパイルに失敗しました。エラー:0:7:'/':オペランドの型が間違っています。'uint'型の左側のオペランドと'const int'型の右側のオペランドをとる演算'/'は存在しません(許容できる変換がありません)エラー:1つのコンパイルエラー。コードが生成されません。」

ドライバーBでは完全に動作します。ドライバーAにバグがありますか、それともシェーダーが間違っていますか?間違っている場合、どうすれば同じ結果を得ることができますか?

4

2 に答える 2

1

これを試して:

temp = temp / uint(2);
于 2013-02-22T16:09:39.497 に答える
1

GLSL では、符号付き整数と符号なし整数の間の暗黙的な変換が許可されていないため、バイナリ オペランドの両方のオペランドが同じである必要があります。使用する:

temp = temp / 2u;

unsigned int 定数を使用します。

于 2013-02-22T19:19:50.240 に答える