Я немного новичок в Directx, но я пытался заставить этот пользовательский пакет битов работать весь день.Я пытаюсь упаковать float4 и другой float в uint.Float4 - это цвет, а float - значение глубины.Я хочу использовать 6 бит каждый для цвета, а остальные 8 бит для глубины.Точность не важна.Я думал, что понял, что я делаю, но при распаковке он просто возвращает все нули.Это вообще возможно?Пиксельный формат: R16G16B16A16_FLOAT.
Вот код
uint PackColorAndDepthToUint(float4 Color, float Depth)
{
uint4 u = (int4) (Color * float4(255, 255, 255, 1.0f));
uint packedOutput = (u.a << 26) | (u.b << 20) | (u.g << 14) | (u.r << 8) | asuint(Depth * 255);
return packedOutput;
}
void UnpackColorAndDepthFromUint(uint packedInput, out float4 Color, out float Depth)
{
uint d = (packedInput & 255);
Depth = ((float) d / 255);
uint r = (((packedInput >> 8)) & 64);
uint g = (((packedInput >> 14)) & 64);
uint b = (((packedInput >> 20)) & 64);
uint a = (((packedInput >> 26)) & 64);
uint4 co = uint4(r, g, b, a);
Color = (((float4) co) / float4(255, 255, 255, 1.0f));
}
, если кто-нибудь может указать мне правильное направление, я был бы признателен за это!