Files
2026-07-13 13:13:17 +08:00

46 lines
796 B
HLSL

cbuffer ParamConstants : register(b0)
{
float4 ColorA;
float4 ColorB;
float2 Size;
float UseAspectRatio;
float Scale;
float2 Offset;
}
cbuffer Resolution : register(b1)
{
float TargetWidth;
float TargetHeight;
}
struct vsOutput
{
float4 position : SV_POSITION;
float2 texCoord : TEXCOORD;
};
#define mod(x, y) (x - y * floor(x / y))
float4 psMain(vsOutput psInput) : SV_TARGET
{
float aspectRatio = TargetWidth/TargetHeight;
float2 p = psInput.texCoord;
if(UseAspectRatio > 0.5) {
p -= 0.5;
p.x *= aspectRatio;
}
p /= Size * Scale ;
p += Offset * float2(-1,1);
float2 a = mod(p,1);
float t= (a.x > 0.5 && a.y < 0.5) || (a.x < 0.5 && a.y > 0.5)
? 0 : 1;
return lerp(ColorA, ColorB, t);
}