Mercurial > games > semicongine
diff tests/test_vulkan_wrapper.nim @ 583:90537a8887ae
did: implement uniforms, some refactoring
author | Sam <sam@basx.dev> |
---|---|
date | Sun, 09 Apr 2023 01:04:54 +0700 |
parents | 8cf5d3f921ae |
children | 55be3579dc30 |
line wrap: on
line diff
--- a/tests/test_vulkan_wrapper.nim Fri Apr 07 00:32:07 2023 +0700 +++ b/tests/test_vulkan_wrapper.nim Sun Apr 09 01:04:54 2023 +0700 @@ -1,4 +1,3 @@ -import std/os import std/options import semicongine @@ -55,21 +54,25 @@ # INIT RENDERER: const - vertexInput = initAttributeGroup( + vertexInput = @[ attr[Vec3f]("position"), attr[Vec3f]("color"), - ) - vertexOutput = initAttributeGroup(attr[Vec3f]("outcolor")) - fragOutput = initAttributeGroup(attr[Vec4f]("color")) + attr[Mat4]("transform", perInstance=true) + ] + vertexOutput = @[attr[Vec3f]("outcolor")] + uniforms = @[attr[float32]("time")] + fragOutput = @[attr[Vec4f]("color")] vertexCode = compileGlslShader( stage=VK_SHADER_STAGE_VERTEX_BIT, inputs=vertexInput, + uniforms=uniforms, outputs=vertexOutput, - body="""gl_Position = vec4(position, 1.0); outcolor = color;""" + body="""gl_Position = vec4(position, 1.0); outcolor = color * sin(Uniforms.time) * 0.5 + 0.5;""" ) fragmentCode = compileGlslShader( stage=VK_SHADER_STAGE_FRAGMENT_BIT, inputs=vertexOutput, + uniforms=uniforms, outputs=fragOutput, body="color = vec4(outcolor, 1);" ) @@ -83,9 +86,11 @@ raise newException(Exception, "Unable to create swapchain") # INIT SCENE + var time = initShaderGlobal("time", 0.0'f32) var thescene = Scene( name: "main", root: newEntity("root", + newEntity("stuff", time), newEntity("triangle1", newMesh( positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], colors=[newVec3f(1.0, 0.0, 0.0), newVec3f(0.0, 1.0, 0.0), newVec3f(0.0, 0.0, 1.0)], @@ -119,10 +124,13 @@ ) ) thescene.setupDrawables(renderPass) + swapchain.setupUniforms(thescene) # MAINLOOP echo "Setup successfull, start rendering" - for i in 0 ..< 10000: + for i in 0 ..< 1: + setValue[float32](time.value, get[float32](time.value) + 0.0005) + echo get[float32](time.value) discard swapchain.drawScene(thescene) echo "Rendered ", swapchain.framesRendered, " frames" checkVkResult device.vk.vkDeviceWaitIdle() @@ -143,3 +151,4 @@ device.destroy() debugger.destroy() instance.destroy() + thewindow.destroy()