diff --git a/demo.srd b/demo.srd new file mode 100644 index 0000000..81e75f5 --- /dev/null +++ b/demo.srd @@ -0,0 +1,111 @@ +(fn init () + # Compute viewport size + (if (gt width height) + ( + (set vp-height height) + (set vp-width (mul height (div 16 9))) + (set vp-x (div (sub width vp-width) 2)) + (set vp-y 0) + )( + (set vp-width width) + (set vp-height (div width (div 16 9))) + (set vp-y (div (sub height vp-height) 2)) + (set vp-x 0) + ) + ) + + (program prg-fullscreen "fullscreen.v.glsl") + (call dof-init) +) + +(fn frame () + (profiling "Frame render" + { FIXME: other stages } + (call dof-main { FIXME: args here }) + ) +) + +################################################################################ +# Depth of Field + +(fn dof-init () + # Sampler used for the inputs + (sampler dof-sampler + (sampling clamp-edge) + (mipmaps no) + (sampling linear) + (lod 0 0) + ) + + # Texture & RT for pass 1 + (texture tx-dof-pass1 rgb-f16 vp-width vp-height) + (framebuffer rt-dof-pass1 (colors tx-dof-pass1)) + + # Texture & RT for pass 2 + (texture tx-dof-pass2 rgb-f16 vp-width vp-height) + (framebuffer rt-dof-pass2 (colors tx-dof-pass2)) + (alias tx-dof-output tx-dof-pass2) + + # Output debugging + (odbg tx-dof-pass1 hdr "DoF - First pass") + (odbg tx-dof-pass2 hdr "DoF - Output") + + # Programs + (program prg-dof-pass1 "dof-pass1.f.glsl") + (program prg-dof-pass2 "dof-pass2.f.glsl") + (set-uniforms-integer prg-dof-pass1 0 1) + (set-uniforms-integer prg-dof-pass1 1 1) + (set-uniforms-integer prg-dof-pass2 0 1) + (set-uniforms-integer prg-dof-pass2 1 1) + + # Pipelines + (pipeline pl-dof-pass1 prg-fullscreen prg-dof-pass1) + (pipeline pl-dof-pass2 prg-fullscreen prg-dof-pass2) + + # Inputs + (input dof-sharp-distance 0) + (input dof-sharp-range 50) + (input dof-falloff 50) + (input dof-max-blur 16) + (input dof-samples 16) + + # Input overrides + (ui-overrides "Post-processing" "Depth of Field" + (float dof-sharp-distance (min 0) (max 1000) (step .1)) + (float dof-sharp-range (min 0) (max 500) (step .1)) + (float dof-falloff (min 0) (max 500) (step .1)) + (float dof-max-blur (min 1) (max 64) (step .1)) + (int dof-samples (min 1) (max 64) (step .1)) + ) +) + +(fn dof-set-uniforms (prog) + (set-uniforms prog 2 ( + (get-input dof-sharp-distance) + (get-input dof-sharp-range) + (get-input dof-falloff) + (get-input dof-max-blur) + )) + (set-uniforms prog 3 ((get-input dof-samples)) + (set-uniforms prog 4 (vp-width vp-height time)) +) + +(fn dof-main (in-image in-depth) + (profiling "Depth of Field" + (use-texture 1 in-depth dof-sampler) + + # First pass + (call dof-set-uniforms prg-dof-pass1) + (use-texture 0 in-image dof-sampler) + (use-pipeline pl-dof-pass1) + (use-framebuffer rt-dof-pass1) + (fullscreen) + + # Second pass + (call dof-set-uniforms prg-dof-pass2) + (use-texture 0 tx-dof-pass1 dof-sampler) + (use-pipeline pl-dof-pass2) + (use-framebuffer rt-dof-pass2) + (fullscreen) + ) +)