comparison tests/test_vulkan_wrapper.nim @ 189:df92519d4d68

add: initial code for texture support, not finished, had to completely refactor how to handle material-data (ie scene-wide data, sorry if you ever read this
author Sam <sam@basx.dev>
date Fri, 05 May 2023 23:45:50 +0700
parents de9dff24c422
children 8f2eaf0d2808
comparison
equal deleted inserted replaced
188:de9dff24c422 189:df92519d4d68
115 attr[Vec3f]("color", memoryPerformanceHint=PreferFastWrite), 115 attr[Vec3f]("color", memoryPerformanceHint=PreferFastWrite),
116 attr[Vec3f]("translate", perInstance=true) 116 attr[Vec3f]("translate", perInstance=true)
117 ] 117 ]
118 vertexOutput = @[attr[Vec3f]("outcolor")] 118 vertexOutput = @[attr[Vec3f]("outcolor")]
119 uniforms = @[attr[float32]("time")] 119 uniforms = @[attr[float32]("time")]
120 # samplers = @[attr[Sampler2DType]("my_little_texture")]
120 fragOutput = @[attr[Vec4f]("color")] 121 fragOutput = @[attr[Vec4f]("color")]
121 vertexCode = compileGlslShader( 122 vertexCode = compileGlslShader(
122 stage=VK_SHADER_STAGE_VERTEX_BIT, 123 stage=VK_SHADER_STAGE_VERTEX_BIT,
123 inputs=vertexInput, 124 inputs=vertexInput,
124 uniforms=uniforms, 125 uniforms=uniforms,
126 # samplers=samplers,
125 outputs=vertexOutput, 127 outputs=vertexOutput,
126 main="""gl_Position = vec4(position + translate, 1.0); outcolor = color;""" 128 main="""gl_Position = vec4(position + translate, 1.0); outcolor = color;"""
127 ) 129 )
128 fragmentCode = compileGlslShader( 130 fragmentCode = compileGlslShader(
129 stage=VK_SHADER_STAGE_FRAGMENT_BIT, 131 stage=VK_SHADER_STAGE_FRAGMENT_BIT,
130 inputs=vertexOutput, 132 inputs=vertexOutput,
131 uniforms=uniforms, 133 uniforms=uniforms,
134 # samplers=samplers,
132 outputs=fragOutput, 135 outputs=fragOutput,
133 main="color = vec4(outcolor, 0.8);" 136 # main="color = texture(my_little_texture, outcolor.xy) * 0.5 + vec4(outcolor, 1) * 0.5;"
137 main="color = vec4(outcolor, 1) * 0.5;"
134 ) 138 )
135 var renderPass = engine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode) 139 var renderPass = engine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode)
136 engine.setRenderer(renderPass) 140 engine.setRenderer(renderPass)
137 141
138 # INIT SCENES 142 # INIT SCENES
139 var scenes = [scene_simple(), scene_different_mesh_types(), scene_primitives()] 143 var scenes = [
140 var time = initShaderGlobal("time", 0.0'f32) 144 newScene("simple", scene_simple()),
145 newScene("different mesh types", scene_different_mesh_types()),
146 newScene("primitives", scene_primitives())
147 ]
141 for scene in scenes.mitems: 148 for scene in scenes.mitems:
142 scene.components.add time 149 scene.addShaderGlobal("time", 0.0'f32)
143 engine.addScene(scene, vertexInput) 150 engine.addScene(scene, vertexInput)
144 151
145 # MAINLOOP 152 # MAINLOOP
146 echo "Setup successfull, start rendering" 153 echo "Setup successfull, start rendering"
147 for i in 0 ..< 3: 154 for i in 0 ..< 3:
148 for scene in scenes: 155 for scene in scenes.mitems:
149 for i in 0 ..< 1000: 156 for i in 0 ..< 1000:
150 if engine.updateInputs() != Running or engine.keyIsDown(Escape): 157 if engine.updateInputs() != Running or engine.keyIsDown(Escape):
151 engine.destroy() 158 engine.destroy()
152 return 159 return
153 setValue[float32](time.value, get[float32](time.value) + 0.0005) 160 var time = scene.getShaderGlobal("time")
161 setValue[float32](time, get[float32](time) + 0.0005)
154 engine.renderScene(scene) 162 engine.renderScene(scene)
155 echo "Rendered ", engine.framesRendered, " frames" 163 echo "Rendered ", engine.framesRendered, " frames"
156 echo "Processed ", engine.eventsProcessed, " events" 164 echo "Processed ", engine.eventsProcessed, " events"
157 165
158 # cleanup 166 # cleanup