[orx-compositor] Clean up API, clear mask layer

This commit is contained in:
Edwin Jakobs
2023-01-18 23:52:27 +01:00
parent b4e2f6a212
commit d1ab80097a
2 changed files with 12 additions and 24 deletions

View File

@@ -8,8 +8,6 @@ import org.openrndr.extra.fx.blend.SourceIn
import org.openrndr.extra.fx.blend.SourceOut import org.openrndr.extra.fx.blend.SourceOut
import org.openrndr.extra.parameters.BooleanParameter import org.openrndr.extra.parameters.BooleanParameter
import org.openrndr.extra.parameters.Description import org.openrndr.extra.parameters.Description
import org.openrndr.math.Matrix44
fun RenderTarget.deepDestroy() { fun RenderTarget.deepDestroy() {
val cbcopy = colorAttachments.map { it } val cbcopy = colorAttachments.map { it }
@@ -34,16 +32,17 @@ enum class LayerType {
ASIDE ASIDE
} }
private val sourceOut = persistent { SourceOut() }
private val sourceIn = persistent { SourceIn() }
/** /**
* A single layer representation * A single layer representation
*/ */
@Description("Layer") @Description("Layer")
open class Layer internal constructor( open class Layer internal constructor(
val type: LayerType, val type: LayerType,
val bufferMultisample: BufferMultisample = BufferMultisample.Disabled private val bufferMultisample: BufferMultisample = BufferMultisample.Disabled
) { ) {
var sourceOut = SourceOut()
var sourceIn = SourceIn()
var maskLayer: Layer? = null var maskLayer: Layer? = null
var drawFunc: () -> Unit = {} var drawFunc: () -> Unit = {}
val children: MutableList<Layer> = mutableListOf() val children: MutableList<Layer> = mutableListOf()
@@ -61,9 +60,9 @@ open class Layer internal constructor(
var clearColor: ColorRGBa? = ColorRGBa.TRANSPARENT var clearColor: ColorRGBa? = ColorRGBa.TRANSPARENT
private var layerTarget: RenderTarget? = null private var layerTarget: RenderTarget? = null
val result: ColorBuffer? val result: ColorBuffer
get() { get() {
return layerTarget?.colorBuffer(0) return layerTarget?.colorBuffer(0) ?: error("layer result not ready")
} }
/** /**
@@ -90,6 +89,7 @@ open class Layer internal constructor(
drawer.isolatedWithTarget(maskRt) { drawer.isolatedWithTarget(maskRt) {
drawer.fill = ColorRGBa.WHITE drawer.fill = ColorRGBa.WHITE
drawer.stroke = ColorRGBa.WHITE drawer.stroke = ColorRGBa.WHITE
drawer.clear(ColorRGBa.TRANSPARENT)
it.drawFunc() it.drawFunc()
} }
} }
@@ -118,7 +118,7 @@ open class Layer internal constructor(
for ((i, filter) in filters.withIndex()) { for ((i, filter) in filters.withIndex()) {
filter.first.apply(filter.third) filter.first.apply(filter.third)
val sources = val sources =
arrayOf(localSource) + filter.second.map { it.result ?: error("no result for layer $it") } arrayOf(localSource) + filter.second.map { it.result }
.toTypedArray() .toTypedArray()
filter.first.apply(sources, arrayOf(targets[i % targets.size])) filter.first.apply(sources, arrayOf(targets[i % targets.size]))
localSource = targets[i % targets.size] localSource = targets[i % targets.size]
@@ -134,7 +134,7 @@ open class Layer internal constructor(
if (type == LayerType.ASIDE) { if (type == LayerType.ASIDE) {
if (postFilters.isNotEmpty()) { if (postFilters.isNotEmpty()) {
require(layerPost != result) require(layerPost != result)
layerPost.copyTo(result ?: error("no result")) layerPost.copyTo(result)
} }
} else if (type == LayerType.LAYER) { } else if (type == LayerType.LAYER) {
val localBlendFilter = blendFilter val localBlendFilter = blendFilter
@@ -211,9 +211,7 @@ open class Layer internal constructor(
fun Drawer.image(layer: Layer) { fun Drawer.image(layer: Layer) {
val cb = layer.result val cb = layer.result
if (cb != null) { image(cb)
image(cb)
}
} }
} }
@@ -249,8 +247,7 @@ fun <T : Filter1to1> Layer.apply(drawer: Drawer,
val layer = Layer(LayerType.ASIDE) val layer = Layer(LayerType.ASIDE)
layer.colorType = colorType layer.colorType = colorType
layer.draw { layer.draw {
drawer.image(source.result!!) drawer.image(source.result)
//source.result!!.copyTo(result!!)
} }
layer.post(filter, function) layer.post(filter, function)
children.add(layer) children.add(layer)
@@ -264,8 +261,7 @@ fun <T : Filter2to1> Layer.apply(drawer: Drawer,
val layer = Layer(LayerType.ASIDE) val layer = Layer(LayerType.ASIDE)
layer.colorType = colorType layer.colorType = colorType
layer.draw { layer.draw {
//source0.result!!.copyTo(result!!) drawer.image(source0.result)
drawer.image(source0.result!!)
} }
layer.post(filter, source1, function) layer.post(filter, source1, function)
children.add(layer) children.add(layer)
@@ -273,7 +269,6 @@ fun <T : Filter2to1> Layer.apply(drawer: Drawer,
} }
/** /**
* set the draw contents of the layer * set the draw contents of the layer
*/ */
@@ -347,7 +342,6 @@ class ColorBufferCache(val width: Int, val height: Int) {
it.value.forEach { cb -> cb.destroy() } it.value.forEach { cb -> cb.destroy() }
} }
} }
} }
class Composite : Layer(LayerType.LAYER) { class Composite : Layer(LayerType.LAYER) {
@@ -373,9 +367,6 @@ fun compose(function: Layer.() -> Unit): Composite {
return root return root
} }
class Compositor : Extension { class Compositor : Extension {
override var enabled: Boolean = true override var enabled: Boolean = true
var composite = Composite() var composite = Composite()

View File

@@ -2,7 +2,6 @@ import org.openrndr.application
import org.openrndr.color.ColorRGBa import org.openrndr.color.ColorRGBa
import org.openrndr.draw.ColorType import org.openrndr.draw.ColorType
import org.openrndr.extra.compositor.* import org.openrndr.extra.compositor.*
import org.openrndr.extra.fx.blur.DirectionalBlur
import org.openrndr.extra.fx.blur.HashBlurDynamic import org.openrndr.extra.fx.blur.HashBlurDynamic
import org.openrndr.extra.fx.patterns.Checkers import org.openrndr.extra.fx.patterns.Checkers
import kotlin.math.cos import kotlin.math.cos
@@ -32,6 +31,4 @@ fun main() {
} }
} }
} }
} }