aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/kotlin/org/openrndr/Preload.kt7
-rw-r--r--src/main/kotlin/phenax/extensions/CameraManager.kt6
-rw-r--r--src/main/kotlin/phenax/extensions/HeadlessScreenshot.kt30
-rw-r--r--src/main/kotlin/phenax/utils/program.kt7
-rw-r--r--src/main/kotlin/seigaiha/SeigaihaProgram.kt2
-rw-r--r--src/main/kotlin/vacation/VacationProgram.kt16
6 files changed, 56 insertions, 12 deletions
diff --git a/src/main/kotlin/org/openrndr/Preload.kt b/src/main/kotlin/org/openrndr/Preload.kt
index 1bbd673..9664416 100644
--- a/src/main/kotlin/org/openrndr/Preload.kt
+++ b/src/main/kotlin/org/openrndr/Preload.kt
@@ -1,14 +1,19 @@
package org.openrndr
import org.openrndr.draw.*
+import org.openrndr.extensions.Screenshots
+import org.openrndr.extra.olive.*
import phenax.extensions.HeadlessRecorder
-import phenax.utils.recordingEnabled
+import phenax.extensions.HeadlessScreenshot
+import phenax.utils.*
class Preload : ApplicationPreload() {
override fun onProgramSetup(program: Program) {
println("BACKEND(${program.name}): ${program.application::class.qualifiedName}")
if (recordingEnabled) {
program.extend(HeadlessRecorder())
+ } else if (screenshotEnabled) {
+ program.extend(HeadlessScreenshot())
}
}
}
diff --git a/src/main/kotlin/phenax/extensions/CameraManager.kt b/src/main/kotlin/phenax/extensions/CameraManager.kt
index d14205f..5112332 100644
--- a/src/main/kotlin/phenax/extensions/CameraManager.kt
+++ b/src/main/kotlin/phenax/extensions/CameraManager.kt
@@ -7,7 +7,7 @@ import org.openrndr.draw.*
import org.openrndr.math.Quaternion
import org.openrndr.math.Vector2
import org.openrndr.math.Vector3
-import phenax.utils.recordingEnabled
+import phenax.utils.*
enum class ActionType {
PAN,
@@ -35,7 +35,7 @@ class CameraManager(public var cameraPosition: Vector3, public var cameraRotatio
}
override fun setup(program: Program) {
- if (recordingEnabled) return
+ if (recordingEnabled || screenshotEnabled) return
cameraQuaternion = Quaternion.fromAngles(cameraRotation.x, cameraRotation.y, cameraRotation.z)
@@ -99,7 +99,7 @@ class CameraManager(public var cameraPosition: Vector3, public var cameraRotatio
override fun beforeDraw(drawer: Drawer, program: Program) {}
override fun afterDraw(drawer: Drawer, program: Program) {
- if (recordingEnabled) return
+ if (recordingEnabled || screenshotEnabled) return
drawer.fontMap = font
drawer.fill = ColorRGBa.WHITE
diff --git a/src/main/kotlin/phenax/extensions/HeadlessScreenshot.kt b/src/main/kotlin/phenax/extensions/HeadlessScreenshot.kt
new file mode 100644
index 0000000..35de05d
--- /dev/null
+++ b/src/main/kotlin/phenax/extensions/HeadlessScreenshot.kt
@@ -0,0 +1,30 @@
+package phenax.extensions
+
+import org.openrndr.*
+import org.openrndr.draw.*
+import org.openrndr.extensions.SingleScreenshot
+import org.openrndr.ffmpeg.VideoWriter
+
+class HeadlessScreenshot : Extension {
+ override var enabled: Boolean = true
+
+ var screenshots: SingleScreenshot? = null
+ var videoWriter: VideoWriter? = null
+ var maxFrameCount: Int? = null
+
+ override fun setup(program: Program) {
+ val scr = SingleScreenshot()
+ screenshots = scr
+ program.extend(scr) {
+ outputFile = "screenshot/${program.name}.png"
+ }
+ }
+
+ override fun beforeDraw(drawer: Drawer, program: Program) {}
+
+ override fun afterDraw(drawer: Drawer, program: Program) {
+ screenshots?.trigger()
+
+ // program.application.exit()
+ }
+}
diff --git a/src/main/kotlin/phenax/utils/program.kt b/src/main/kotlin/phenax/utils/program.kt
index fe48351..cfbe9c9 100644
--- a/src/main/kotlin/phenax/utils/program.kt
+++ b/src/main/kotlin/phenax/utils/program.kt
@@ -19,7 +19,8 @@ fun recordDuration(millis: Int) {
fun recordDuration(): Int? = System.getProperty("phenax.record.frameCount")?.toIntOrNull()
-val recordingEnabled: Boolean by lazy { System.getenv("RECORD") != null }
+val recordingEnabled: Boolean by lazy { System.getenv("PHENAX_RECORD") != null }
+val screenshotEnabled: Boolean by lazy { System.getenv("PHENAX_SCREENSHOT") != null }
// fun classDir(): String =
// "src/main/kotlin/${stackRootClassName(sanitize =
@@ -30,7 +31,7 @@ val recordingEnabled: Boolean by lazy { System.getenv("RECORD") != null }
// Have to keep the same name (oliveProgram) to get update on save to work
fun ApplicationBuilder.oliveProgram(init: Program.() -> Unit) {
- if (recordingEnabled) {
+ if (recordingEnabled || screenshotEnabled) {
program(init)
} else {
// TODO: Make watching shader files work
@@ -88,7 +89,7 @@ fun Program.liveComputeShader(name: String): ReadOnlyProperty<Any?, ComputeShade
var cs: ComputeShader = ComputeShader.fromCode(shaderCode, name)
- if (!recordingEnabled) {
+ if (!recordingEnabled || screenshotEnabled) {
var lastCompiledCode: String = shaderCode
program.extend {
diff --git a/src/main/kotlin/seigaiha/SeigaihaProgram.kt b/src/main/kotlin/seigaiha/SeigaihaProgram.kt
index 8894664..ae3e411 100644
--- a/src/main/kotlin/seigaiha/SeigaihaProgram.kt
+++ b/src/main/kotlin/seigaiha/SeigaihaProgram.kt
@@ -10,7 +10,7 @@ import phenax.utils.*
fun main() = application {
recordDuration(5.seconds())
- if (recordingEnabled) {
+ if (recordingEnabled || screenshotEnabled) {
configure {
width = 1920
height = 1080
diff --git a/src/main/kotlin/vacation/VacationProgram.kt b/src/main/kotlin/vacation/VacationProgram.kt
index 041c009..b4d9d12 100644
--- a/src/main/kotlin/vacation/VacationProgram.kt
+++ b/src/main/kotlin/vacation/VacationProgram.kt
@@ -10,10 +10,18 @@ import phenax.utils.*
fun main() = application {
recordDuration(5.seconds())
- configure {
- width = 640
- height = 480
- windowResizable = false
+ if (recordingEnabled || screenshotEnabled) {
+ configure {
+ width = 1920
+ height = 1080
+ windowResizable = false
+ }
+ } else {
+ configure {
+ width = 640
+ height = 360
+ windowResizable = false
+ }
}
oliveProgram {