25 lines
560 B
HLSL
25 lines
560 B
HLSL
cbuffer ViewportBuffer : register(b0)
|
|
{
|
|
float xmin;
|
|
float xmax;
|
|
float ymin;
|
|
float ymax;
|
|
int max_iter;
|
|
};
|
|
|
|
struct PS_IN { float4 pos : SV_POSITION; };
|
|
|
|
float4 PSMain(PS_IN input) : SV_TARGET
|
|
{
|
|
float2 uv = input.pos.xy * 0.5 + 0.5; // [-1,1] -> [0,1]
|
|
float2 c = float2(xmin,ymin) + uv * float2(xmax-xmin, ymax-ymin);
|
|
float2 z = c;
|
|
int i;
|
|
for(i=0;i<max_iter;i++){
|
|
if(dot(z,z)>4) break;
|
|
z = float2(z.x*z.x - z.y*z.y, 2*z.x*z.y)+c;
|
|
}
|
|
float t = i/(float)max_iter;
|
|
return float4(t,0.5*t,1.0-t,1);
|
|
}
|