57 lines
1.8 KiB
Kotlin
57 lines
1.8 KiB
Kotlin
package org.openrndr.extra.noclear
|
|
|
|
import org.openrndr.Extension
|
|
import org.openrndr.Program
|
|
import org.openrndr.color.ColorRGBa
|
|
import org.openrndr.draw.Drawer
|
|
import org.openrndr.draw.RenderTarget
|
|
import org.openrndr.draw.isolated
|
|
import org.openrndr.draw.renderTarget
|
|
import org.openrndr.math.Matrix44
|
|
|
|
class NoClear : Extension {
|
|
override var enabled: Boolean = true
|
|
private var renderTarget: RenderTarget? = null
|
|
|
|
/**
|
|
* code-block to draw an optional custom backdrop
|
|
*/
|
|
var backdrop: (() -> Unit)? = null
|
|
|
|
override fun beforeDraw(drawer: Drawer, program: Program) {
|
|
if (program.width > 0 && program.height > 0) { // only if the window is not minimised
|
|
if (renderTarget == null || renderTarget?.width != program.width || renderTarget?.height != program.height) {
|
|
renderTarget?.let {
|
|
it.colorBuffer(0).destroy()
|
|
it.detachColorBuffers()
|
|
it.destroy()
|
|
}
|
|
renderTarget = renderTarget(program.width, program.height) {
|
|
colorBuffer()
|
|
depthBuffer()
|
|
}
|
|
|
|
renderTarget?.let {
|
|
drawer.withTarget(it) {
|
|
background(program.backgroundColor ?: ColorRGBa.TRANSPARENT)
|
|
backdrop?.invoke() // draw custom backdrop
|
|
}
|
|
}
|
|
}
|
|
}
|
|
renderTarget?.bind()
|
|
}
|
|
|
|
override fun afterDraw(drawer: Drawer, program: Program) {
|
|
renderTarget?.unbind()
|
|
|
|
renderTarget?.let {
|
|
drawer.isolated {
|
|
drawer.ortho()
|
|
drawer.view = Matrix44.IDENTITY
|
|
drawer.model = Matrix44.IDENTITY
|
|
drawer.image(it.colorBuffer(0))
|
|
}
|
|
}
|
|
}
|
|
} |