short: shaders program mini-shadertoy
	../mini-shadertoy/target/release/mini-shadertoy program.toml -o /tmp/imgs -e png,exr -p
	uv run avg-timings.py all /tmp/imgs/timings.toml
	uv run count-loc.py

images: shaders program mini-shadertoy
	rm -rf ../images/compare
	../mini-shadertoy/target/release/mini-shadertoy program.toml -o ../images/compare -e npy,png,exr --complex

perf: shaders program mini-shadertoy
	../mini-shadertoy/target/release/mini-shadertoy

compare:
	rm -rf ../images/compare/diff
	uv run compare-images.py

loc:
	uv run count-loc.py

program:
	uv run generate-params.py > program.toml

	# make the standalone archive
	rm ../mini-shadertoy/standalone.zip
	zip ../mini-shadertoy/standalone.zip program.toml compiled/*.spv

new:
	# only run what's needed, speeds up dev work a bit
	glslang -S frag "shaders/nn.glsl" -V -DRENDER -o "compiled/nn.spv"
	glslang -S frag "shaders/flat.glsl" -V -DRENDER -o "compiled/flat.spv"
	../mini-shadertoy/target/release/mini-shadertoy new.toml -o /tmp/new-imgs -p

tables: mini-shadertoy
	# clear tables
	rm -rf ../images/tables
	mkdir ../images/tables
	# only run what's needed
	glslang -S frag "shaders/pt-tables.glsl" -V -o "compiled/pt-tables.spv"
	# output to exr, we want full accuracy
	../mini-shadertoy/target/release/mini-shadertoy pt-tables.toml -o ../images/tables --complex -e npy,png
	
sphere: mini-shadertoy
	# only render a single sphere
	glslang -S frag "shaders/sphere.glsl" -V -o "compiled/sphere.spv"
	../mini-shadertoy/target/release/mini-shadertoy sphere.toml -o /tmp/imgs

shaders: compiled
	# empty
	glslang -S frag "shaders/empty.glsl" -V -o "compiled/empty.spv"
	# raymarched
	glslang -S frag "shaders/raymarched.glsl" -V -o "compiled/raymarched.spv"
	# path tracer
	glslang -S frag "shaders/path-tracer.glsl" -V -o "compiled/path-tracer.spv"
	# neural network shader
	glslang -S frag "shaders/nn.glsl" -V -DRENDER  -o "compiled/nn.spv"
	glslang -S frag "shaders/nn.glsl" -V -DTRANSMITTANCE -o "compiled/transmittance-nn.spv"
	# "flat" shader
	glslang -S frag "shaders/flat.glsl" -V -DRENDER  -o "compiled/flat.spv"
	glslang -S frag "shaders/flat.glsl" -V -DTRANSMITTANCE -o "compiled/transmittance-flat.spv"
	# transmittance
	glslang -S frag "shaders/transmittance.glsl" -V -o "compiled/transmittance-naive.spv"
	# schuler
	glslang -S frag "shaders/schuler.glsl" -V -o "compiled/schuler.spv"
	# preetham
	glslang -S frag "shaders/preetham.glsl" -V -o "compiled/preetham.spv"
	# naive
	glslang -S frag "shaders/naive.glsl" -V -o "compiled/naive.spv"
	# skyatmo
	glslang -S frag "shaders/skyatmo.glsl" -V -DTRANSMITTANCE  -o "compiled/skyatmo-transmittance.spv"
	glslang -S frag "shaders/skyatmo.glsl" -V -DSINGLE_SCATTER -o "compiled/skyatmo-single-scatter.spv"
	glslang -S frag "shaders/skyatmo.glsl" -V -DMULTI_SCATTER  -o "compiled/skyatmo-multi-scatter.spv"
	glslang -S frag "shaders/skyatmo.glsl" -V -DRENDER         -o "compiled/skyatmo-main.spv"
	# bruneton
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DTRANSMITTANCE       -o "compiled/bruneton-transmittance.spv"
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DDIRECT_IRRADIANCE   -o "compiled/bruneton-direct-irradiance.spv"
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DSINGLE_SCATTER_RAY  -o "compiled/bruneton-single-scatter-ray.spv"
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DSINGLE_SCATTER_MIE  -o "compiled/bruneton-single-scatter-mie.spv"
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DSCATTER             -o "compiled/bruneton-scatter.spv"
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DSCATTER_DENSITY     -o "compiled/bruneton-scatter-density.spv"
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DINDIRECT_IRRADIANCE -o "compiled/bruneton-indirect-irradiance.spv"
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DMULTIPLE_SCATTERING -o "compiled/bruneton-multiple-scattering.spv"	
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DSCATTER_STEP        -o "compiled/bruneton-scatter-step.spv"
	glslang -S frag "bruneton/main.glsl" -Ibruneton -V -DRENDER              -o "compiled/bruneton-main.spv"

mini-shadertoy:
	cd ../mini-shadertoy; make

compiled: clean
	mkdir compiled

clean:
	rm -rf compiled

.PHONY: clean mini-shadertoy shaders all
