From a329bfdbaa518f717ca40115edb21f07a8ad57cf Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Tue, 15 Sep 2026 00:41:33 +0530 Subject: Add simple templating --- .gitignore | 6 +----- justfile | 20 ++++++++++++------ templates/glsl/kotlin/Program.kt | 42 ++++++++++++++++++++++++++++++++++++++ templates/glsl/shaders/shader.glsl | 22 ++++++++++++++++++++ 4 files changed, 79 insertions(+), 11 deletions(-) create mode 100644 templates/glsl/kotlin/Program.kt create mode 100644 templates/glsl/shaders/shader.glsl diff --git a/.gitignore b/.gitignore index e4f3db6..8cd6aab 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,7 @@ -application.log +*.log build out .idea .gradle .kotlin -.lwjgl -gui-parameters/ -ffmpegOutput.txt ShaderError.glsl - diff --git a/justfile b/justfile index 85ee0a5..e4b4c36 100644 --- a/justfile +++ b/justfile @@ -1,11 +1,19 @@ -run class: - ./gradlew run -Popenrndr.application={{class}} +run name: + ./gradlew run -Popenrndr.application={{name}}.$(echo "{{name}}" | sed -E 's/^(\w)/\U\1/')ProgramKt -record class: - xvfb-run --server-args="-screen 0 1920x1080x24" just record-w "{{class}}" +record name: + xvfb-run --server-args="-screen 0 1920x1080x24" just record-windowed "{{name}}" -record-w class: - ./gradlew record -Popenrndr.application={{class}} +record-windowed name: + ./gradlew record -Popenrndr.application={{name}}.$(echo "{{name}}" | sed -E 's/^(\w)/\U\1/')ProgramKt update: ./gradlew dependencyUpydates + +new type name: + mkdir -p src/main/kotlin/{{name}} + cp -r --update=none-fail templates/{{type}}/kotlin/* -t src/main/kotlin/{{name}} + mv src/main/kotlin/{{name}}/Program.kt src/main/kotlin/{{name}}/$(echo "{{name}}" | sed -E 's/^(\w)/\U\1/')Program.kt + sed -i "s/<>/{{name}}/" src/main/kotlin/{{name}}/* + cp --update=none-fail templates/{{type}}/shaders/shader.glsl src/main/resources/shaders/{{name}}.glsl + diff --git a/templates/glsl/kotlin/Program.kt b/templates/glsl/kotlin/Program.kt new file mode 100644 index 0000000..3e436e8 --- /dev/null +++ b/templates/glsl/kotlin/Program.kt @@ -0,0 +1,42 @@ +package <> + +import org.openrndr.application +import org.openrndr.color.* +import org.openrndr.draw.* +import org.openrndr.extra.noise.filters.SimplexNoise3D +import org.openrndr.math.Vector3 +import phenax.utils.* + +fun main() = application { + recordDuration(5.seconds()) + + configure { + width = 640 + height = 480 + windowResizable = false + } + + oliveProgram { + val cs by liveComputeShader("<>") + + val outputBuffer = colorBuffer(width, height, type = ColorType.UINT8) + + val size = Math.max(width, height) * 2 + val noiseBuffer = colorBuffer(size, size, type = ColorType.UINT8) + val noiseFilter = SimplexNoise3D() + noiseFilter.scale = Vector3.ONE * 2.4 + noiseFilter.octaves = 8 + noiseFilter.premultipliedAlpha = true + + extend { + noiseFilter.seed = Vector3(0.01, 0.01, 0.001) + noiseFilter.apply(emptyArray(), noiseBuffer) + cs.image("noise_texture", 1, noiseBuffer.imageBinding(0, ImageAccess.READ)) + + cs.uniform("seconds", seconds) + cs.image("output_image", 0, outputBuffer.imageBinding(0, ImageAccess.WRITE)) + cs.execute(outputBuffer.width, outputBuffer.height, 1) + drawer.image(outputBuffer) + } + } +} diff --git a/templates/glsl/shaders/shader.glsl b/templates/glsl/shaders/shader.glsl new file mode 100644 index 0000000..a271146 --- /dev/null +++ b/templates/glsl/shaders/shader.glsl @@ -0,0 +1,22 @@ +#version 430 +layout(local_size_x = 1, local_size_y = 1) in; + +uniform float seconds = 0; +layout(rgba8) uniform readonly image2D noise_texture; +layout(rgba8) uniform writeonly image2D output_image; + +float sample_noise(in vec2 p) { + vec4 noise = imageLoad(noise_texture, ivec2(p * imageSize(noise_texture))); + return noise.x; +} + +void main() { + vec2 resolution = vec2(imageSize(output_image).xy); + float aspect_ratio = resolution.y / resolution.x; + vec2 uv = gl_GlobalInvocationID.xy * vec2(1.0, aspect_ratio) / resolution; + + float v = sample_noise(uv); + vec3 color = mix(vec3(0), vec3(1), v); + + imageStore(output_image, ivec2(gl_GlobalInvocationID.xy), vec4(color, 1)); +} -- cgit v1.3.1