Mercurial > games > semicongine
comparison 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 |
comparison
equal
deleted
inserted
replaced
582:8cf5d3f921ae | 583:90537a8887ae |
---|---|
1 import std/os | |
2 import std/options | 1 import std/options |
3 | 2 |
4 import semicongine | 3 import semicongine |
5 | 4 |
6 proc diagnostics(instance: Instance) = | 5 proc diagnostics(instance: Instance) = |
53 selectedPhysicalDevice.filterForGraphicsPresentationQueues() | 52 selectedPhysicalDevice.filterForGraphicsPresentationQueues() |
54 ) | 53 ) |
55 | 54 |
56 # INIT RENDERER: | 55 # INIT RENDERER: |
57 const | 56 const |
58 vertexInput = initAttributeGroup( | 57 vertexInput = @[ |
59 attr[Vec3f]("position"), | 58 attr[Vec3f]("position"), |
60 attr[Vec3f]("color"), | 59 attr[Vec3f]("color"), |
61 ) | 60 attr[Mat4]("transform", perInstance=true) |
62 vertexOutput = initAttributeGroup(attr[Vec3f]("outcolor")) | 61 ] |
63 fragOutput = initAttributeGroup(attr[Vec4f]("color")) | 62 vertexOutput = @[attr[Vec3f]("outcolor")] |
63 uniforms = @[attr[float32]("time")] | |
64 fragOutput = @[attr[Vec4f]("color")] | |
64 vertexCode = compileGlslShader( | 65 vertexCode = compileGlslShader( |
65 stage=VK_SHADER_STAGE_VERTEX_BIT, | 66 stage=VK_SHADER_STAGE_VERTEX_BIT, |
66 inputs=vertexInput, | 67 inputs=vertexInput, |
68 uniforms=uniforms, | |
67 outputs=vertexOutput, | 69 outputs=vertexOutput, |
68 body="""gl_Position = vec4(position, 1.0); outcolor = color;""" | 70 body="""gl_Position = vec4(position, 1.0); outcolor = color * sin(Uniforms.time) * 0.5 + 0.5;""" |
69 ) | 71 ) |
70 fragmentCode = compileGlslShader( | 72 fragmentCode = compileGlslShader( |
71 stage=VK_SHADER_STAGE_FRAGMENT_BIT, | 73 stage=VK_SHADER_STAGE_FRAGMENT_BIT, |
72 inputs=vertexOutput, | 74 inputs=vertexOutput, |
75 uniforms=uniforms, | |
73 outputs=fragOutput, | 76 outputs=fragOutput, |
74 body="color = vec4(outcolor, 1);" | 77 body="color = vec4(outcolor, 1);" |
75 ) | 78 ) |
76 var | 79 var |
77 vertexshader = device.createShaderModule(vertexCode) | 80 vertexshader = device.createShaderModule(vertexCode) |
81 (swapchain, res) = device.createSwapchain(renderPass, surfaceFormat, device.firstGraphicsQueue().get().family, 2) | 84 (swapchain, res) = device.createSwapchain(renderPass, surfaceFormat, device.firstGraphicsQueue().get().family, 2) |
82 if res != VK_SUCCESS: | 85 if res != VK_SUCCESS: |
83 raise newException(Exception, "Unable to create swapchain") | 86 raise newException(Exception, "Unable to create swapchain") |
84 | 87 |
85 # INIT SCENE | 88 # INIT SCENE |
89 var time = initShaderGlobal("time", 0.0'f32) | |
86 var thescene = Scene( | 90 var thescene = Scene( |
87 name: "main", | 91 name: "main", |
88 root: newEntity("root", | 92 root: newEntity("root", |
93 newEntity("stuff", time), | |
89 newEntity("triangle1", newMesh( | 94 newEntity("triangle1", newMesh( |
90 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], | 95 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], |
91 colors=[newVec3f(1.0, 0.0, 0.0), newVec3f(0.0, 1.0, 0.0), newVec3f(0.0, 0.0, 1.0)], | 96 colors=[newVec3f(1.0, 0.0, 0.0), newVec3f(0.0, 1.0, 0.0), newVec3f(0.0, 0.0, 1.0)], |
92 )), | 97 )), |
93 newEntity("triangle1b", newMesh( | 98 newEntity("triangle1b", newMesh( |
117 autoResize=false | 122 autoResize=false |
118 )), | 123 )), |
119 ) | 124 ) |
120 ) | 125 ) |
121 thescene.setupDrawables(renderPass) | 126 thescene.setupDrawables(renderPass) |
127 swapchain.setupUniforms(thescene) | |
122 | 128 |
123 # MAINLOOP | 129 # MAINLOOP |
124 echo "Setup successfull, start rendering" | 130 echo "Setup successfull, start rendering" |
125 for i in 0 ..< 10000: | 131 for i in 0 ..< 1: |
132 setValue[float32](time.value, get[float32](time.value) + 0.0005) | |
133 echo get[float32](time.value) | |
126 discard swapchain.drawScene(thescene) | 134 discard swapchain.drawScene(thescene) |
127 echo "Rendered ", swapchain.framesRendered, " frames" | 135 echo "Rendered ", swapchain.framesRendered, " frames" |
128 checkVkResult device.vk.vkDeviceWaitIdle() | 136 checkVkResult device.vk.vkDeviceWaitIdle() |
129 | 137 |
130 # cleanup | 138 # cleanup |
141 | 149 |
142 # destroy engine | 150 # destroy engine |
143 device.destroy() | 151 device.destroy() |
144 debugger.destroy() | 152 debugger.destroy() |
145 instance.destroy() | 153 instance.destroy() |
154 thewindow.destroy() |