36 lines
1.0 KiB
HLSL
36 lines
1.0 KiB
HLSL
#ifndef SKINNED_MESH_BONE_HLSL_
|
|
#define SKINNED_MESH_BONE_HLSL_
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct SkinnedMeshBone
|
|
{
|
|
int boneRemapIndex;
|
|
float4x4 bindPose;
|
|
|
|
static const uint size = (1 + 12) * 4;
|
|
|
|
static SkinnedMeshBone ReadFromRawBuffer(ByteAddressBuffer b, int index)
|
|
{
|
|
int byteAddress = index * size;
|
|
|
|
SkinnedMeshBone rv = (SkinnedMeshBone)0;
|
|
rv.boneRemapIndex = b.Load(byteAddress);
|
|
rv.bindPose._11_21_31 = asfloat(b.Load3(byteAddress + 4 + 00));
|
|
rv.bindPose._12_22_32 = asfloat(b.Load3(byteAddress + 4 + 12));
|
|
rv.bindPose._13_23_33 = asfloat(b.Load3(byteAddress + 4 + 24));
|
|
rv.bindPose._14_24_34 = asfloat(b.Load3(byteAddress + 4 + 36));
|
|
rv.bindPose._41_42_43_44 = float4(0, 0, 0, 1);
|
|
|
|
CHECK_RAW_BUFFER_OUT_OF_BOUNDS(RUKHANKADEBUGMARKERS_GPUANIMATOR_SKINNED_MESH_BONE_READ, byteAddress, size, b);
|
|
|
|
return rv;
|
|
}
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif
|
|
|
|
|