言語は cg です。
0 から 1 の間でなければならない 8 ビットの float があります (これは、float4 rgba カラー値の「a」コンポーネントです)。その中に6ビットの符号なし整数と2ビットの符号なし整数を格納したいです。これら 2 つの値を 8 ビットに安全に格納するにはどうすればよいですか?
特に 0 と 1 の間で制限された 8 ビット float の形式に関するドキュメントを見つけることができませんでしたdata / 255
。
言語は cg です。
0 から 1 の間でなければならない 8 ビットの float があります (これは、float4 rgba カラー値の「a」コンポーネントです)。その中に6ビットの符号なし整数と2ビットの符号なし整数を格納したいです。これら 2 つの値を 8 ビットに安全に格納するにはどうすればよいですか?
特に 0 と 1 の間で制限された 8 ビット float の形式に関するドキュメントを見つけることができませんでしたdata / 255
。
OpenGL 標準では、8 ビット フレームバッファへの書き込み時に、少なくとも 256 個の異なる値が保持されることが保証されています。Cgも同じことをしていると確信しています。
したがって、次のように 2 つの値を記述できるはずです。
output.a = (4.0 * clamp(val1, 0.0, 63.0)
+ clamp(val2, 0.0, 3.0)) / 255.0;
そして、次のように取得します。
float val1 = floor(input.a * 255.0 / 4.0);
float val2 = fmod(input.a * 255.0, 4.0);
これは、整数のビット演算と同等です。