[orx-compositor] Clean up API, clear mask layer
This commit is contained in:
@@ -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,10 +211,8 @@ 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()
|
||||||
|
|||||||
@@ -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() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user