Files
Fishing2/Packages/com.waveharmonic.crest/Runtime/Shaders/Utility/Clear.compute
2026-01-31 00:32:49 +08:00

70 lines
1.4 KiB
Plaintext

// Crest Water System
// Copyright © 2024 Wave Harmonic. All rights reserved.
// Clear specific components using a mask.
#pragma exclude_renderers glcore gles3
#pragma kernel CrestClearTarget
#pragma kernel CrestClearTargetBoundaryX d_BoundaryX
#pragma kernel CrestClearTargetBoundaryY d_BoundaryY
#pragma multi_compile_local d_Float1 d_Float2 d_Float3 d_Float4
#if d_Float1
#define m_Type float
#elif d_Float2
#define m_Type float2
#elif d_Float3
#define m_Type float3
#elif d_Float4
#define m_Type float4
#endif
#include "HLSLSupport.cginc"
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Utility/Macros.hlsl"
RWTexture2DArray<m_Type> _Crest_Target;
CBUFFER_START(CrestPerMaterial)
m_Type _Crest_ClearMask;
m_Type _Crest_ClearColor;
uint _Crest_Resolution;
uint _Crest_TargetSlice;
CBUFFER_END
#if d_BoundaryX
#define d_Axis y
#else
#define d_Axis x
#endif
m_UtilityNameSpace
void ClearTarget(uint3 id)
{
_Crest_Target[id] *= 1.0 - _Crest_ClearMask;
_Crest_Target[id] += _Crest_ClearColor;
}
void ClearTargetBoundary(uint3 id)
{
id.z = _Crest_TargetSlice;
_Crest_Target[id] = _Crest_ClearColor;
// Opposite row/column.
id.d_Axis = _Crest_Resolution - 1;
_Crest_Target[id] = _Crest_ClearColor;
}
m_UtilityNameSpaceEnd
m_UtilityKernelDefault(ClearTarget)
[numthreads(8, 1, 1)]
m_UtilityKernelVariant(ClearTargetBoundary, X)
[numthreads(1, 8, 1)]
m_UtilityKernelVariant(ClearTargetBoundary, Y)