[orx-compositor] Add .use demo (#127)

This commit is contained in:
Abe Pazos
2020-06-19 19:01:40 +02:00
committed by GitHub
parent 1ca0e2288c
commit 7c324079e2

View File

@@ -0,0 +1,90 @@
import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.color.rgb
import org.openrndr.extensions.SingleScreenshot
import org.openrndr.extra.compositor.*
import org.openrndr.extra.fx.blend.Add
import org.openrndr.extra.fx.blur.ApproximateGaussianBlur
import org.openrndr.extra.fx.color.ColorCorrection
import kotlin.random.Random
/**
* Compositor demo of `use`, which makes it possible to
* use the color buffer of a previous layer.
*
* This program draws a series of concentric rings, most of them gray,
* 10% are pink.
*
* In a second layer we reuse that image with rings, applying an extreme
* color correction to make everything black except the pink rings,
* then apply a strong blur and finally compose it over the original
* image using blend mode Add.
*
* The result is an sharp image of gray rings with glowing pink rings.
*
* Note: see also orx-fx Bloom()
*
*/
// Toggle to see the difference between a simple blur and multilayer bloom
const val effectEnabled = true
fun main() = application {
configure {
width = 900
height = 900
}
program {
// -- this block is for automation purposes only
if (System.getProperty("takeScreenshot") == "true") {
extend(SingleScreenshot()) {
this.outputFile = System.getProperty("screenshotPath")
}
}
val composite = compose {
val circles = layer {
draw {
drawer.stroke = null
val rnd = Random(frameCount / 100 + 1)
for (i in 18 downTo 0) {
drawer.fill = if (rnd.nextDouble() < 0.1)
ColorRGBa.PINK.shade(Random.nextDouble(0.88, 1.0))
else
rgb(rnd.nextInt(6) / 15.0)
drawer.circle(drawer.bounds.center, 50.0 + i * 20)
}
}
// A. To see how the plain blur looks like
if (!effectEnabled) {
post(ApproximateGaussianBlur()) {
sigma = 25.0
window = 25
}
}
}
// B. This is the bloom effect
if (effectEnabled) {
layer {
use(circles) // <-- use the previous layer as starting point
post(ColorCorrection()) {
brightness = -0.3
contrast = 0.8
}
post(ApproximateGaussianBlur()) {
sigma = 25.0
window = 25
}
blend(Add())
}
}
}
extend {
drawer.clear(rgb(0.2))
composite.draw(drawer)
}
}
}