comparison examples/E03_hello_cube.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
50 50
51 when isMainModule: 51 when isMainModule:
52 var myengine = initEngine("Hello cube") 52 var myengine = initEngine("Hello cube")
53 53
54 const 54 const
55 vertexInput = @[ 55 inputs = @[
56 attr[Vec3f]("position"), 56 attr[Vec3f]("position"),
57 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), 57 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite),
58 ] 58 ]
59 vertexOutput = @[attr[Vec4f]("outcolor")] 59 intermediate = @[attr[Vec4f]("outcolor")]
60 uniforms = @[ 60 uniforms = @[
61 attr[Mat4]("projection"), 61 attr[Mat4]("projection"),
62 attr[Mat4]("view"), 62 attr[Mat4]("view"),
63 attr[Mat4]("model"), 63 attr[Mat4]("model"),
64 ] 64 ]
65 fragOutput = @[attr[Vec4f]("color")] 65 fragOutput = @[attr[Vec4f]("color")]
66 vertexCode = compileGlslShader( 66 (vertexCode, fragmentCode) = compileVertexFragmentShaderSet(
67 stage=VK_SHADER_STAGE_VERTEX_BIT, 67 inputs=inputs,
68 inputs=vertexInput, 68 intermediate=intermediate,
69 outputs=fragOutput,
69 uniforms=uniforms, 70 uniforms=uniforms,
70 outputs=vertexOutput, 71 vertexCode="""outcolor = color; gl_Position = (Uniforms.projection * Uniforms.view * Uniforms.model) * vec4(position, 1);""",
71 main="""outcolor = color; gl_Position = (Uniforms.projection * Uniforms.view * Uniforms.model) * vec4(position, 1);""" 72 fragmentCode="color = outcolor;",
72 )
73 fragmentCode = compileGlslShader(
74 stage=VK_SHADER_STAGE_FRAGMENT_BIT,
75 inputs=vertexOutput,
76 uniforms=uniforms,
77 outputs=fragOutput,
78 main="color = outcolor;"
79 ) 73 )
80 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode)) 74 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode))
81 var cube = newScene("scene", newEntity("cube", {"mesh": Component(newMesh(positions=cube_pos, indices=tris, colors=cube_color))})) 75 var cube = newScene("scene", newEntity("cube", {"mesh": Component(newMesh(positions=cube_pos, indices=tris, colors=cube_color))}))
82 cube.addShaderGlobal("projection", Unit4f32) 76 cube.addShaderGlobal("projection", Unit4f32)
83 cube.addShaderGlobal("view", Unit4f32) 77 cube.addShaderGlobal("view", Unit4f32)
84 cube.addShaderGlobal("model", Unit4f32) 78 cube.addShaderGlobal("model", Unit4f32)
85 myengine.addScene(cube, vertexInput, @[], transformAttribute="") 79 myengine.addScene(cube, inputs, @[], transformAttribute="")
86 80
87 var t: float32 = cpuTime() 81 var t: float32 = cpuTime()
88 while myengine.updateInputs() == Running and not myengine.keyWasPressed(Escape): 82 while myengine.updateInputs() == Running and not myengine.keyWasPressed(Escape):
89 setShaderGlobal(cube, "model", translate3d(0'f32, 0'f32, 10'f32) * rotate3d(t, Yf32)) 83 setShaderGlobal(cube, "model", translate3d(0'f32, 0'f32, 10'f32) * rotate3d(t, Yf32))
90 setShaderGlobal(cube, "projection", 84 setShaderGlobal(cube, "projection",