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

60 lines
1.7 KiB
HLSL

#ifndef TRACK_SET_HLSL_
#define TRACK_SET_HLSL_
/////////////////////////////////////////////////////////////////////////////////
#include "PerfectHashTable.hlsl"
/////////////////////////////////////////////////////////////////////////////////
struct TrackSet
{
int keyFramesOffset;
int tracksOffset;
int trackGroupsOffset;
int trackGroupPHTOffset;
uint trackGroupPHTSeed;
uint trackGroupPHTSizeMask;
static const uint size = 6 * 4;
/////////////////////////////////////////////////////////////////////////////////
void OffsetByAddress(int baseAddress)
{
keyFramesOffset += baseAddress;
tracksOffset += baseAddress;
trackGroupsOffset += baseAddress;
trackGroupPHTOffset += baseAddress;
}
/////////////////////////////////////////////////////////////////////////////////
static TrackSet ReadFromRawBuffer(ByteAddressBuffer b, int byteAddress)
{
TrackSet rv = (TrackSet)0;
rv.keyFramesOffset = b.Load(byteAddress);
rv.tracksOffset = b.Load(byteAddress + 4);
rv.trackGroupsOffset = b.Load(byteAddress + 8);
rv.trackGroupPHTOffset = b.Load(byteAddress + 12);
rv.trackGroupPHTSeed = b.Load(byteAddress + 16);
rv.trackGroupPHTSizeMask = b.Load(byteAddress + 20);
CHECK_RAW_BUFFER_OUT_OF_BOUNDS(RUKHANKADEBUGMARKERS_GPUANIMATOR_TRACK_SET_READ, byteAddress, size, b);
return rv;
}
/////////////////////////////////////////////////////////////////////////////////
int GetTrackGroupIndex(uint boneHash)
{
int rv = QueryPerfectHashTable(boneHash, trackGroupPHTSeed, trackGroupPHTOffset, trackGroupPHTSizeMask);
return rv;
}
};
#endif