(どのように)GLSLで変換せずにスカラーを別のスカラーにキャストできますか?
この質問で使用される「キャスト」の定義は、2つのタイプが同じビット数であると仮定して、データ自体を変更せずにまったく同じデータの解釈を変更することです。すなわち(フロート)B00101111 == B00101111
この質問で使用される「変換」の定義は、データの解釈と、データを元の値の数学的な近似値、つまり(float)1==1.0に再フォーマットすることの両方を変更することです。
GLSL 4.30.6仕様の5.4.3は、スカラーfloat-to-intおよびint-to-floatコンストラクターが変換のみを実行することを意味します 。浮動小数点値は削除されます。」-pg。87
棺桶のもう一つの釘は、セクション5.1、ページのこの行にあります。85: 「型キャスト演算子はありません。代わりにコンストラクターが使用されます。」
目標は、Buffer-Texture / Texture-BufferとtexelFetch(...)を使用してfloat vec4s(128ビット)を取得し、次のような構造体を埋めることです。
struct MyStruct
{
int foo; //32bit
float bar; //32bit
int baz; //32bit
short blah; //16bit
short hmm; //16bit
} // 128bit total
...しかし、そのvec4をバイナリサブチャンクに分解し、それらを再キャストして上記の構造体値を設定する方法を特定するのに問題があります。
理論的には、次のように機能しますか?
MyStruct myUuberChunk = MyStruct(myVec4);
float vec4s(またはint vec4s)を使用する理由は、それが正しい限り、帯域幅のパフォーマンスを目的として1つの128ビットフェッチですべての値を取得することです(ほとんどのカードには4つの32ビットメモリバスがあります)。