annotate examples/E03_hello_cube.nim @ 605:510c651cb27d

add: window-resize check
author Sam <sam@basx.dev>
date Tue, 25 Apr 2023 18:32:23 +0700
parents 0d8858aa0671
children f41c1b78cf5b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
522
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
1 #
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
2 # TODO: Needs Depth-Buffer first!
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
3 #
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
4 #
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
5 #
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
6 #
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
7 #
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
8 #
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
9
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
10
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
11 import std/times
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
12 import std/strutils
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
13
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
14 import semicongine
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
15
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
16 const
602
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
17 TopLeftFront = newVec3f(-0.5'f32, -0.5'f32, -0.5'f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
18 TopRightFront = newVec3f(0.5'f32, -0.5'f32, -0.5'f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
19 BottomRightFront = newVec3f(0.5'f32, 0.5'f32, -0.5'f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
20 BottomLeftFront = newVec3f(-0.5'f32, 0.5'f32, -0.5'f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
21 TopLeftBack = newVec3f(0.5'f32, -0.5'f32, 0.5'f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
22 TopRightBack = newVec3f(-0.5'f32, -0.5'f32, 0.5'f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
23 BottomRightBack = newVec3f(-0.5'f32, 0.5'f32, 0.5'f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
24 BottomLeftBack = newVec3f(0.5'f32, 0.5'f32, 0.5'f32)
522
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
25 const
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
26 cube_pos = @[
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
27 TopLeftFront, TopRightFront, BottomRightFront, BottomLeftFront, # front
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
28 TopLeftBack, TopRightBack, BottomRightBack, BottomLeftBack, # back
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
29 TopLeftBack, TopLeftFront, BottomLeftFront, BottomLeftBack, # left
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
30 TopRightBack, TopRightFront, BottomRightFront, BottomRightBack, # right
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
31 TopLeftBack, TopRightBack, TopRightFront, TopLeftFront, # top
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
32 BottomLeftFront, BottomRightFront, BottomRightBack, BottomLeftBack, # bottom
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
33 ]
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
34 cube_color = @[
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
35 Rf32, Rf32, Rf32, Rf32,
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
36 Rf32 * 0.5'f32, Rf32 * 0.5'f32, Rf32 * 0.5'f32, Rf32 * 0.5'f32,
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
37 Gf32, Gf32, Gf32, Gf32,
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
38 Gf32 * 0.5'f32, Gf32 * 0.5'f32, Gf32 * 0.5'f32, Gf32 * 0.5'f32,
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
39 Bf32, Bf32, Bf32, Bf32,
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
40 Bf32 * 0.5'f32, Bf32 * 0.5'f32, Bf32 * 0.5'f32, Bf32 * 0.5'f32,
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
41 ]
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
42 var
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
43 tris: seq[array[3, uint16]]
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
44 for i in 0'u16 ..< 6'u16:
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
45 let off = i * 4
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
46 tris.add [off + 0'u16, off + 1'u16, off + 2'u16]
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
47 tris.add [off + 2'u16, off + 3'u16, off + 0'u16]
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
48
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
49 when isMainModule:
602
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
50 var myengine = initEngine("Hello cube")
522
f2c97bdbb0b3 did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff changeset
51
602
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
52 const
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
53 vertexInput = @[
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
54 attr[Vec3f]("position", memoryLocation=VRAM),
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
55 attr[Vec3f]("color", memoryLocation=VRAMVisible),
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
56 ]
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
57 vertexOutput = @[attr[Vec3f]("outcolor")]
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
58 uniforms = @[
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
59 attr[Mat4]("projection"),
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
60 attr[Mat4]("view"),
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
61 attr[Mat4]("model"),
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
62 ]
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
63 fragOutput = @[attr[Vec4f]("color")]
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
64 vertexCode = compileGlslShader(
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
65 stage=VK_SHADER_STAGE_VERTEX_BIT,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
66 inputs=vertexInput,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
67 uniforms=uniforms,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
68 outputs=vertexOutput,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
69 main="""outcolor = color; gl_Position = (Uniforms.projection * Uniforms.view * Uniforms.model) * vec4(position, 1);"""
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
70 )
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
71 fragmentCode = compileGlslShader(
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
72 stage=VK_SHADER_STAGE_FRAGMENT_BIT,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
73 inputs=vertexOutput,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
74 uniforms=uniforms,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
75 outputs=fragOutput,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
76 main="color = vec4(outcolor, 1);"
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
77 )
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
78 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode))
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
79 var
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
80 projection = initShaderGlobal("projection", Unit4f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
81 view = initShaderGlobal("view", Unit4f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
82 model = initShaderGlobal("model", Unit4f32)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
83 cube = newEntity("cube", newMesh(positions=cube_pos, indices=tris, colors=cube_color))
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
84 cube.components.add projection
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
85 cube.components.add view
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
86 cube.components.add model
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
87 myengine.addScene(cube, vertexInput)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
88
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
89 var t: float32 = cpuTime()
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
90 while myengine.running and not myengine.keyWasPressed(Escape):
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
91 myengine.updateInputs()
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
92 setValue[Mat4](model.value, translate3d(0'f32, 0'f32, 10'f32) * rotate3d(t, Yf32))
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
93 setValue[Mat4](
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
94 projection.value,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
95 perspective(
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
96 float32(PI / 4),
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
97 float32(myengine.getWindow().size[0]) / float32(myengine.getWindow().size[0]),
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
98 0.1'f32,
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
99 100'f32
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
100 )
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
101 )
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
102 t = cpuTime()
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
103
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
104 myengine.renderScene(cube)
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
105
0d8858aa0671 did: migrate to new engine version
Sam <sam@basx.dev>
parents: 535
diff changeset
106 myengine.destroy()