Emmanuel BENOîT
68d01ca42e
Shaders are no longer found under /shaders in the project; they can be anywhere. In addition, paths for both (program) instructions in the script and include directives in shader source code are relative to the file which contains them.
125 lines
3 KiB
Text
125 lines
3 KiB
Text
################################################################################
|
|
# Depth of Field
|
|
|
|
(fn dof-init ()
|
|
# Sampler used for the inputs
|
|
(sampler smp-dof
|
|
(mipmaps no)
|
|
(wrapping clamp-edge)
|
|
(sampling linear)
|
|
(lod 0 0)
|
|
)
|
|
|
|
(if $use-compute (
|
|
# Textures for both passes
|
|
(texture tx-dof-pass1 rgba-f16 $vp-width $vp-height)
|
|
(texture tx-dof-pass2 rgba-f16 $vp-width $vp-height)
|
|
|
|
# Programs
|
|
(program prg-dof-pass1 "dof-pass1.c.glsl")
|
|
(program prg-dof-pass2 "dof-pass2.c.glsl")
|
|
|
|
# Pipelines
|
|
(pipeline pl-dof-pass1 prg-dof-pass1)
|
|
(pipeline pl-dof-pass2 prg-dof-pass2)
|
|
)(
|
|
# Texture & RT for pass 1
|
|
(texture tx-dof-pass1 rgb-f16 $vp-width $vp-height)
|
|
(framebuffer rt-dof-pass1 tx-dof-pass1)
|
|
|
|
# Texture & RT for pass 2
|
|
(texture tx-dof-pass2 rgb-f16 $vp-width $vp-height)
|
|
(framebuffer rt-dof-pass2 tx-dof-pass2)
|
|
# TODO MAYBE ? (alias tx-dof-output tx-dof-pass2)
|
|
|
|
# Programs
|
|
(program prg-dof-pass1 "dof-pass1.f.glsl")
|
|
(program prg-dof-pass2 "dof-pass2.f.glsl")
|
|
|
|
# Pipelines
|
|
(pipeline pl-dof-pass1 prg-fullscreen prg-dof-pass1)
|
|
(pipeline pl-dof-pass2 prg-fullscreen prg-dof-pass2)
|
|
))
|
|
|
|
# Output debugging
|
|
(odbg tx-dof-pass1 hdr "DoF - First pass")
|
|
(odbg tx-dof-pass2 hdr "DoF - Output")
|
|
|
|
# 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
|
|
(section "Post-processing"
|
|
(section "Depth of Field"
|
|
(float "Sharp distance" dof-sharp-distance
|
|
(min 0) (max 50000) (step .1))
|
|
(float "Sharp range" dof-sharp-range
|
|
(min 0) (max 50000) (step .1))
|
|
(float "Falloff" dof-falloff
|
|
(min 0) (max 50000) (step .1))
|
|
(float "Maximum blur" dof-max-blur
|
|
(min 1) (max 64) (slider))
|
|
(int "Samples" dof-samples
|
|
(min 1) (max 64) (slider))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(fn dof-set-uniforms (prog)
|
|
(uniforms prog 2
|
|
(get-input dof-sharp-distance)
|
|
(get-input dof-sharp-range)
|
|
(get-input dof-falloff)
|
|
(get-input dof-max-blur)
|
|
)
|
|
(uniforms prog 3 (get-input dof-samples))
|
|
(uniforms prog 4 $vp-width $vp-height $time)
|
|
)
|
|
|
|
(fn dof-render (in-image in-depth)
|
|
(profiling "Depth of Field"
|
|
(uniforms-i prg-dof-pass1 0 0)
|
|
(uniforms-i prg-dof-pass2 0 0)
|
|
|
|
(if (not $use-compute) (
|
|
(use-texture 1 in-depth smp-dof)
|
|
(uniforms-i prg-dof-pass1 1 1)
|
|
(uniforms-i prg-dof-pass2 1 1)
|
|
))
|
|
|
|
# First pass
|
|
(call dof-set-uniforms prg-dof-pass1)
|
|
(use-texture 0 in-image smp-dof)
|
|
(use-pipeline pl-dof-pass1)
|
|
(if $use-compute (
|
|
(image 0 tx-dof-pass1 0)
|
|
(compute $vp-width $vp-height 1)
|
|
)(
|
|
(use-framebuffer rt-dof-pass1)
|
|
(viewport 0 0 $vp-width $vp-height)
|
|
(fullscreen)
|
|
))
|
|
|
|
# Second pass
|
|
(call dof-set-uniforms prg-dof-pass2)
|
|
(use-texture 0 tx-dof-pass1 smp-dof)
|
|
(use-pipeline pl-dof-pass2)
|
|
(if $use-compute (
|
|
(image 0 tx-dof-pass2 0)
|
|
(compute $vp-width $vp-height 1)
|
|
)(
|
|
(use-framebuffer rt-dof-pass2)
|
|
(viewport 0 0 $vp-width $vp-height)
|
|
(fullscreen)
|
|
))
|
|
)
|
|
)
|
|
|
|
|
|
# vim: syntax=demo-srd
|