Mercurial > games > semicongine
comparison examples/hello_triangle.nim @ 482:1670f8e70964
add: clean examples, update build configs
| author | Sam <sam@basx.dev> |
|---|---|
| date | Tue, 10 Jan 2023 00:24:37 +0700 |
| parents | 14e5151f68d1 |
| children | b4a972bd37d5 |
comparison
equal
deleted
inserted
replaced
| 481:c472abfcee57 | 482:1670f8e70964 |
|---|---|
| 4 import zamikongine/mesh | 4 import zamikongine/mesh |
| 5 import zamikongine/thing | 5 import zamikongine/thing |
| 6 import zamikongine/shader | 6 import zamikongine/shader |
| 7 | 7 |
| 8 type | 8 type |
| 9 # define type of vertex | |
| 9 VertexDataA = object | 10 VertexDataA = object |
| 10 position11: VertexAttribute[Vec2[float32]] | 11 position: VertexAttribute[Vec2[float32]] |
| 11 color22: VertexAttribute[Vec3[float32]] | 12 color: VertexAttribute[Vec3[float32]] |
| 13 | |
| 14 # vertex data (types must match the above VertexAttributes) | |
| 15 const | |
| 16 triangle_pos = @[ | |
| 17 Vec2([-0.5'f32, -0.5'f32]), | |
| 18 Vec2([ 0.5'f32, 0.5'f32]), | |
| 19 Vec2([-0.5'f32, 0.5'f32]), | |
| 20 ] | |
| 21 triangle_color = @[ | |
| 22 Vec3([1.0'f32, 1.0'f32, 0.0'f32]), | |
| 23 Vec3([0.0'f32, 1.0'f32, 0.0'f32]), | |
| 24 Vec3([0.0'f32, 1.0'f32, 1.0'f32]), | |
| 25 ] | |
| 12 | 26 |
| 13 when isMainModule: | 27 when isMainModule: |
| 14 var myengine = igniteEngine() | 28 var myengine = igniteEngine() |
| 15 var mymesh1 = new Mesh[VertexDataA] | 29 |
| 16 mymesh1.vertexData = VertexDataA( | 30 # build a mesh |
| 17 position11: VertexAttribute[Vec2[float32]]( | 31 var trianglemesh = new Mesh[VertexDataA] |
| 18 data: @[ | 32 trianglemesh.vertexData = VertexDataA( |
| 19 Vec2([-0.5'f32, -0.5'f32]), | 33 position: VertexAttribute[Vec2[float32]](data: triangle_pos), |
| 20 Vec2([ 0.5'f32, 0.5'f32]), | 34 color: VertexAttribute[Vec3[float32]](data: triangle_color), |
| 21 Vec2([-0.5'f32, 0.5'f32]), | |
| 22 ] | |
| 23 ), | |
| 24 color22: VertexAttribute[Vec3[float32]]( | |
| 25 data: @[ | |
| 26 Vec3([1.0'f32, 1.0'f32, 0.0'f32]), | |
| 27 Vec3([0.0'f32, 1.0'f32, 0.0'f32]), | |
| 28 Vec3([0.0'f32, 1.0'f32, 1.0'f32]), | |
| 29 ] | |
| 30 ) | |
| 31 ) | 35 ) |
| 32 var mymesh2 = new IndexedMesh[VertexDataA, uint16] | 36 # build a single-object scene graph |
| 33 mymesh2.vertexData = VertexDataA( | 37 var triangle = new Thing |
| 34 position11: VertexAttribute[Vec2[float32]]( | 38 # add the triangle mesh to the object |
| 35 data: @[ | 39 triangle.parts.add trianglemesh |
| 36 Vec2([ 0.0'f32, -0.7'f32]), | |
| 37 Vec2([ 0.6'f32, 0.1'f32]), | |
| 38 Vec2([ 0.3'f32, 0.4'f32]), | |
| 39 ] | |
| 40 ), | |
| 41 color22: VertexAttribute[Vec3[float32]]( | |
| 42 data: @[ | |
| 43 Vec3([1.0'f32, 1.0'f32, 0.0'f32]), | |
| 44 Vec3([1.0'f32, 0.0'f32, 0.0'f32]), | |
| 45 Vec3([0.0'f32, 1.0'f32, 1.0'f32]), | |
| 46 ] | |
| 47 ) | |
| 48 ) | |
| 49 mymesh2.indices = @[[0'u16, 1'u16, 2'u16]] | |
| 50 var athing = new Thing | |
| 51 athing.parts.add mymesh1 | |
| 52 var childthing = new Thing | |
| 53 childthing.parts.add mymesh2 | |
| 54 athing.children.add childthing | |
| 55 | 40 |
| 41 # upload data, prepare shaders, etc | |
| 56 setupPipeline[VertexDataA, uint16]( | 42 setupPipeline[VertexDataA, uint16]( |
| 57 myengine, | 43 myengine, |
| 58 athing, | 44 triangle, |
| 59 generateVertexShaderCode[VertexDataA]("main", "position11", "color22"), | 45 generateVertexShaderCode[VertexDataA]("main", "position", "color"), |
| 60 generateFragmentShaderCode[VertexDataA]("main"), | 46 generateFragmentShaderCode[VertexDataA]("main"), |
| 61 ) | 47 ) |
| 48 # show something | |
| 62 myengine.fullThrottle() | 49 myengine.fullThrottle() |
| 63 myengine.trash() | 50 myengine.trash() |
