[orx-no-clear] convert to MPP

This commit is contained in:
Edwin Jakobs
2021-07-06 13:24:38 +02:00
parent fa2ae01173
commit 65d0e79ab9
4 changed files with 153 additions and 75 deletions

View File

@@ -1,57 +1,57 @@
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) {
clear(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))
}
}
}
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.detachColorAttachments()
it.destroy()
}
renderTarget = renderTarget(program.width, program.height) {
colorBuffer()
depthBuffer()
}
renderTarget?.let {
drawer.withTarget(it) {
clear(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))
}
}
}
}