Skip to content

Commit 5c4dba4

Browse files
authored
Tests: add more .expected files for aggro inlining + fix tests (#276)
1 parent 0512166 commit 5c4dba4

File tree

8 files changed

+847
-8
lines changed

8 files changed

+847
-8
lines changed

tests/commands.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,7 @@
8383
--no-renaming --format indented -o tests/real/controllable-machinery.frag.expected tests/real/controllable-machinery.frag
8484
--no-renaming --format indented -o tests/real/endeavour.frag.expected tests/real/endeavour.frag
8585
--no-renaming --format indented -o tests/real/audio-flight-v2.frag.expected tests/real/audio-flight-v2.frag
86+
87+
--no-renaming --aggressive-inlining --format indented -o tests/real/buoy.frag.expected tests/real/buoy.frag
88+
--no-renaming --aggressive-inlining --format indented -o tests/real/orchard.frag.expected tests/real/orchard.frag
89+
--no-renaming --aggressive-inlining --format indented -o tests/real/robin.frag.expected tests/real/robin.frag

tests/real/buoy.frag.expected

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
#define GAMMA (2.2)
2+
3+
vec3 localRay;
4+
void CamPolar(out vec3 pos,out vec3 ray,vec3 origin,vec2 rotation,float distance,float zoom,vec2 fragCoord)
5+
{
6+
vec2 c=vec2(cos(rotation.x),cos(rotation.y));
7+
vec4 s;
8+
s.xy=vec2(sin(rotation.x),sin(rotation.y));
9+
s.zw=-s.xy;
10+
ray.xy=fragCoord.xy-iResolution.xy*.5;
11+
ray.z=iResolution.y*zoom;
12+
ray=normalize(ray);
13+
localRay=ray;
14+
ray.yz=ray.yz*c.xx+ray.zy*s.zx;
15+
ray.xz=ray.xz*c.yy+ray.zx*s.yw;
16+
pos=origin-distance*vec3(c.x*s.y,s.z,c.x*c.y);
17+
}
18+
vec2 Noise(vec3 x)
19+
{
20+
vec3 p=floor(x),f=fract(x);
21+
f=f*f*(3.-2.*f);
22+
vec4 rg=textureLod(iChannel0,(p.xy+vec2(37,17)*p.z+f.xy+.5)/256.,0.);
23+
return mix(rg.yw,rg.xz,f.z);
24+
}
25+
vec2 NoisePrecise(vec3 x)
26+
{
27+
vec3 p=floor(x),f=fract(x);
28+
f=f*f*(3.-2.*f);
29+
vec2 uv=p.xy+vec2(37,17)*p.z;
30+
vec4 rg=mix(mix(textureLod(iChannel0,(uv+.5)/256.,0.),textureLod(iChannel0,(uv+vec2(1,0)+.5)/256.,0.),f.x),mix(textureLod(iChannel0,(uv+vec2(0,1)+.5)/256.,0.),textureLod(iChannel0,(uv+1.5)/256.,0.),f.x),f.y);
31+
return mix(rg.yw,rg.xz,f.z);
32+
}
33+
vec4 Noise(vec2 x)
34+
{
35+
vec2 f=fract(x.xy);
36+
f=f*f*(3.-2.*f);
37+
vec2 uv=floor(x.xy).xy+f.xy;
38+
return textureLod(iChannel0,(uv+.5)/256.,0.);
39+
}
40+
vec4 Noise(ivec2 x)
41+
{
42+
return textureLod(iChannel0,(vec2(x)+.5)/256.,0.);
43+
}
44+
vec2 Noise(ivec3 x)
45+
{
46+
return textureLod(iChannel0,(vec2(x)+vec2(37,17)*float(x.z)+.5)/256.,0.).xz;
47+
}
48+
float Waves(vec3 pos)
49+
{
50+
pos*=.2*vec3(1);
51+
float f=0.;
52+
pos+=iTime*vec3(0,.1,.1);
53+
for(int i=0;i<5;i++)
54+
pos=(pos.yzx+pos.zyx*vec3(1,-1,1))/sqrt(2.),f=f*2.+abs(Noise(pos).x-.5)*2.,pos*=2.;
55+
f/=exp2(float(5));
56+
return.5-f;
57+
}
58+
float WavesDetail(vec3 pos)
59+
{
60+
pos*=.2*vec3(1);
61+
float f=0.;
62+
pos+=iTime*vec3(0,.1,.1);
63+
for(int i=0;i<8;i++)
64+
pos=(pos.yzx+pos.zyx*vec3(1,-1,1))/sqrt(2.),f=f*2.+abs(NoisePrecise(pos).x-.5)*2.,pos*=2.;
65+
f/=exp2(float(8));
66+
return.5-f;
67+
}
68+
float WavesSmooth(vec3 pos)
69+
{
70+
pos*=.2*vec3(1);
71+
float f=0.;
72+
pos+=iTime*vec3(0,.1,.1);
73+
for(int i=0;i<2;i++)
74+
pos=(pos.yzx+pos.zyx*vec3(1,-1,1))/sqrt(2.),f=f*2.+sqrt(pow(NoisePrecise(pos).x-.5,2.)+.01)*2.,pos*=2.;
75+
f/=exp2(float(2));
76+
return.5-f;
77+
}
78+
float WaveCrests(vec3 ipos,vec2 fragCoord)
79+
{
80+
vec3 pos=ipos;
81+
pos*=.2*vec3(1);
82+
float f=0.;
83+
pos+=iTime*vec3(0,.1,.1);
84+
vec3 pos2=pos;
85+
for(int i=0;i<6;i++)
86+
pos=(pos.yzx+pos.zyx*vec3(1,-1,1))/sqrt(2.),f=f*1.5+abs(Noise(pos).x-.5)*2.,pos*=2.;
87+
pos=pos2*exp2(float(6));
88+
pos.y=-.05*iTime;
89+
for(int i=6;i<16;i++)
90+
pos=(pos.yzx+pos.zyx*vec3(1,-1,1))/sqrt(2.),f=f*1.5+pow(abs(Noise(pos).x-.5)*2.,1.),pos*=2.;
91+
f/=1500.;
92+
f-=Noise(ivec2(fragCoord.xy)).x*.01;
93+
return pow(smoothstep(.4,-.1,f),6.);
94+
}
95+
vec3 Sky(vec3 ray)
96+
{
97+
return vec3(.4,.45,.5);
98+
}
99+
vec3 boatRight,boatUp,boatForward,boatPosition;
100+
void ComputeBoatTransform()
101+
{
102+
vec3 samples[5];
103+
samples[0]=vec3(0);
104+
samples[1]=vec3(0,0,.5);
105+
samples[2]=vec3(0,0,-.5);
106+
samples[3]=vec3(.5,0,0);
107+
samples[4]=vec3(-.5,0,0);
108+
samples[0].y=WavesSmooth(samples[0]);
109+
samples[1].y=WavesSmooth(samples[1]);
110+
samples[2].y=WavesSmooth(samples[2]);
111+
samples[3].y=WavesSmooth(samples[3]);
112+
samples[4].y=WavesSmooth(samples[4]);
113+
boatPosition=(samples[0]+samples[1]+samples[2]+samples[3]+samples[4])/5.;
114+
boatRight=samples[3]-samples[4];
115+
boatForward=samples[1]-samples[2];
116+
boatUp=normalize(cross(boatForward,boatRight));
117+
boatRight=normalize(cross(boatUp,boatForward));
118+
boatForward=normalize(boatForward);
119+
boatPosition+=0.*boatUp;
120+
}
121+
vec3 WorldToBoat(vec3 dir)
122+
{
123+
return vec3(dot(dir,boatRight),dot(dir,boatUp),dot(dir,boatForward));
124+
}
125+
float TraceBoat(vec3 pos,vec3 ray)
126+
{
127+
vec3 c=boatPosition;
128+
c-=pos;
129+
float t=dot(c,ray),p=length(c-t*ray);
130+
return p>1.?
131+
0.:
132+
t-sqrt(1.-p*p);
133+
}
134+
vec3 ShadeBoat(vec3 pos,vec3 ray)
135+
{
136+
pos-=boatPosition;
137+
vec3 norm=normalize(pos);
138+
pos=WorldToBoat(pos);
139+
vec3 lightDir=normalize(vec3(-2,3,1));
140+
float aa=4./iResolution.x;
141+
vec3 albedo=vec3(1,.01,0);
142+
albedo=mix(vec3(.04),albedo,smoothstep(.25-aa,.25,abs(pos.y)));
143+
albedo=mix(mix(vec3(1),vec3(.04),smoothstep(-aa*4.,aa*4.,cos(atan(pos.x,pos.z)*6.))),albedo,smoothstep(.2-aa*1.5,.2,abs(pos.y)));
144+
albedo=mix(vec3(.04),albedo,smoothstep(.05-aa,.05,abs(abs(pos.y)-.6)));
145+
albedo=mix(vec3(1,.8,.08),albedo,smoothstep(.05-aa,.05,abs(abs(pos.y)-.65)));
146+
vec3 col=albedo*(smoothstep(-.1,1.,dot(norm,lightDir))*vec3(1,.9,.8)+vec3(.06,.1,.1)),specular=pow(max(0.,dot(norm,normalize(lightDir-ray))),1e2)*1e2/32.*vec3(1),rr=reflect(ray,norm);
147+
specular+=mix(vec3(0,.04,.04),Sky(rr),smoothstep(-.1,.1,rr.y));
148+
float fresnel=pow(1.-abs(dot(norm,ray)),5.);
149+
fresnel=mix(.001,1.,fresnel);
150+
col=mix(col,specular,fresnel);
151+
return col;
152+
}
153+
float OceanDistanceField(vec3 pos)
154+
{
155+
return pos.y-Waves(pos);
156+
}
157+
float OceanDistanceFieldDetail(vec3 pos)
158+
{
159+
return pos.y-WavesDetail(pos);
160+
}
161+
vec3 OceanNormal(vec3 pos)
162+
{
163+
vec3 norm;
164+
vec2 d=vec2(.01*length(pos),0);
165+
norm.x=OceanDistanceFieldDetail(pos+d.xyy)-OceanDistanceFieldDetail(pos-d.xyy);
166+
norm.y=OceanDistanceFieldDetail(pos+d.yxy)-OceanDistanceFieldDetail(pos-d.yxy);
167+
norm.z=OceanDistanceFieldDetail(pos+d.yyx)-OceanDistanceFieldDetail(pos-d.yyx);
168+
return normalize(norm);
169+
}
170+
float TraceOcean(vec3 pos,vec3 ray)
171+
{
172+
float h=1.,t=0.;
173+
for(int i=0;i<100;i++)
174+
{
175+
if(h<.01||t>1e2)
176+
break;
177+
h=OceanDistanceField(pos+t*ray);
178+
t+=h;
179+
}
180+
return h>.1?
181+
0.:
182+
t;
183+
}
184+
vec3 ShadeOcean(vec3 pos,vec3 ray,vec2 fragCoord)
185+
{
186+
vec3 norm=OceanNormal(pos);
187+
float ndotr=dot(ray,norm);
188+
vec3 reflectedRay=ray-2.*norm*ndotr,refractedRay=ray+(-cos(1.33*acos(-ndotr))-ndotr)*norm;
189+
refractedRay=normalize(refractedRay);
190+
vec3 reflection=Sky(reflectedRay);
191+
float t=TraceBoat(pos-0.*reflectedRay,reflectedRay);
192+
if(t>0.)
193+
reflection=ShadeBoat(pos+t*reflectedRay,reflectedRay);
194+
t=TraceBoat(pos-0.*refractedRay,refractedRay);
195+
vec3 col=vec3(0,.04,.04);
196+
if(t>0.)
197+
col=mix(col,ShadeBoat(pos+t*refractedRay,refractedRay),exp(-t));
198+
col=mix(col,reflection,pow(1.-abs(ndotr),5.));
199+
col=mix(col,vec3(1),WaveCrests(pos,fragCoord));
200+
return col;
201+
}
202+
void mainImage(out vec4 fragColor,vec2 fragCoord)
203+
{
204+
ComputeBoatTransform();
205+
vec2 camRot=vec2(.5)+vec2(-.35,4.5)*(iMouse.yx/iResolution.yx);
206+
vec3 pos,ray;
207+
CamPolar(pos,ray,vec3(0),camRot,3.,1.,fragCoord);
208+
float to=TraceOcean(pos,ray),tb=TraceBoat(pos,ray);
209+
vec3 result;
210+
result=to>0.&&(to<tb||tb==0.)?
211+
ShadeOcean(pos+ray*to,ray,fragCoord):
212+
tb>0.?
213+
ShadeBoat(pos+ray*tb,ray):
214+
Sky(ray);
215+
result*=1.1*smoothstep(.35,1.,localRay.z);
216+
fragColor=vec4(pow(result,vec3(1./GAMMA)),1);
217+
}

0 commit comments

Comments
 (0)