package play 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.extensions.CameraManager import phenax.utils.* fun main() = application { recordDuration(5.seconds()) configure { width = 640 height = 480 windowResizable = false } oliveProgram { val cs by liveComputeShader("play_shader") val outputBuffer = colorBuffer(width, height, type = ColorType.UINT8) val cloudNoiseBuffer = colorBuffer(width, height, type = ColorType.UINT8) val cloudNoiseFilter = SimplexNoise3D() cloudNoiseFilter.scale = Vector3.ONE * 1.0 cloudNoiseFilter.octaves = 8 cloudNoiseFilter.premultipliedAlpha = true // val terrainNoiseBuffer = colorBuffer(2000, 2000, type = ColorType.UINT8) // val terrainNoiseFilter = SimplexNoise3D() // terrainNoiseFilter.seed = Vector3(0.0, 0.0, 0.0) // terrainNoiseFilter.scale = Vector3.ONE * 1.0 // terrainNoiseFilter.octaves = 8 // terrainNoiseFilter.premultipliedAlpha = true var camera_manager = CameraManager() extend(camera_manager) extend { cloudNoiseFilter.seed = Vector3(0.02 * seconds, 0.0, 0.01 * seconds) cloudNoiseFilter.apply(emptyArray(), cloudNoiseBuffer) cs.image("cloud_noise_texture", 1, cloudNoiseBuffer.imageBinding(0, ImageAccess.READ)) // terrainNoiseFilter.apply(emptyArray(), terrainNoiseBuffer) // cs.image("terrain_noise_texture", 2, terrainNoiseBuffer.imageBinding(0, ImageAccess.READ)) cs.uniform("seconds", seconds) camera_manager.setUniforms(cs) cs.image("output_image", 0, outputBuffer.imageBinding(0, ImageAccess.WRITE)) cs.execute(outputBuffer.width, outputBuffer.height, 1) drawer.image(outputBuffer) } } }