aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/phenax
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/kotlin/phenax/extensions/CameraManager.kt4
-rw-r--r--src/main/kotlin/phenax/extensions/HeadlessRecording.kt53
-rw-r--r--src/main/kotlin/phenax/utils/program.kt17
3 files changed, 10 insertions, 64 deletions
diff --git a/src/main/kotlin/phenax/extensions/CameraManager.kt b/src/main/kotlin/phenax/extensions/CameraManager.kt
index 5112332..1f03493 100644
--- a/src/main/kotlin/phenax/extensions/CameraManager.kt
+++ b/src/main/kotlin/phenax/extensions/CameraManager.kt
@@ -35,7 +35,7 @@ class CameraManager(public var cameraPosition: Vector3, public var cameraRotatio
}
override fun setup(program: Program) {
- if (recordingEnabled || screenshotEnabled) return
+ if (captureEnabled) 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 || screenshotEnabled) return
+ if (captureEnabled) return
drawer.fontMap = font
drawer.fill = ColorRGBa.WHITE
diff --git a/src/main/kotlin/phenax/extensions/HeadlessRecording.kt b/src/main/kotlin/phenax/extensions/HeadlessRecording.kt
deleted file mode 100644
index 78cde2c..0000000
--- a/src/main/kotlin/phenax/extensions/HeadlessRecording.kt
+++ /dev/null
@@ -1,53 +0,0 @@
-package phenax.extensions
-
-import org.openrndr.*
-import org.openrndr.draw.*
-import org.openrndr.ffmpeg.VideoWriter
-import phenax.utils.recordDuration
-
-class HeadlessRecorder : Extension {
- override var enabled: Boolean = true
-
- var videoTarget: RenderTarget? = null
- var videoWriter: VideoWriter? = null
- var maxFrameCount: Int? = null
-
- override fun setup(program: Program) {
- val width = program.application.configuration.width
- val height = program.application.configuration.height
- program.width = width
- program.height = height
- videoWriter =
- VideoWriter().apply {
- frameRate = 60
- size(width, height)
- output("video/${program.name}.mp4")
- start()
- }
- videoTarget =
- renderTarget(width, height) {
- colorBuffer()
- depthBuffer()
- }
- maxFrameCount = recordDuration()
- program.clock = { program.frameCount / (videoWriter?.frameRate?.toDouble() ?: 0.0) }
- }
-
- override fun beforeDraw(drawer: Drawer, program: Program) {
- videoTarget?.bind()
- program.backgroundColor?.let { drawer.clear(it) }
- }
-
- override fun afterDraw(drawer: Drawer, program: Program) {
- val target = videoTarget ?: return
- val writer = videoWriter ?: return
-
- target.unbind()
- writer.frame(target.colorBuffer(0))
-
- if (program.frameCount >= (maxFrameCount ?: 60 * 10)) {
- writer.stop()
- program.application.exit()
- }
- }
-}
diff --git a/src/main/kotlin/phenax/utils/program.kt b/src/main/kotlin/phenax/utils/program.kt
index cfbe9c9..fdb6197 100644
--- a/src/main/kotlin/phenax/utils/program.kt
+++ b/src/main/kotlin/phenax/utils/program.kt
@@ -4,23 +4,22 @@ import java.io.File
import kotlin.properties.ReadOnlyProperty
import org.openrndr.ApplicationBuilder
import org.openrndr.Program
-import org.openrndr.draw.*
import org.openrndr.color.*
+import org.openrndr.draw.*
import org.openrndr.extra.filewatcher.watchingFile
import org.openrndr.extra.olive.oliveProgram as oliveProgramOriginal
-fun Int.seconds(): Int = this * 1000
-
-fun Int.minutes(): Int = this.seconds() * 60
+fun Number.seconds(): Number = this
-fun recordDuration(millis: Int) {
- System.setProperty("phenax.record.frameCount", (60 * millis / 1000).toInt().toString())
+fun recordDuration(millis: Number) {
+ System.setProperty("phenax.record.recordDuration", millis.toDouble().toString())
}
-fun recordDuration(): Int? = System.getProperty("phenax.record.frameCount")?.toIntOrNull()
+fun recordDuration(): Double = System.getProperty("phenax.record.recordDuration")?.toDoubleOrNull() ?: 5000.0
val recordingEnabled: Boolean by lazy { System.getenv("PHENAX_RECORD") != null }
val screenshotEnabled: Boolean by lazy { System.getenv("PHENAX_SCREENSHOT") != null }
+val captureEnabled: Boolean by lazy { recordingEnabled || screenshotEnabled }
// fun classDir(): String =
// "src/main/kotlin/${stackRootClassName(sanitize =
@@ -31,7 +30,7 @@ val screenshotEnabled: Boolean by lazy { System.getenv("PHENAX_SCREENSHOT") != n
// Have to keep the same name (oliveProgram) to get update on save to work
fun ApplicationBuilder.oliveProgram(init: Program.() -> Unit) {
- if (recordingEnabled || screenshotEnabled) {
+ if (captureEnabled) {
program(init)
} else {
// TODO: Make watching shader files work
@@ -89,7 +88,7 @@ fun Program.liveComputeShader(name: String): ReadOnlyProperty<Any?, ComputeShade
var cs: ComputeShader = ComputeShader.fromCode(shaderCode, name)
- if (!recordingEnabled || screenshotEnabled) {
+ if (!captureEnabled) {
var lastCompiledCode: String = shaderCode
program.extend {