70 lines
1.4 KiB
Plaintext
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)
|