diff options
| author | Akshay Nair <phenax5@gmail.com> | 2026-09-27 12:06:00 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2026-09-28 01:48:05 +0530 |
| commit | 5f41d4cded56121af66b18c232c7f557ab803f94 (patch) | |
| tree | b0b48b4e3b453f7786ba0e1a21c0b2301b06d895 /src/main/kotlin | |
| parent | aff909363f2fb647420105862432ab3e9d6ca1ed (diff) | |
| download | art-playground-openrndr-5f41d4cded56121af66b18c232c7f557ab803f94.tar.gz art-playground-openrndr-5f41d4cded56121af66b18c232c7f557ab803f94.zip | |
Add headless screenshot + fix scaling for antialiasing for vacation
Diffstat (limited to 'src/main/kotlin')
| -rw-r--r-- | src/main/kotlin/org/openrndr/Preload.kt | 7 | ||||
| -rw-r--r-- | src/main/kotlin/phenax/extensions/CameraManager.kt | 6 | ||||
| -rw-r--r-- | src/main/kotlin/phenax/extensions/HeadlessScreenshot.kt | 30 | ||||
| -rw-r--r-- | src/main/kotlin/phenax/utils/program.kt | 7 | ||||
| -rw-r--r-- | src/main/kotlin/seigaiha/SeigaihaProgram.kt | 2 | ||||
| -rw-r--r-- | src/main/kotlin/vacation/VacationProgram.kt | 16 |
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 { |
