我有一个float4进入计算着色器,其中3个浮点数实际上是浮点数,但第四个是2个uint一起移位,我如何通过保留位序列而不是数值来将浮点数转换为uint?
在c ++方面我通过创建一个uint指针解决它,用所需的数字填充它并将指针作为浮点指针传递。然而在hlsl中与c / c ++类似,没有指针,所以我卡在这里:|
答案 0 :(得分:6)
在HLSL中,您应该能够执行以下操作(假设您所使用的值在f4.w中)
uint ui = asuint( f4.w );
uint ui1 = ui & 0xffff;
uint ui2 = ui >> 16;
基本上看起来asuint intrinsic是你的朋友:)
答案 1 :(得分:3)
你可以使用联盟。
float f; // you float value is here
union X
{
float f;
short int a[2];
} x;
x.f = f;
int i1 = x.a[0]; // these are your ints
int i2 = x.a[1];