From fa2ae01173394cdb71044d7f54d5beacaf60f124 Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Tue, 6 Jul 2021 10:17:45 +0200 Subject: [PATCH] [orx-shapes] convert to MPP --- build.gradle | 1 + orx-fx/src/shaders/glsl/grain/film-grain.frag | 18 +++- .../commonMain/kotlin/ShaderPreprocessor.kt | 2 +- .../src/jsMain/kotlin/ShaderPhraseBook.kt | 2 +- .../src/jvmMain/kotlin/ShaderPhraseBook.kt | 2 +- orx-shapes/build.gradle | 19 ---- orx-shapes/build.gradle.kts | 98 +++++++++++++++++++ .../kotlin/BezierPatch.kt | 0 .../kotlin/RectangleGrid.kt | 0 .../kotlin/RegularPolygon.kt | 36 +++---- .../kotlin/RegularStar.kt | 7 +- .../kotlin/RoundedRectangle.kt | 0 .../kotlin/drawers/BezierPatchDrawer.kt | 1 + .../kotlin/operators/BulgeContours.kt | 0 .../kotlin/operators/ChamferCorners.kt | 0 .../kotlin/phrases/BezierPhraseBook.kt | 0 .../{test => jvmTest}/kotlin/Assertions.kt | 0 .../kotlin/TestChamferCorners.kt | 0 .../kotlin/TestRegularPolygon.kt | 0 .../kotlin/TestRegularStar.kt | 0 .../kotlin/TestRoundedRectangle.kt | 0 21 files changed, 143 insertions(+), 43 deletions(-) delete mode 100644 orx-shapes/build.gradle create mode 100644 orx-shapes/build.gradle.kts rename orx-shapes/src/{main => commonMain}/kotlin/BezierPatch.kt (100%) rename orx-shapes/src/{main => commonMain}/kotlin/RectangleGrid.kt (100%) rename orx-shapes/src/{main => commonMain}/kotlin/RegularPolygon.kt (87%) rename orx-shapes/src/{main => commonMain}/kotlin/RegularStar.kt (95%) rename orx-shapes/src/{main => commonMain}/kotlin/RoundedRectangle.kt (100%) rename orx-shapes/src/{main => commonMain}/kotlin/drawers/BezierPatchDrawer.kt (99%) rename orx-shapes/src/{main => commonMain}/kotlin/operators/BulgeContours.kt (100%) rename orx-shapes/src/{main => commonMain}/kotlin/operators/ChamferCorners.kt (100%) rename orx-shapes/src/{main => commonMain}/kotlin/phrases/BezierPhraseBook.kt (100%) rename orx-shapes/src/{test => jvmTest}/kotlin/Assertions.kt (100%) rename orx-shapes/src/{test => jvmTest}/kotlin/TestChamferCorners.kt (100%) rename orx-shapes/src/{test => jvmTest}/kotlin/TestRegularPolygon.kt (100%) rename orx-shapes/src/{test => jvmTest}/kotlin/TestRegularStar.kt (100%) rename orx-shapes/src/{test => jvmTest}/kotlin/TestRoundedRectangle.kt (100%) diff --git a/build.gradle b/build.gradle index 81285323..aed2508d 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,7 @@ def multiplatformModules = [ "orx-parameters", "orx-shade-styles", "orx-shader-phrases", + "orx-shapes", "orx-quadtree", ] diff --git a/orx-fx/src/shaders/glsl/grain/film-grain.frag b/orx-fx/src/shaders/glsl/grain/film-grain.frag index 74e819b6..f2318c9d 100644 --- a/orx-fx/src/shaders/glsl/grain/film-grain.frag +++ b/orx-fx/src/shaders/glsl/grain/film-grain.frag @@ -3,7 +3,12 @@ // Ad[a|o]pted from shader by "noby" https://www.shadertoy.com/view/3sGSWV uniform sampler2D tex0; + +#ifdef OR_IN_OUT in vec2 v_texCoord0; +#else +varying vec2 v_texCoord0; +#endif uniform bool useColor;// false uniform float time; @@ -15,8 +20,9 @@ uniform float grainPitch;// = 1.0; uniform float colorLevel;// = 1.0; +#ifndef OR_GL_FRAGCOLOR out vec4 o_output; - +#endif // From Dave Hoskins: https://www.shadertoy.com/view/4djSRW. float hash(vec3 p3){ @@ -59,7 +65,12 @@ void main() { // Alternatively use iTime here instead and change the grain_rate // parameter to correspond to frames-per-second. float t = time; + #ifndef OR_GL_TEXTURE2D vec4 colorAlpha = texture(tex0, uv); + #else + vec4 colorAlpha = texture2D(tex0, uv); + #endif + vec3 color = colorAlpha.rgb; vec3 grain = vec3(0); @@ -86,6 +97,11 @@ void main() { // After this you would normally perform tone mapping, // apply the grain before that. + #ifndef OR_GL_FRACOLOR o_output.rgb = color; o_output.a = 1.0; + #else + gl_FragColor.rgb = color; + gl_FragColor.a = 1.0; + #endif } \ No newline at end of file diff --git a/orx-shader-phrases/src/commonMain/kotlin/ShaderPreprocessor.kt b/orx-shader-phrases/src/commonMain/kotlin/ShaderPreprocessor.kt index 97df8539..91544469 100644 --- a/orx-shader-phrases/src/commonMain/kotlin/ShaderPreprocessor.kt +++ b/orx-shader-phrases/src/commonMain/kotlin/ShaderPreprocessor.kt @@ -32,7 +32,7 @@ class ShaderPhrase(val phrase: String) { * A book of shader phrases. */ expect open class ShaderPhraseBook(bookId: String) { - //private var registered = false + val bookId: String /** * Registers all known shader phrases */ diff --git a/orx-shader-phrases/src/jsMain/kotlin/ShaderPhraseBook.kt b/orx-shader-phrases/src/jsMain/kotlin/ShaderPhraseBook.kt index 7c0afcef..0ba8315a 100644 --- a/orx-shader-phrases/src/jsMain/kotlin/ShaderPhraseBook.kt +++ b/orx-shader-phrases/src/jsMain/kotlin/ShaderPhraseBook.kt @@ -3,7 +3,7 @@ package org.openrndr.extra.shaderphrases /** * A book of shader phrases. */ -actual open class ShaderPhraseBook actual constructor(val bookId: String) { +actual open class ShaderPhraseBook actual constructor(actual val bookId: String) { private var registered = false /** * Registers all known shader phrases diff --git a/orx-shader-phrases/src/jvmMain/kotlin/ShaderPhraseBook.kt b/orx-shader-phrases/src/jvmMain/kotlin/ShaderPhraseBook.kt index 88b87ebe..0513856c 100644 --- a/orx-shader-phrases/src/jvmMain/kotlin/ShaderPhraseBook.kt +++ b/orx-shader-phrases/src/jvmMain/kotlin/ShaderPhraseBook.kt @@ -6,7 +6,7 @@ import kotlin.reflect.full.declaredMemberProperties /** * A book of shader phrases. */ -actual open class ShaderPhraseBook actual constructor(val bookId: String) { +actual open class ShaderPhraseBook actual constructor(actual val bookId: String) { private var registered = false /** * Registers all known shader phrases diff --git a/orx-shapes/build.gradle b/orx-shapes/build.gradle deleted file mode 100644 index c82346a8..00000000 --- a/orx-shapes/build.gradle +++ /dev/null @@ -1,19 +0,0 @@ -sourceSets { - demo { - java { - srcDirs = ["src/demo/kotlin"] - compileClasspath += main.getCompileClasspath() - runtimeClasspath += main.getRuntimeClasspath() - } - } -} - -dependencies { - implementation(project(":orx-color")) - implementation(project(":orx-shader-phrases")) - 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) -} \ No newline at end of file diff --git a/orx-shapes/build.gradle.kts b/orx-shapes/build.gradle.kts new file mode 100644 index 00000000..7d8c51b3 --- /dev/null +++ b/orx-shapes/build.gradle.kts @@ -0,0 +1,98 @@ +import Orx_embed_shaders_gradle.EmbedShadersTask + +plugins { + kotlin("multiplatform") + kotlin("plugin.serialization") + id("orx.embed-shaders") +} + +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 kotlinVersion: String by rootProject.extra +val kotlinLoggingVersion: String by rootProject.extra +val kluentVersion: String by rootProject.extra +val openrndrVersion: String by rootProject.extra +val openrndrOS: 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(project(":orx-color")) + 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(project(":orx-parameters")) + implementation(project(":orx-shader-phrases")) + implementation(project(":orx-color")) + implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$kotlinxSerializationVersion") + implementation("org.openrndr:openrndr-application:$openrndrVersion") + implementation("org.openrndr:openrndr-draw:$openrndrVersion") + implementation("org.openrndr:openrndr-filter:$openrndrVersion") + implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") + implementation("io.github.microutils:kotlin-logging:$kotlinLoggingVersion") + } + } + @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 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 jsTest by getting { + dependencies { + implementation(kotlin("test-js")) + } + } + } +} \ No newline at end of file diff --git a/orx-shapes/src/main/kotlin/BezierPatch.kt b/orx-shapes/src/commonMain/kotlin/BezierPatch.kt similarity index 100% rename from orx-shapes/src/main/kotlin/BezierPatch.kt rename to orx-shapes/src/commonMain/kotlin/BezierPatch.kt diff --git a/orx-shapes/src/main/kotlin/RectangleGrid.kt b/orx-shapes/src/commonMain/kotlin/RectangleGrid.kt similarity index 100% rename from orx-shapes/src/main/kotlin/RectangleGrid.kt rename to orx-shapes/src/commonMain/kotlin/RectangleGrid.kt diff --git a/orx-shapes/src/main/kotlin/RegularPolygon.kt b/orx-shapes/src/commonMain/kotlin/RegularPolygon.kt similarity index 87% rename from orx-shapes/src/main/kotlin/RegularPolygon.kt rename to orx-shapes/src/commonMain/kotlin/RegularPolygon.kt index 02132b6a..335adf2a 100644 --- a/orx-shapes/src/main/kotlin/RegularPolygon.kt +++ b/orx-shapes/src/commonMain/kotlin/RegularPolygon.kt @@ -1,17 +1,19 @@ package org.openrndr.extra.shapes import org.openrndr.math.Vector2 +import org.openrndr.math.asRadians import org.openrndr.shape.ShapeContour import org.openrndr.shape.contour +import kotlin.math.PI import kotlin.math.cos import kotlin.math.sin fun regularPolygon(sides: Int, center: Vector2 = Vector2.ZERO, radius: Double = 100.0, phase: Double = 0.0): ShapeContour { val c = contour { - val phi = Math.toRadians(phase) + val phi = phase.asRadians for (i in 0 until sides) { - val x = center.x + radius * cos(i.toDouble() / sides * Math.PI * 2 + phi) - val y = center.y + radius * sin(i.toDouble() / sides * Math.PI * 2 + phi) + val x = center.x + radius * cos(i.toDouble() / sides * PI * 2 + phi) + val y = center.y + radius * sin(i.toDouble() / sides * PI * 2 + phi) moveOrLineTo(x, y) } @@ -22,16 +24,16 @@ fun regularPolygon(sides: Int, center: Vector2 = Vector2.ZERO, radius: Double = fun regularPolygonRounded(sides: Int, roundFactor: Double = 0.5, center: Vector2 = Vector2.ZERO, radius: Double = 100.0, phase: Double = 0.0): ShapeContour { val c = contour { - val phi = Math.toRadians(phase) + val phi = phase.asRadians for (i in 0 until sides) { - val x0 = center.x + radius * cos(i.toDouble() / sides * Math.PI * 2 + phi) - val y0 = center.y + radius * sin(i.toDouble() / sides * Math.PI * 2 + phi) + val x0 = center.x + radius * cos(i.toDouble() / sides * PI * 2 + phi) + val y0 = center.y + radius * sin(i.toDouble() / sides * PI * 2 + phi) - val x1 = center.x + radius * cos((i + 1.0) / sides * Math.PI * 2 + phi) - val y1 = center.y + radius * sin((i + 1.0) / sides * Math.PI * 2 + phi) + val x1 = center.x + radius * cos((i + 1.0) / sides * PI * 2 + phi) + val y1 = center.y + radius * sin((i + 1.0) / sides * PI * 2 + phi) - val x2 = center.x + radius * cos((i + 2.0) / sides * Math.PI * 2 + phi) - val y2 = center.y + radius * sin((i + 2.0) / sides * Math.PI * 2 + phi) + val x2 = center.x + radius * cos((i + 2.0) / sides * PI * 2 + phi) + val y2 = center.y + radius * sin((i + 2.0) / sides * PI * 2 + phi) val f = roundFactor / 2.0 @@ -60,16 +62,16 @@ fun regularPolygonRounded(sides: Int, roundFactor: Double = 0.5, center: Vector2 fun regularPolygonBeveled(sides: Int, bevelFactor: Double = 0.5, center: Vector2 = Vector2.ZERO, radius: Double = 100.0, phase: Double = 0.0): ShapeContour { val c = contour { - val phi = Math.toRadians(phase) + val phi = phase.asRadians for (i in 0 until sides) { - val x0 = center.x + radius * cos(i.toDouble() / sides * Math.PI * 2 + phi) - val y0 = center.y + radius * sin(i.toDouble() / sides * Math.PI * 2 + phi) + val x0 = center.x + radius * cos(i.toDouble() / sides * PI * 2 + phi) + val y0 = center.y + radius * sin(i.toDouble() / sides * PI * 2 + phi) - val x1 = center.x + radius * cos((i + 1.0) / sides * Math.PI * 2 + phi) - val y1 = center.y + radius * sin((i + 1.0) / sides * Math.PI * 2 + phi) + val x1 = center.x + radius * cos((i + 1.0) / sides * PI * 2 + phi) + val y1 = center.y + radius * sin((i + 1.0) / sides * PI * 2 + phi) - val x2 = center.x + radius * cos((i + 2.0) / sides * Math.PI * 2 + phi) - val y2 = center.y + radius * sin((i + 2.0) / sides * Math.PI * 2 + phi) + val x2 = center.x + radius * cos((i + 2.0) / sides * PI * 2 + phi) + val y2 = center.y + radius * sin((i + 2.0) / sides * PI * 2 + phi) val f = bevelFactor / 2.0 diff --git a/orx-shapes/src/main/kotlin/RegularStar.kt b/orx-shapes/src/commonMain/kotlin/RegularStar.kt similarity index 95% rename from orx-shapes/src/main/kotlin/RegularStar.kt rename to orx-shapes/src/commonMain/kotlin/RegularStar.kt index 1992c49c..a085cf2f 100644 --- a/orx-shapes/src/main/kotlin/RegularStar.kt +++ b/orx-shapes/src/commonMain/kotlin/RegularStar.kt @@ -1,6 +1,7 @@ package org.openrndr.extra.shapes import org.openrndr.math.Vector2 +import org.openrndr.math.asRadians import org.openrndr.shape.ShapeContour import org.openrndr.shape.contour import kotlin.math.PI @@ -9,7 +10,7 @@ import kotlin.math.sin fun regularStar(points: Int, innerRadius: Double, outerRadius: Double, center: Vector2 = Vector2.ZERO, phase: Double = 0.0): ShapeContour { return contour { - val theta = Math.toRadians(phase) + val theta = phase.asRadians val phi = PI * 2.0 / (points * 2) for (i in 0 until points * 2 step 2) { val outerPoint = Vector2(cos(i * phi + theta), sin(i * phi + theta)) * outerRadius + center @@ -26,7 +27,7 @@ fun regularStarRounded(points: Int, innerRadius: Double, outerRadius: Double, center: Vector2 = Vector2.ZERO, phase: Double = 0.0): ShapeContour { return contour { - val theta = Math.toRadians(phase) + val theta = phase.asRadians val phi = PI * 2.0 / (points * 2) for (i in 0 until points * 2 step 2) { val outerPoint0 = Vector2(cos(i * phi + theta), sin(i * phi + theta)) * outerRadius + center @@ -56,7 +57,7 @@ fun regularStarBeveled(points: Int, innerRadius: Double, outerRadius: Double, center: Vector2 = Vector2.ZERO, phase: Double = 0.0): ShapeContour { return contour { - val theta = Math.toRadians(phase) + val theta = phase.asRadians val phi = PI * 2.0 / (points * 2) for (i in 0 until points * 2 step 2) { val outerPoint0 = Vector2(cos(i * phi + theta), sin(i * phi + theta)) * outerRadius + center diff --git a/orx-shapes/src/main/kotlin/RoundedRectangle.kt b/orx-shapes/src/commonMain/kotlin/RoundedRectangle.kt similarity index 100% rename from orx-shapes/src/main/kotlin/RoundedRectangle.kt rename to orx-shapes/src/commonMain/kotlin/RoundedRectangle.kt diff --git a/orx-shapes/src/main/kotlin/drawers/BezierPatchDrawer.kt b/orx-shapes/src/commonMain/kotlin/drawers/BezierPatchDrawer.kt similarity index 99% rename from orx-shapes/src/main/kotlin/drawers/BezierPatchDrawer.kt rename to orx-shapes/src/commonMain/kotlin/drawers/BezierPatchDrawer.kt index 3d3d6f04..1594e5d6 100644 --- a/orx-shapes/src/main/kotlin/drawers/BezierPatchDrawer.kt +++ b/orx-shapes/src/commonMain/kotlin/drawers/BezierPatchDrawer.kt @@ -14,6 +14,7 @@ import org.openrndr.extra.shapes.phrases.BezierPhraseBook import org.openrndr.extras.color.phrases.ColorPhraseBook import org.openrndr.extras.color.spaces.ColorOKLABa import org.openrndr.math.Vector4 +import kotlin.jvm.JvmName private val glslVersion = "410 core" diff --git a/orx-shapes/src/main/kotlin/operators/BulgeContours.kt b/orx-shapes/src/commonMain/kotlin/operators/BulgeContours.kt similarity index 100% rename from orx-shapes/src/main/kotlin/operators/BulgeContours.kt rename to orx-shapes/src/commonMain/kotlin/operators/BulgeContours.kt diff --git a/orx-shapes/src/main/kotlin/operators/ChamferCorners.kt b/orx-shapes/src/commonMain/kotlin/operators/ChamferCorners.kt similarity index 100% rename from orx-shapes/src/main/kotlin/operators/ChamferCorners.kt rename to orx-shapes/src/commonMain/kotlin/operators/ChamferCorners.kt diff --git a/orx-shapes/src/main/kotlin/phrases/BezierPhraseBook.kt b/orx-shapes/src/commonMain/kotlin/phrases/BezierPhraseBook.kt similarity index 100% rename from orx-shapes/src/main/kotlin/phrases/BezierPhraseBook.kt rename to orx-shapes/src/commonMain/kotlin/phrases/BezierPhraseBook.kt diff --git a/orx-shapes/src/test/kotlin/Assertions.kt b/orx-shapes/src/jvmTest/kotlin/Assertions.kt similarity index 100% rename from orx-shapes/src/test/kotlin/Assertions.kt rename to orx-shapes/src/jvmTest/kotlin/Assertions.kt diff --git a/orx-shapes/src/test/kotlin/TestChamferCorners.kt b/orx-shapes/src/jvmTest/kotlin/TestChamferCorners.kt similarity index 100% rename from orx-shapes/src/test/kotlin/TestChamferCorners.kt rename to orx-shapes/src/jvmTest/kotlin/TestChamferCorners.kt diff --git a/orx-shapes/src/test/kotlin/TestRegularPolygon.kt b/orx-shapes/src/jvmTest/kotlin/TestRegularPolygon.kt similarity index 100% rename from orx-shapes/src/test/kotlin/TestRegularPolygon.kt rename to orx-shapes/src/jvmTest/kotlin/TestRegularPolygon.kt diff --git a/orx-shapes/src/test/kotlin/TestRegularStar.kt b/orx-shapes/src/jvmTest/kotlin/TestRegularStar.kt similarity index 100% rename from orx-shapes/src/test/kotlin/TestRegularStar.kt rename to orx-shapes/src/jvmTest/kotlin/TestRegularStar.kt diff --git a/orx-shapes/src/test/kotlin/TestRoundedRectangle.kt b/orx-shapes/src/jvmTest/kotlin/TestRoundedRectangle.kt similarity index 100% rename from orx-shapes/src/test/kotlin/TestRoundedRectangle.kt rename to orx-shapes/src/jvmTest/kotlin/TestRoundedRectangle.kt