[orx-view-box] Add shouldDraw function
This commit is contained in:
@@ -13,8 +13,14 @@ class ViewBox(
|
|||||||
override val program: Program, var clientArea: Rectangle,
|
override val program: Program, var clientArea: Rectangle,
|
||||||
translateMouse: Boolean = true,
|
translateMouse: Boolean = true,
|
||||||
translateKeyboard: Boolean = true,
|
translateKeyboard: Boolean = true,
|
||||||
|
val contentScale: Double? = null,
|
||||||
|
val multisample: BufferMultisample? = null
|
||||||
|
|
||||||
) : Program by program {
|
) : Program by program {
|
||||||
|
var viewBoxReconfigured: Boolean = false
|
||||||
|
private set
|
||||||
|
|
||||||
|
var shouldDraw: () -> Boolean = { true }
|
||||||
|
|
||||||
override var width: Int
|
override var width: Int
|
||||||
get() {
|
get() {
|
||||||
@@ -52,10 +58,10 @@ class ViewBox(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override val keyboard: KeyEvents = if (translateKeyboard) object : KeyEvents {
|
override val keyboard: KeyEvents = if (translateKeyboard) object : KeyEvents {
|
||||||
override val character: Event<CharacterEvent> = Event<CharacterEvent>()
|
override val character: Event<CharacterEvent> = Event()
|
||||||
override val keyDown: Event<KeyEvent> = Event<KeyEvent>()
|
override val keyDown: Event<KeyEvent> = Event()
|
||||||
override val keyRepeat: Event<KeyEvent> = Event<KeyEvent>()
|
override val keyRepeat: Event<KeyEvent> = Event()
|
||||||
override val keyUp: Event<KeyEvent> = Event<KeyEvent>()
|
override val keyUp: Event<KeyEvent> = Event()
|
||||||
} else {
|
} else {
|
||||||
program.keyboard
|
program.keyboard
|
||||||
}
|
}
|
||||||
@@ -178,7 +184,6 @@ class ViewBox(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun draw() {
|
override fun draw() {
|
||||||
|
|
||||||
val widthCeil = ceil(clientArea.width).toInt()
|
val widthCeil = ceil(clientArea.width).toInt()
|
||||||
val heightCeil = ceil(clientArea.height).toInt()
|
val heightCeil = ceil(clientArea.height).toInt()
|
||||||
|
|
||||||
@@ -195,34 +200,48 @@ class ViewBox(
|
|||||||
resolved?.destroy()
|
resolved?.destroy()
|
||||||
resolved = null
|
resolved = null
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (renderTarget == null) {
|
if (renderTarget == null) {
|
||||||
|
viewBoxReconfigured = true
|
||||||
val art = RenderTarget.active
|
val art = RenderTarget.active
|
||||||
renderTarget = renderTarget(widthCeil, heightCeil, art.contentScale, art.multisample) {
|
renderTarget =
|
||||||
colorBuffer()
|
renderTarget(widthCeil, heightCeil, contentScale ?: art.contentScale, multisample ?: art.multisample) {
|
||||||
depthBuffer()
|
colorBuffer()
|
||||||
}
|
depthBuffer()
|
||||||
if (art.multisample != BufferMultisample.Disabled) {
|
}
|
||||||
resolved = colorBuffer(widthCeil, heightCeil, art.contentScale, multisample = art.multisample)
|
if ((multisample ?: art.multisample) != BufferMultisample.Disabled) {
|
||||||
|
resolved = colorBuffer(
|
||||||
|
widthCeil,
|
||||||
|
heightCeil,
|
||||||
|
contentScale ?: art.contentScale
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
program.drawer.isolatedWithTarget(renderTarget!!) {
|
if (viewBoxReconfigured || shouldDraw()) {
|
||||||
drawer.clear(ColorRGBa.BLACK)
|
program.drawer.isolatedWithTarget(renderTarget!!) {
|
||||||
drawer.defaults()
|
drawer.clear(ColorRGBa.BLACK)
|
||||||
drawer.ortho(renderTarget!!)
|
drawer.defaults()
|
||||||
for (extension in extensions) {
|
drawer.ortho(renderTarget!!)
|
||||||
extension.beforeDraw(program.drawer, this@ViewBox)
|
for (extension in extensions) {
|
||||||
|
extension.beforeDraw(program.drawer, this@ViewBox)
|
||||||
|
}
|
||||||
|
for (extension in extensions.reversed()) {
|
||||||
|
extension.afterDraw(program.drawer, this@ViewBox)
|
||||||
|
}
|
||||||
|
program.drawer.defaults()
|
||||||
|
|
||||||
|
viewBoxReconfigured = false
|
||||||
}
|
}
|
||||||
for (extension in extensions.reversed()) {
|
|
||||||
extension.afterDraw(program.drawer, this@ViewBox)
|
|
||||||
}
|
|
||||||
program.drawer.defaults()
|
|
||||||
}
|
}
|
||||||
program.drawer.isolated {
|
program.drawer.isolated {
|
||||||
program.drawer.image(renderTarget!!.colorBuffer(0), clientArea.corner)
|
if (resolved == null) {
|
||||||
|
program.drawer.image(renderTarget!!.colorBuffer(0), clientArea.corner)
|
||||||
|
} else {
|
||||||
|
renderTarget!!.colorBuffer(0).copyTo(resolved!!)
|
||||||
|
program.drawer.image(resolved!!, clientArea.corner)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -239,9 +258,11 @@ fun Program.viewBox(
|
|||||||
area: Rectangle,
|
area: Rectangle,
|
||||||
translateMouse: Boolean = true,
|
translateMouse: Boolean = true,
|
||||||
translateKeyboard: Boolean = true,
|
translateKeyboard: Boolean = true,
|
||||||
|
contentScale: Double? = null,
|
||||||
|
multisample: BufferMultisample? = null,
|
||||||
f: ViewBox.() -> Unit = {}
|
f: ViewBox.() -> Unit = {}
|
||||||
): ViewBox {
|
): ViewBox {
|
||||||
val viewBox = ViewBox(this, area, translateMouse, translateKeyboard)
|
val viewBox = ViewBox(this, area, translateMouse, translateKeyboard, contentScale, multisample)
|
||||||
viewBox.f()
|
viewBox.f()
|
||||||
return viewBox
|
return viewBox
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
import org.openrndr.application
|
import org.openrndr.application
|
||||||
|
import org.openrndr.draw.BufferMultisample
|
||||||
import org.openrndr.draw.DrawPrimitive
|
import org.openrndr.draw.DrawPrimitive
|
||||||
import org.openrndr.extensions.Screenshots
|
import org.openrndr.extensions.Screenshots
|
||||||
import org.openrndr.extra.camera.Camera2D
|
import org.openrndr.extra.camera.Camera2D
|
||||||
@@ -19,7 +20,9 @@ fun main() {
|
|||||||
program {
|
program {
|
||||||
val vbx = viewBox(Rectangle(0.0, 0.0, 200.0, 800.0)) {
|
val vbx = viewBox(Rectangle(0.0, 0.0, 200.0, 800.0)) {
|
||||||
extend(Screenshots())
|
extend(Screenshots())
|
||||||
extend(Camera2D())
|
extend(Camera2D()).also {
|
||||||
|
shouldDraw = { it.hasChanged }
|
||||||
|
}
|
||||||
extend {
|
extend {
|
||||||
drawer.rectangle(20.0, 20.0, 100.0, 100.0)
|
drawer.rectangle(20.0, 20.0, 100.0, 100.0)
|
||||||
}
|
}
|
||||||
@@ -41,8 +44,12 @@ fun main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val vbx3d = viewBox(Rectangle(400.0, 0.0, 400.0, 800.0)) {
|
val vbx3d = viewBox(Rectangle(400.0, 0.0, 400.0, 800.0), multisample = BufferMultisample.SampleCount(8)) {
|
||||||
extend(Orbital())
|
extend(Orbital()).also {
|
||||||
|
this.shouldDraw = {
|
||||||
|
it.hasChanged
|
||||||
|
}
|
||||||
|
}
|
||||||
val cube = boxMesh()
|
val cube = boxMesh()
|
||||||
extend {
|
extend {
|
||||||
drawer.vertexBuffer(cube, DrawPrimitive.TRIANGLES)
|
drawer.vertexBuffer(cube, DrawPrimitive.TRIANGLES)
|
||||||
|
|||||||
Reference in New Issue
Block a user