[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

@@ -25,6 +25,7 @@ def multiplatformModules = [
"orx-fx", "orx-fx",
"orx-gradient-descent", "orx-gradient-descent",
"orx-image-fit", "orx-image-fit",
"orx-no-clear",
"orx-noise", "orx-noise",
"orx-parameters", "orx-parameters",
"orx-shade-styles", "orx-shade-styles",

View File

@@ -1,19 +0,0 @@
sourceSets {
demo {
java {
srcDirs = ["src/demo/kotlin"]
compileClasspath += main.getCompileClasspath()
runtimeClasspath += main.getRuntimeClasspath()
}
}
}
dependencies {
//implementation project(":orx-?")
demoImplementation("org.openrndr:openrndr-application:$openrndrVersion")
demoImplementation("org.openrndr:openrndr-extensions:$openrndrVersion")
demoRuntimeOnly("org.openrndr:openrndr-gl3:$openrndrVersion")
demoRuntimeOnly("org.openrndr:openrndr-gl3-natives-$openrndrOS:$openrndrVersion")
demoImplementation(sourceSets.getByName("main").output)
}

View File

@@ -0,0 +1,96 @@
plugins {
kotlin("multiplatform")
kotlin("plugin.serialization")
}
val kotlinxSerializationVersion: String by rootProject.extra
val kotestVersion: String by rootProject.extra
val junitJupiterVersion: String by rootProject.extra
val jvmTarget: String by rootProject.extra
val kotlinApiVersion: String by rootProject.extra
val openrndrVersion: String by rootProject.extra
val openrndrOS: String by rootProject.extra
val kluentVersion: String by rootProject.extra
val spekVersion: String by rootProject.extra
kotlin {
jvm {
compilations {
val demo by creating {
defaultSourceSet {
kotlin.srcDir("src/demo")
dependencies {
implementation(project(":orx-camera"))
implementation("org.openrndr:openrndr-application:$openrndrVersion")
implementation("org.openrndr:openrndr-extensions:$openrndrVersion")
runtimeOnly("org.openrndr:openrndr-gl3:$openrndrVersion")
runtimeOnly("org.openrndr:openrndr-gl3-natives-$openrndrOS:$openrndrVersion")
implementation(compilations["main"]!!.output.allOutputs)
}
}
}
}
compilations.all {
kotlinOptions.jvmTarget = jvmTarget
kotlinOptions.apiVersion = kotlinApiVersion
}
testRuns["test"].executionTask.configure {
useJUnitPlatform()
}
}
js(IR) {
browser()
nodejs()
}
sourceSets {
@Suppress("UNUSED_VARIABLE")
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$kotlinxSerializationVersion")
implementation("org.openrndr:openrndr-application:$openrndrVersion")
implementation("org.openrndr:openrndr-math:$openrndrVersion")
implementation("org.openrndr:openrndr-shape:$openrndrVersion")
implementation("org.openrndr:openrndr-draw:$openrndrVersion")
}
}
@Suppress("UNUSED_VARIABLE")
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxSerializationVersion")
implementation("io.kotest:kotest-assertions-core:$kotestVersion")
}
}
@Suppress("UNUSED_VARIABLE")
val jvmMain by getting
@Suppress("UNUSED_VARIABLE")
val jvmTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
implementation(kotlin("test-junit5"))
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxSerializationVersion")
runtimeOnly("org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion")
runtimeOnly("org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion")
implementation("org.spekframework.spek2:spek-dsl-jvm:$spekVersion")
implementation("org.amshove.kluent:kluent:$kluentVersion")
}
}
@Suppress("UNUSED_VARIABLE")
val jsMain by getting
@Suppress("UNUSED_VARIABLE")
val jsTest by getting {
dependencies {
implementation(kotlin("test-js"))
}
}
}
}

View File

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