comparison examples/E04_input.nim @ 316:b145a05c2459

add: changing rendering system, not finished yet, also upgrading to Nim 2
author Sam <sam@basx.dev>
date Mon, 07 Aug 2023 00:23:00 +0700
parents da0bd61abe91
children 887ddc8d45fd
comparison
equal deleted inserted replaced
315:4921ec86dcb4 316:b145a05c2459
145 scene.root.add newEntity("keyboard-center", [], keyboard) 145 scene.root.add newEntity("keyboard-center", [], keyboard)
146 scene.root.add newEntity("cursor", {"mesh": Component(cursormesh)}) 146 scene.root.add newEntity("cursor", {"mesh": Component(cursormesh)})
147 147
148 # shaders 148 # shaders
149 const 149 const
150 vertexInput = @[ 150 inputs = @[
151 attr[Vec3f]("position"), 151 attr[Vec3f]("position"),
152 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), 152 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite),
153 attr[Mat4]("transform", memoryPerformanceHint=PreferFastWrite, perInstance=true), 153 attr[Mat4]("transform", memoryPerformanceHint=PreferFastWrite, perInstance=true),
154 ] 154 ]
155 vertexOutput = @[attr[Vec4f]("outcolor")] 155 intermediate = @[attr[Vec4f]("outcolor")]
156 uniforms = @[attr[Mat4]("projection")] 156 uniforms = @[attr[Mat4]("projection")]
157 fragOutput = @[attr[Vec4f]("color")] 157 outputs = @[attr[Vec4f]("color")]
158 vertexCode = compileGlslShader( 158 (vertexCode, fragmentCode) = compileVertexFragmentShaderSet(
159 stage=VK_SHADER_STAGE_VERTEX_BIT, 159 inputs=inputs,
160 inputs=vertexInput, 160 intermediate=intermediate,
161 outputs=outputs,
161 uniforms=uniforms, 162 uniforms=uniforms,
162 outputs=vertexOutput, 163 vertexCode="""outcolor = color; gl_Position = vec4(position, 1) * (transform * Uniforms.projection);""",
163 main="""outcolor = color; gl_Position = vec4(position, 1) * (transform * Uniforms.projection);""" 164 fragmentCode="color = outcolor;",
164 )
165 fragmentCode = compileGlslShader(
166 stage=VK_SHADER_STAGE_FRAGMENT_BIT,
167 inputs=vertexOutput,
168 uniforms=uniforms,
169 outputs=fragOutput,
170 main="color = outcolor;"
171 ) 165 )
172 166
173 # set up rendering 167 # set up rendering
174 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode, clearColor=newVec4f(0, 0, 0.5))) 168 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode, clearColor=newVec4f(0, 0, 0.5)))
175 myengine.addScene(scene, vertexInput, @[], transformAttribute="transform") 169 myengine.addScene(scene, inputs, @[], transformAttribute="transform")
176 scene.addShaderGlobal("projection", Unit4f32) 170 scene.addShaderGlobal("projection", Unit4f32)
177 171
178 # mainloop 172 # mainloop
179 while myengine.updateInputs() == Running: 173 while myengine.updateInputs() == Running:
180 if myengine.windowWasResized(): 174 if myengine.windowWasResized():