Mercurial > games > semicongine
annotate examples/E03_hello_cube.nim @ 705:37ef17c96bdb
did: adjust to new API
| author | Sam <sam@basx.dev> | 
|---|---|
| date | Mon, 22 May 2023 00:51:41 +0700 | 
| parents | d84b2e88776a | 
| children | 5f7ec8d1bd33 | 
| 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 | 
| 
 
f2c97bdbb0b3
did: rename and update older demos to work with new APIs
 
Sam <sam@basx.dev> 
parents:  
diff
changeset
 | 
13 import semicongine | 
| 
 
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) | 
| 602 | 85 myengine.addScene(cube, vertexInput) | 
| 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() | 
