Unity Web Shader IDE
Full source <CORE>/ShaderLibrary/DynamicScalingClamping.hlsl HLSL 56 lines 33 symbols 0 includes Hide source Show source
DynamicScalingClamping.hlsl <CORE>/ShaderLibrary/DynamicScalingClamping.hlsl
Language
HLSL
Lines
56
Symbols
33
Includes
0
Open IDE root

<CORE>/ShaderLibrary/DynamicScalingClamping.hlsl full source

#ifndef UNITY_DYNAMIC_SCALING_CLAMPING_INCLUDED
#define UNITY_DYNAMIC_SCALING_CLAMPING_INCLUDED

// Functions to clamp UVs to use when RTHandle system is used.

float2 ClampUV(float2 UV, float2 texelSize, float numberOfTexels, float2 scale)
{
    float2 maxCoord = scale - numberOfTexels * texelSize;
    return min(UV, maxCoord);
}

float2 ClampUV(float2 UV, float2 texelSize, float numberOfTexels)
{
    return ClampUV(UV, texelSize, numberOfTexels, _RTHandleScale.xy);
}

float2 ClampAndScaleUV(float2 UV, float2 texelSize, float numberOfTexels, float2 scale)
{
    float2 maxCoord = 1.0f - numberOfTexels * texelSize;
    return min(UV, maxCoord) * scale;
}

float2 ClampAndScaleUV(float2 UV, float2 texelSize, float numberOfTexels)
{
    return ClampAndScaleUV(UV, texelSize, numberOfTexels, _RTHandleScale.xy);
}

// This is assuming half a texel offset in the clamp.
float2 ClampUVForBilinear(float2 UV, float2 texelSize)
{
    return ClampUV(UV, texelSize, 0.5f);
}

float2 ClampUVForBilinear(float2 UV)
{
    return ClampUV(UV, _ScreenSize.zw, 0.5f);
}

float2 ClampAndScaleUVForBilinear(float2 UV, float2 texelSize)
{
    return ClampAndScaleUV(UV, texelSize, 0.5f);
}

// This is assuming full screen buffer and half a texel offset for the clamping.
float2 ClampAndScaleUVForBilinear(float2 UV)
{
    return ClampAndScaleUV(UV, _ScreenSize.zw, 0.5f);
}

float2 ClampAndScaleUVForPoint(float2 UV)
{
    return min(UV, 1.0f) * _RTHandleScale.xy;
}

#endif