package vase import org.openrndr.application import org.openrndr.color.* import org.openrndr.draw.* import org.openrndr.math.Vector2 import phenax.utils.* fun main() = application { if (captureEnabled) { configure { width = 1920 height = 1440 windowResizable = false } } else { configure { width = 640 height = 480 windowResizable = false } } oliveProgram { val enableAntialiasing = captureEnabled val cs by liveComputeShader("vase") val outputBuffer = colorBuffer(width, height, type = ColorType.UINT8) val charSize = 200.0 val font = program.loadFont("data/fonts/default.otf", charSize) val characters = 0..9 val textTarget = renderTarget(charSize.toInt() * characters.count(), charSize.toInt()) { colorBuffer(type = ColorType.UINT8) } var isCharDrawn = false extend { if (!isCharDrawn) { drawer.isolatedWithTarget(textTarget) { drawer.clear(ColorRGBa.TRANSPARENT) drawer.ortho(textTarget) drawer.fontMap = font drawer.fill = ColorRGBa.WHITE for (char in characters) { drawer.text(char.toString(), Vector2(char * charSize.toDouble(), charSize / 2.0 + 5)) } } } val textBuffer = textTarget.colorBuffer(0) cs.image("text_texture", 1, textBuffer.imageBinding(0, ImageAccess.READ)) cs.uniform("enable_antialiasing", enableAntialiasing) cs.uniform("seconds", seconds) cs.image("output_image", 0, outputBuffer.imageBinding(0, ImageAccess.WRITE)) cs.execute(outputBuffer.width, outputBuffer.height, 1) drawer.image(outputBuffer) } } }