(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) ) )