comparison examples/hello_triangle.nim @ 60:c57285d292b6

did: deep refactoring of handling vertrex attribute and buffer updates, don't ask ;(
author Sam <sam@basx.dev>
date Sun, 22 Jan 2023 22:46:53 +0700
parents d7d9420ba675
children
comparison
equal deleted inserted replaced
59:d7d9420ba675 60:c57285d292b6
7 type 7 type
8 # define type of vertex 8 # define type of vertex
9 VertexDataA = object 9 VertexDataA = object
10 position: PositionAttribute[Vec2] 10 position: PositionAttribute[Vec2]
11 color: ColorAttribute[Vec3] 11 color: ColorAttribute[Vec3]
12 id: InstanceAttribute[Vec3]
13 12
14 var pipeline: RenderPipeline[VertexDataA, void] 13 var pipeline: RenderPipeline[VertexDataA, void]
15 14
16 proc globalUpdate(engine: var Engine, dt: float32) = 15 proc globalUpdate(engine: var Engine, dt: float32) =
17 discard 16 discard
18 17
19 # vertex data (types must match the above VertexAttributes) 18 # vertex data (types must match the above VertexAttributes)
20 const 19 const
21 triangle_pos = @[ 20 triangle_pos = @[
22 Vec2([ 0.0'f32, -0.5'f32]), 21 Vec2([0.0'f32, -0.5'f32]),
23 Vec2([ 0.5'f32, 0.5'f32]), 22 Vec2([0.5'f32, 0.5'f32]),
24 Vec2([-0.5'f32, 0.5'f32]), 23 Vec2([-0.5'f32, 0.5'f32]),
25 ] 24 ]
26 triangle_color = @[ 25 triangle_color = @[
27 Vec3([1.0'f32, 0.0'f32, 0.0'f32]), 26 Vec3([1.0'f32, 0.0'f32, 0.0'f32]),
28 Vec3([0.0'f32, 1.0'f32, 0.0'f32]), 27 Vec3([0.0'f32, 1.0'f32, 0.0'f32]),
29 Vec3([0.0'f32, 0.0'f32, 1.0'f32]), 28 Vec3([0.0'f32, 0.0'f32, 1.0'f32]),
35 # build a mesh 34 # build a mesh
36 var trianglemesh = new Mesh[VertexDataA] 35 var trianglemesh = new Mesh[VertexDataA]
37 trianglemesh.vertexData = VertexDataA( 36 trianglemesh.vertexData = VertexDataA(
38 position: PositionAttribute[Vec2](data: triangle_pos), 37 position: PositionAttribute[Vec2](data: triangle_pos),
39 color: ColorAttribute[Vec3](data: triangle_color), 38 color: ColorAttribute[Vec3](data: triangle_color),
40 id: InstanceAttribute[Vec3](data: @[Vec3([0.5'f32, 0.5'f32, 0.5'f32])]),
41 ) 39 )
42 # build a single-object scene graph 40 # build a single-object scene graph
43 var triangle = new Thing 41 var triangle = newThing("triangle", trianglemesh)
44 # add the triangle mesh to the object
45 triangle.parts.add trianglemesh
46 42
47 # upload data, prepare shaders, etc 43 # upload data, prepare shaders, etc
48 const vertexShader = generateVertexShaderCode[VertexDataA, void]() 44 const vertexShader = generateVertexShaderCode[VertexDataA, void]()
49 const fragmentShader = generateFragmentShaderCode[VertexDataA]() 45 const fragmentShader = generateFragmentShaderCode[VertexDataA]()
50 pipeline = setupPipeline[VertexDataA, void, void]( 46 pipeline = setupPipeline[VertexDataA, void, void](