aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/phenax
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2026-09-27 12:06:00 +0530
committerAkshay Nair <phenax5@gmail.com>2026-09-28 01:48:05 +0530
commit5f41d4cded56121af66b18c232c7f557ab803f94 (patch)
treeb0b48b4e3b453f7786ba0e1a21c0b2301b06d895 /src/main/kotlin/phenax
parentaff909363f2fb647420105862432ab3e9d6ca1ed (diff)
downloadart-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/phenax')
-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
3 files changed, 37 insertions, 6 deletions
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 {