Files
Project-M/Packages/com.rukhanka.animation/Rukhanka.Runtime/Common/Shaders/GPUStructures/SkinMatrix.hlsl
T
2026-05-31 14:27:52 -07:00

60 lines
1.7 KiB
HLSL

#ifndef SKIN_MATRIX_HLSL_
#define SKIN_MATRIX_HLSL_
/////////////////////////////////////////////////////////////////////////////////
struct SkinMatrix
{
static const uint size = 4 * 3 * 4;
/////////////////////////////////////////////////////////////////////////////////
static float3x4 Identity()
{
float3x4 rv = float3x4
(
float3(1, 0, 0),
float3(0, 1, 0),
float3(0, 0, 1),
float3(0, 0, 0)
);
return rv;
}
/////////////////////////////////////////////////////////////////////////////////
static float3x4 ReadFromRawBuffer(ByteAddressBuffer b, int index)
{
uint byteAddress = index * size;
float3x4 rv;
rv._11_21_31_12 = asfloat(b.Load4(byteAddress + 00));
rv._22_32_13_23 = asfloat(b.Load4(byteAddress + 16));
rv._33_14_24_34 = asfloat(b.Load4(byteAddress + 32));
CHECK_RAW_BUFFER_OUT_OF_BOUNDS(RUKHANKADEBUGMARKERS_DEFORMATION_FRAME_SKIN_MATRICES_READ, byteAddress, size, b);
return rv;
}
/////////////////////////////////////////////////////////////////////////////////
static void WriteToRawBuffer(RWByteAddressBuffer b, float3x4 v, int index)
{
uint byteAddress = index * size;
b.Store4(byteAddress + 00, asuint(v._11_21_31_12));
b.Store4(byteAddress + 16, asuint(v._22_32_13_23));
b.Store4(byteAddress + 32, asuint(v._33_14_24_34));
CHECK_RAW_BUFFER_OUT_OF_BOUNDS(RUKHANKADEBUGMARKERS_GPUANIMATOR_COMPUTE_SKIN_MATRICES_OUT_SKIN_MATRICES_WRITE, byteAddress, size, b);
}
};
/////////////////////////////////////////////////////////////////////////////////
#endif