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

104 lines
2.3 KiB
HLSL

//RWTexture2D<float4> outputTexture : register(u0);
Texture2D<float4> inputTexture : register(t0);
sampler texSampler : register(s0);
cbuffer ParamConstants : register(b0)
{
float4 Fill;
float4 Background;
float2 Size;
float2 Offset;
float2 OffsetCopies;
float Rotate;
float LineWidth;
float Fade;
float Copies;
}
// cbuffer TimeConstants : register(b1)
// {
// float globalTime;
// float time;
// float runTime;
// float beatTime;
// }
cbuffer Resolution : register(b1)
{
float TargetWidth;
float TargetHeight;
}
struct vsOutput
{
float4 position : SV_POSITION;
float2 texCoord : TEXCOORD;
};
static float PI2 = 2*3.141578;
#define mod(x,y) (x-y*floor(x/y))
float4 psMain(vsOutput psInput) : SV_TARGET
{
float2 uv = psInput.texCoord;
//float xxx = Copies/10;
//return float4(smoothstep(xxx, xxx, uv.x ),0,0,1 );
float4 orgColor = inputTexture.SampleLevel(texSampler, uv, 0.0);
float aspectRation = TargetWidth/TargetHeight;
float2 p = uv;
p-= 0.5;
// Rotate
float imageRotationRad = (-Rotate - 90) / 180 *3.141578;
float aspectRatio = TargetWidth/TargetHeight;
float sina = sin(-imageRotationRad - 3.141578/2);
float cosa = cos(-imageRotationRad - 3.141578/2);
p.x *=aspectRation;
p = float2(
cosa * p.x - sina * p.y,
cosa * p.y + sina * p.x
);
p.x /=aspectRation;
//return float4(p,0,1);
float cc=0;
int copiesCount = clamp((int)Copies+0.5, 1, 20);
float2 pp = p;
float feather = LineWidth* Fade/2;
for(int i=0; i < copiesCount; i++) {
pp.y = p.y+ sin(
pp.x / Size.x * PI2/2
+ Offset.x/2 * PI2
+ OffsetCopies.x * PI2 * i
) * Size.y/2 + Offset.y + OffsetCopies.y *i;
float c = abs(pp.y);
c = smoothstep(LineWidth/2 + feather, LineWidth/2 - feather, c);
c = smoothstep(0,1,c);
cc = max(cc, c);
}
//return float4(cc,cc,cc,1);
float4 col= lerp(Background, Fill, cc);
//return col;
//float4 orgColor = inputTexture.Sample(texSampler, psInput.texCoord);
float a = clamp(orgColor.a + col.a - orgColor.a*col.a, 0,1);
float3 rgb = (1.0 - col.a)*orgColor.rgb + col.a*col.rgb;
return float4(rgb,a);
}