Mercurial > games > semicongine
annotate examples/E03_hello_cube.nim @ 748:4c36aa637912
fix: super crazy input lag problem!
author | Sam <sam@basx.dev> |
---|---|
date | Sat, 10 Jun 2023 00:31:51 +0700 |
parents | 5cd6808150fc |
children | a4c757f5d17f |
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 |
732 | 13 import ../src/semicongine |
522
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
14 |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
15 const |
602 | 16 TopLeftFront = newVec3f(-0.5'f32, -0.5'f32, -0.5'f32) |
17 TopRightFront = newVec3f(0.5'f32, -0.5'f32, -0.5'f32) | |
18 BottomRightFront = newVec3f(0.5'f32, 0.5'f32, -0.5'f32) | |
19 BottomLeftFront = newVec3f(-0.5'f32, 0.5'f32, -0.5'f32) | |
20 TopLeftBack = newVec3f(0.5'f32, -0.5'f32, 0.5'f32) | |
21 TopRightBack = newVec3f(-0.5'f32, -0.5'f32, 0.5'f32) | |
22 BottomRightBack = newVec3f(-0.5'f32, 0.5'f32, 0.5'f32) | |
23 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
|
24 const |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
25 cube_pos = @[ |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
26 TopLeftFront, TopRightFront, BottomRightFront, BottomLeftFront, # front |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
27 TopLeftBack, TopRightBack, BottomRightBack, BottomLeftBack, # back |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
28 TopLeftBack, TopLeftFront, BottomLeftFront, BottomLeftBack, # left |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
29 TopRightBack, TopRightFront, BottomRightFront, BottomRightBack, # right |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
30 TopLeftBack, TopRightBack, TopRightFront, TopLeftFront, # top |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
31 BottomLeftFront, BottomRightFront, BottomRightBack, BottomLeftBack, # bottom |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
32 ] |
671 | 33 R = newVec4f(1, 0, 0, 1) |
34 G = newVec4f(0, 1, 0, 1) | |
35 B = newVec4f(0, 0, 1, 1) | |
522
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
36 cube_color = @[ |
671 | 37 R, R, R, R, |
38 R * 0.5'f32, R * 0.5'f32, R * 0.5'f32, R * 0.5'f32, | |
39 G, G, G, G, | |
40 G * 0.5'f32, G * 0.5'f32, G * 0.5'f32, G * 0.5'f32, | |
41 B, B, B, B, | |
42 B * 0.5'f32, B * 0.5'f32, B * 0.5'f32, B * 0.5'f32, | |
522
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
43 ] |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
44 var |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
45 tris: seq[array[3, uint16]] |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
46 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
|
47 let off = i * 4 |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
48 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
|
49 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
|
50 |
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
Sam <sam@basx.dev>
parents:
diff
changeset
|
51 when isMainModule: |
602 | 52 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
|
53 |
602 | 54 const |
55 vertexInput = @[ | |
624 | 56 attr[Vec3f]("position"), |
671 | 57 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), |
602 | 58 ] |
671 | 59 vertexOutput = @[attr[Vec4f]("outcolor")] |
602 | 60 uniforms = @[ |
61 attr[Mat4]("projection"), | |
62 attr[Mat4]("view"), | |
63 attr[Mat4]("model"), | |
64 ] | |
65 fragOutput = @[attr[Vec4f]("color")] | |
66 vertexCode = compileGlslShader( | |
67 stage=VK_SHADER_STAGE_VERTEX_BIT, | |
68 inputs=vertexInput, | |
69 uniforms=uniforms, | |
70 outputs=vertexOutput, | |
71 main="""outcolor = color; gl_Position = (Uniforms.projection * Uniforms.view * Uniforms.model) * vec4(position, 1);""" | |
72 ) | |
73 fragmentCode = compileGlslShader( | |
74 stage=VK_SHADER_STAGE_FRAGMENT_BIT, | |
75 inputs=vertexOutput, | |
76 uniforms=uniforms, | |
77 outputs=fragOutput, | |
671 | 78 main="color = outcolor;" |
602 | 79 ) |
80 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode)) | |
664
c33c8e156e3e
did: update examples to use new API for scene + scene globals
Sam <sam@basx.dev>
parents:
624
diff
changeset
|
81 var cube = newScene("scene", newEntity("cube", newMesh(positions=cube_pos, indices=tris, colors=cube_color))) |
c33c8e156e3e
did: update examples to use new API for scene + scene globals
Sam <sam@basx.dev>
parents:
624
diff
changeset
|
82 cube.addShaderGlobal("projection", Unit4f32) |
c33c8e156e3e
did: update examples to use new API for scene + scene globals
Sam <sam@basx.dev>
parents:
624
diff
changeset
|
83 cube.addShaderGlobal("view", Unit4f32) |
c33c8e156e3e
did: update examples to use new API for scene + scene globals
Sam <sam@basx.dev>
parents:
624
diff
changeset
|
84 cube.addShaderGlobal("model", Unit4f32) |
739 | 85 myengine.addScene(cube, vertexInput, @[], transformAttribute="") |
602 | 86 |
87 var t: float32 = cpuTime() | |
606
f41c1b78cf5b
add: upgrade all simple examples to new engine version
Sam <sam@basx.dev>
parents:
602
diff
changeset
|
88 while myengine.updateInputs() == Running and not myengine.keyWasPressed(Escape): |
664
c33c8e156e3e
did: update examples to use new API for scene + scene globals
Sam <sam@basx.dev>
parents:
624
diff
changeset
|
89 setShaderGlobal(cube, "model", translate3d(0'f32, 0'f32, 10'f32) * rotate3d(t, Yf32)) |
c33c8e156e3e
did: update examples to use new API for scene + scene globals
Sam <sam@basx.dev>
parents:
624
diff
changeset
|
90 setShaderGlobal(cube, "projection", |
602 | 91 perspective( |
92 float32(PI / 4), | |
93 float32(myengine.getWindow().size[0]) / float32(myengine.getWindow().size[0]), | |
94 0.1'f32, | |
95 100'f32 | |
96 ) | |
97 ) | |
98 t = cpuTime() | |
99 | |
100 myengine.renderScene(cube) | |
101 | |
102 myengine.destroy() |