diff options
| author | Akshay Nair <phenax5@gmail.com> | 2026-09-15 00:41:33 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2026-09-15 10:41:01 +0530 |
| commit | a329bfdbaa518f717ca40115edb21f07a8ad57cf (patch) | |
| tree | d7d35a6cda95be6cdf601d25b35d9f14db593258 | |
| parent | 3b92d73f89dbd9b8104ee3f3faf21c74d4d6ed7a (diff) | |
| download | art-playground-openrndr-a329bfdbaa518f717ca40115edb21f07a8ad57cf.tar.gz art-playground-openrndr-a329bfdbaa518f717ca40115edb21f07a8ad57cf.zip | |
Add simple templating
| -rw-r--r-- | .gitignore | 6 | ||||
| -rw-r--r-- | justfile | 20 | ||||
| -rw-r--r-- | templates/glsl/kotlin/Program.kt | 42 | ||||
| -rw-r--r-- | templates/glsl/shaders/shader.glsl | 22 |
4 files changed, 79 insertions, 11 deletions
@@ -1,11 +1,7 @@ -application.log +*.log build out .idea .gradle .kotlin -.lwjgl -gui-parameters/ -ffmpegOutput.txt ShaderError.glsl - @@ -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>>/{{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 <<name>> + +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("<<name>>") + + 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)); +} |
