diff options
| author | Akshay Nair <phenax5@gmail.com> | 2026-09-11 17:25:39 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2026-09-11 17:25:39 +0530 |
| commit | f4ec01f09dbe4b731bee44e12d2c1f93268ca705 (patch) | |
| tree | 7ed1d824edb31ddcd45072920d4f9ee353844918 /src/main/kotlin/phenax/utils/program.kt | |
| parent | 41246c0567f4c48ec5788a291386e377241e0eed (diff) | |
| download | art-playground-openrndr-f4ec01f09dbe4b731bee44e12d2c1f93268ca705.tar.gz art-playground-openrndr-f4ec01f09dbe4b731bee44e12d2c1f93268ca705.zip | |
Overdid the raymarch experiment
Diffstat (limited to 'src/main/kotlin/phenax/utils/program.kt')
| -rw-r--r-- | src/main/kotlin/phenax/utils/program.kt | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/main/kotlin/phenax/utils/program.kt b/src/main/kotlin/phenax/utils/program.kt index a05307c..d3788ea 100644 --- a/src/main/kotlin/phenax/utils/program.kt +++ b/src/main/kotlin/phenax/utils/program.kt @@ -8,6 +8,11 @@ import org.openrndr.draw.* import org.openrndr.extra.filewatcher.watchingFile import org.openrndr.extra.olive.oliveProgram as oliveProgramOriginal +enum class ActionType { + PAN, + LIGHT_MOVE +} + fun Int.seconds(): Int = this * 1000 fun Int.minutes(): Int = this.seconds() * 60 @@ -37,11 +42,31 @@ fun ApplicationBuilder.oliveProgram(init: Program.() -> Unit) { } } +fun preprocessShader(shaderCode: String): String { + val pattern = Regex("#include\\s+<([A-Za-z0-9-_/.]+)>") + val includes = pattern.findAll(shaderCode) + var parts: MutableList<String> = mutableListOf() + var lastIndex = 0 + includes.forEach { + parts.add(shaderCode.slice(lastIndex..(it.range.first - 1))) + lastIndex = it.range.last + 1 + val modulePath = it.groupValues[1] + val moduleContents = File("src/main/resources/shaders/modules/${modulePath}.cs").readText() + parts.add("/* Module ${modulePath} */") + parts.add(moduleContents) + parts.add("/* End module ${modulePath} */") + } + parts.add(shaderCode.slice(lastIndex..(shaderCode.length - 1))) + return parts.joinToString(separator = "\n") +} + +val defaultShaderCode: String = "" + fun Program.liveComputeShader(name: String): ReadOnlyProperty<Any?, ComputeShader> { val shaderCode by watchingFile(File("src/main/resources/shaders/${name}.cs")) { file -> println("change") - file.readText() + preprocessShader(file.readText().toString()) } var cs: ComputeShader = ComputeShader.fromCode(shaderCode, name) @@ -55,9 +80,14 @@ fun Program.liveComputeShader(name: String): ReadOnlyProperty<Any?, ComputeShade try { cs = ComputeShader.fromCode(shaderCode, name) } catch (e: Exception) { - // Restore old shader if new code has error - cs = ComputeShader.fromCode(lastCompiledCode, name) println("Shader compile failed: ${e.message}") + // Restore old shader if new code has error or default shader + try { + cs = ComputeShader.fromCode(lastCompiledCode, name) + } catch (e: Exception) { + println("Falling back to default shader") + cs = ComputeShader.fromCode(defaultShaderCode, name) + } } lastCompiledCode = shaderCode } |
