import org.openrndr.application
import org.openrndr.draw.colorBuffer
import org.openrndr.extra.gui.GUI
import org.openrndr.extra.noise.filters.*

/**
 * Render existing GLSL noise algorithms side by side.
 * Use the GUI to explore the effects.
 */
fun main() = application {
    configure {
        width = 200 * 6 + 200
        height = 500
    }
    program {
        val noises = listOf(
            HashNoise(), SpeckleNoise(), CellNoise(),
            ValueNoise(), SimplexNoise3D(), WorleyNoise()
        )

        val img = colorBuffer(200, 460)

        val gui = GUI()
        noises.forEach { gui.add(it) }
        extend(gui)

        extend {
            noises.forEachIndexed { i, noise ->
                noise.apply(emptyArray(), img)
                drawer.image(img, 200.0 + i * 200.0, 20.0)
            }
        }
    }
}