Files
Project-M/Packages/com.rukhanka.animation/Rukhanka.Runtime/GPUAnimationEngine/Resources/TrackSampler.hlsl
T
2026-05-31 14:27:52 -07:00

63 lines
1.8 KiB
HLSL

#ifndef TRACK_SAMPLER_HLSL_
#define TRACK_SAMPLER_HLSL_
/////////////////////////////////////////////////////////////////////////////////
#define TRACK_SAMPLER_TYPE_DEFAULT 0
#define TRACK_SAMPLER_TYPE_FIRST_FRAME 1
#define TRACK_SAMPLER_TYPE_LAST_FRAME 2
/////////////////////////////////////////////////////////////////////////////////
struct TrackSampler
{
float time;
int samplerType;
float Sample(Track tk, int keyFrameBaseAddress)
{
// With absence of interfaces in DXC and templates (hello HLSL 2021) need to invent such apprach
switch (samplerType)
{
case TRACK_SAMPLER_TYPE_DEFAULT:
return tk.SampleByBinarySearch(time, keyFrameBaseAddress);
break;
case TRACK_SAMPLER_TYPE_FIRST_FRAME:
return tk.GetFirstFrameValue(keyFrameBaseAddress);
break;
case TRACK_SAMPLER_TYPE_LAST_FRAME:
return tk.GetLastFrameValue(keyFrameBaseAddress);
break;
}
return 0;
}
};
//-----------------------------------------------------------------------------------------//
// Helper functions to create typed samplers
//-----------------------------------------------------------------------------------------//
TrackSampler CreateDefaultTrackSampler(float time)
{
TrackSampler rv = {time, TRACK_SAMPLER_TYPE_DEFAULT};
return rv;
}
/////////////////////////////////////////////////////////////////////////////////
TrackSampler CreateFirstFrameTrackSampler()
{
TrackSampler rv = {0, TRACK_SAMPLER_TYPE_FIRST_FRAME};
return rv;
}
/////////////////////////////////////////////////////////////////////////////////
TrackSampler CreateLastFrameTrackSampler()
{
TrackSampler rv = {0, TRACK_SAMPLER_TYPE_LAST_FRAME};
return rv;
}
#endif