55 lines
1.6 KiB
HLSL
55 lines
1.6 KiB
HLSL
#ifndef ANIMATION_CLIP_HLSL_
|
|
#define ANIMATION_CLIP_HLSL_
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "TrackSet.hlsl"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct AnimationClip
|
|
{
|
|
uint4 hash;
|
|
TrackSet clipTracks;
|
|
TrackSet additiveReferencePoseTracks;
|
|
uint flags;
|
|
float cycleOffset;
|
|
float length;
|
|
|
|
static const uint size = (4 + 1 + 1 + 1) * 4 + TrackSet::size * 2;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool IsLooped() { return GetFlag(1); }
|
|
bool LoopPoseBlend() { return GetFlag(2); }
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool GetFlag(int index)
|
|
{
|
|
uint v = 1u << index;
|
|
return (flags & v) != 0;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static AnimationClip ReadFromRawBuffer(ByteAddressBuffer b, int byteAddress)
|
|
{
|
|
AnimationClip rv = (AnimationClip)0;
|
|
rv.hash = b.Load4(byteAddress);
|
|
rv.clipTracks = TrackSet::ReadFromRawBuffer(b, byteAddress + 16);
|
|
rv.additiveReferencePoseTracks = TrackSet::ReadFromRawBuffer(b, byteAddress + 16 + TrackSet::size);
|
|
rv.flags = b.Load(byteAddress + 16 + TrackSet::size * 2);
|
|
rv.cycleOffset = asfloat(b.Load(byteAddress + 20 + TrackSet::size * 2));
|
|
rv.length = asfloat(b.Load(byteAddress + 24 + TrackSet::size * 2));
|
|
|
|
CHECK_RAW_BUFFER_OUT_OF_BOUNDS(RUKHANKADEBUGMARKERS_GPUANIMATOR_ANIMATION_CLIP_READ, byteAddress, size, b);
|
|
|
|
return rv;
|
|
}
|
|
};
|
|
|
|
#endif
|
|
|
|
|