Files
orx/openrndr-demos/src/demo/kotlin/DemoImageLoadStore01.kt
2020-07-13 11:48:44 +02:00

51 lines
1.4 KiB
Kotlin

import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.draw.*
import org.openrndr.extras.meshgenerators.planeMesh
import org.openrndr.internal.Driver
import org.openrndr.math.Vector3
fun main() = application {
program {
val shader = Shader.createFromCode(vsCode =
"""
#version 430
in vec3 a_position;
in vec2 a_texCoord0;
in vec3 a_normal;
uniform mat4 projMatrix;
uniform mat4 viewMatrix;
void main() {
gl_Position = projMatrix * vec4(a_position, 1.0);
}
""",
fsCode = """
#version 430
out vec4 o_color;
layout(rgba8) uniform image2D bla;
void main() {
imageStore(bla, ivec2(30,30), vec4(1.0, 0.0, 0.0, 1.0));
o_color = vec4(1.0);
}
""", name = "ils")
val cb = colorBuffer(128, 128)
val mesh = planeMesh(Vector3.ZERO, Vector3.UNIT_X, Vector3.UNIT_Y, -Vector3.UNIT_Z, 100.0, 100.0)
extend {
drawer.clear(ColorRGBa.PINK)
shader.begin()
shader.image("bla", 0, cb.imageBinding(0, ImageAccess.READ_WRITE))
shader.uniform("viewMatrix", drawer.view)
shader.uniform("projMatrix", drawer.projection)
Driver.instance.drawVertexBuffer(shader, listOf(mesh), DrawPrimitive.TRIANGLES, 0, mesh.vertexCount)
shader.end()
drawer.clear(ColorRGBa.BLACK)
drawer.image(cb)
}
}
}