Mercurial > games > semicongine
comparison examples/E03_hello_cube.nim @ 336:887ddc8d45fd
did: update examples to work with improved scenegraph/material api, notice removed complexity!
author | Sam <sam@basx.dev> |
---|---|
date | Tue, 05 Sep 2023 00:28:35 +0700 |
parents | b145a05c2459 |
children | c66503386e8b |
comparison
equal
deleted
inserted
replaced
335:f05b4bef44d1 | 336:887ddc8d45fd |
---|---|
6 # | 6 # |
7 # | 7 # |
8 # | 8 # |
9 | 9 |
10 | 10 |
11 import std/tables | |
11 import std/times | 12 import std/times |
12 | 13 |
13 import ../src/semicongine | 14 import ../src/semicongine |
14 | 15 |
15 const | 16 const |
50 | 51 |
51 when isMainModule: | 52 when isMainModule: |
52 var myengine = initEngine("Hello cube") | 53 var myengine = initEngine("Hello cube") |
53 | 54 |
54 const | 55 const |
55 inputs = @[ | 56 shaderConfiguration = createShaderConfiguration( |
56 attr[Vec3f]("position"), | 57 inputs=[ |
57 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), | 58 attr[Vec3f]("position"), |
58 ] | 59 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), |
59 intermediate = @[attr[Vec4f]("outcolor")] | 60 ], |
60 uniforms = @[ | 61 intermediates=[attr[Vec4f]("outcolor")], |
61 attr[Mat4]("projection"), | 62 uniforms=[ |
62 attr[Mat4]("view"), | 63 attr[Mat4]("projection"), |
63 attr[Mat4]("model"), | 64 attr[Mat4]("view"), |
64 ] | 65 attr[Mat4]("model"), |
65 fragOutput = @[attr[Vec4f]("color")] | 66 ], |
66 (vertexCode, fragmentCode) = compileVertexFragmentShaderSet( | 67 outputs=[attr[Vec4f]("color")], |
67 inputs=inputs, | |
68 intermediate=intermediate, | |
69 outputs=fragOutput, | |
70 uniforms=uniforms, | |
71 vertexCode="""outcolor = color; gl_Position = (Uniforms.projection * Uniforms.view * Uniforms.model) * vec4(position, 1);""", | 68 vertexCode="""outcolor = color; gl_Position = (Uniforms.projection * Uniforms.view * Uniforms.model) * vec4(position, 1);""", |
72 fragmentCode="color = outcolor;", | 69 fragmentCode="color = outcolor;", |
73 ) | 70 ) |
74 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode)) | 71 myengine.initRenderer({"default": shaderConfiguration}.toTable) |
75 var cube = newScene("scene", newEntity("cube", {"mesh": Component(newMesh(positions=cube_pos, indices=tris, colors=cube_color))})) | 72 var cube = Scene(name: "scene", meshes: @[newMesh(positions=cube_pos, indices=tris, colors=cube_color, material=Material(name: "default"))]) |
76 cube.addShaderGlobal("projection", Unit4f32) | 73 cube.addShaderGlobal("projection", Unit4f32) |
77 cube.addShaderGlobal("view", Unit4f32) | 74 cube.addShaderGlobal("view", Unit4f32) |
78 cube.addShaderGlobal("model", Unit4f32) | 75 cube.addShaderGlobal("model", Unit4f32) |
79 myengine.addScene(cube, inputs, @[], transformAttribute="") | 76 myengine.addScene(cube) |
80 | 77 |
81 var t: float32 = cpuTime() | 78 var t: float32 = cpuTime() |
82 while myengine.updateInputs() == Running and not myengine.keyWasPressed(Escape): | 79 while myengine.updateInputs() == Running and not myengine.keyWasPressed(Escape): |
83 setShaderGlobal(cube, "model", translate3d(0'f32, 0'f32, 10'f32) * rotate3d(t, Yf32)) | 80 setShaderGlobal(cube, "model", translate(0'f32, 0'f32, 10'f32) * rotate(t, Yf32)) |
84 setShaderGlobal(cube, "projection", | 81 setShaderGlobal(cube, "projection", |
85 perspective( | 82 perspective( |
86 float32(PI / 4), | 83 float32(PI / 4), |
87 float32(myengine.getWindow().size[0]) / float32(myengine.getWindow().size[0]), | 84 float32(myengine.getWindow().size[0]) / float32(myengine.getWindow().size[0]), |
88 0.1'f32, | 85 0.1'f32, |
89 100'f32 | 86 100'f32 |
90 ) | 87 ) |
91 ) | 88 ) |
92 t = cpuTime() | 89 t = cpuTime() |
93 | |
94 myengine.renderScene(cube) | 90 myengine.renderScene(cube) |
95 | 91 |
96 myengine.destroy() | 92 myengine.destroy() |