You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
1.9 KiB
Plaintext

4 years ago

#include "Include/PlatformDefines.compute"
#pragma kernel CSInstancedTransformOffsetKernel
#pragma kernel CSRemoveInsideBounds
#pragma kernel CSRemoveInsideBox
#pragma kernel CSRemoveInsideSphere
#pragma kernel CSRemoveInsideCapsule
#pragma kernel CSInstancedMatrixOffsetKernel
RWStructuredBuffer<float4x4> gpuiInstanceData;
uniform uint bufferSize;
uniform float3 positionOffset;
uniform float4x4 matrixOffset;
#include "Include/DataModel.compute"
#include "Include/Collider.compute"
[numthreads(GPUI_THREADS, 1, 1)]
void CSInstancedTransformOffsetKernel(uint3 id : SV_DispatchThreadID)
{
if (id.x >= bufferSize)
return;
gpuiInstanceData[id.x]._14_24_34 += positionOffset;
}
[numthreads(GPUI_THREADS, 1, 1)]
void CSRemoveInsideBounds(uint3 id : SV_DispatchThreadID)
{
if (id.x >= bufferSize)
return;
if (IsInsideBounds(gpuiInstanceData[id.x]._14_24_34))
gpuiInstanceData[id.x] = zeroMatrix;
}
[numthreads(GPUI_THREADS, 1, 1)]
void CSRemoveInsideBox(uint3 id : SV_DispatchThreadID)
{
if (id.x >= bufferSize)
return;
if (IsInsideBox(gpuiInstanceData[id.x]._14_24_34))
gpuiInstanceData[id.x] = zeroMatrix;
}
[numthreads(GPUI_THREADS, 1, 1)]
void CSRemoveInsideSphere(uint3 id : SV_DispatchThreadID)
{
if (id.x >= bufferSize)
return;
if (IsInsideSphere(gpuiInstanceData[id.x]._14_24_34))
gpuiInstanceData[id.x] = zeroMatrix;
}
[numthreads(GPUI_THREADS, 1, 1)]
void CSRemoveInsideCapsule(uint3 id : SV_DispatchThreadID)
{
if (id.x >= bufferSize)
return;
if (IsInsideCapsule(gpuiInstanceData[id.x]._14_24_34))
gpuiInstanceData[id.x] = zeroMatrix;
}
[numthreads(GPUI_THREADS, 1, 1)]
void CSInstancedMatrixOffsetKernel(uint3 id : SV_DispatchThreadID)
{
if (id.x >= bufferSize)
return;
gpuiInstanceData[id.x] = mul(matrixOffset, gpuiInstanceData[id.x]);
}