diff examples/input.nim @ 57:547f3a374271

did: refactor Vector names
author Sam <sam@basx.dev>
date Fri, 20 Jan 2023 16:13:32 +0700
parents 94d7eed3f118
children 8287a91e5d56
line wrap: on
line diff
--- a/examples/input.nim	Fri Jan 20 00:41:55 2023 +0700
+++ b/examples/input.nim	Fri Jan 20 16:13:32 2023 +0700
@@ -7,12 +7,12 @@
 type
   # define type of vertex
   VertexDataA = object
-    position: PositionAttribute[Vec2[float32]]
-    color: ColorAttribute[Vec3[float32]]
-    translate: InstanceAttribute[Vec2[float32]]
+    position: PositionAttribute[TVec2[float32]]
+    color: ColorAttribute[TVec3[float32]]
+    iscursor: GenericAttribute[int32]
   Uniforms = object
     projection: Descriptor[Mat44[float32]]
-    cursor: Descriptor[Vec2[float32]]
+    cursor: Descriptor[TVec2[float32]]
 
 var
   pipeline: RenderPipeline[VertexDataA, Uniforms]
@@ -35,20 +35,20 @@
 # vertex data (types must match the above VertexAttributes)
 const
   shape = @[
-    Vec2([-  1'f32, -  1'f32]),
-    Vec2([   1'f32, -  1'f32]),
-    Vec2([-0.3'f32, -0.3'f32]),
-    Vec2([-0.3'f32, -0.3'f32]),
-    Vec2([-  1'f32,    1'f32]),
-    Vec2([-  1'f32, -  1'f32]),
+    TVec2([-  1'f32, -  1'f32]),
+    TVec2([   1'f32, -  1'f32]),
+    TVec2([-0.3'f32, -0.3'f32]),
+    TVec2([-0.3'f32, -0.3'f32]),
+    TVec2([-  1'f32,    1'f32]),
+    TVec2([-  1'f32, -  1'f32]),
   ]
   colors = @[
-    Vec3([1'f32, 0'f32, 0'f32]),
-    Vec3([1'f32, 0'f32, 0'f32]),
-    Vec3([1'f32, 0'f32, 0'f32]),
-    Vec3([0.8'f32, 0'f32, 0'f32]),
-    Vec3([0.8'f32, 0'f32, 0'f32]),
-    Vec3([0.8'f32, 0'f32, 0'f32]),
+    TVec3([1'f32, 0'f32, 0'f32]),
+    TVec3([1'f32, 0'f32, 0'f32]),
+    TVec3([1'f32, 0'f32, 0'f32]),
+    TVec3([0.8'f32, 0'f32, 0'f32]),
+    TVec3([0.8'f32, 0'f32, 0'f32]),
+    TVec3([0.8'f32, 0'f32, 0'f32]),
   ]
 
 when isMainModule:
@@ -56,14 +56,14 @@
 
   # build a single-object scene graph
   var cursor = new Thing
-  var cursorpart = new Mesh[VertexDataA]
-  cursorpart.vertexData = VertexDataA(
-    position: PositionAttribute[Vec2[float32]](data: shape),
-    color: ColorAttribute[Vec3[float32]](data: colors),
-    translate: InstanceAttribute[Vec2[float32]](data: @[Vec2[float32]([100'f32, 100'f32])]),
+  var cursormesh = new Mesh[VertexDataA]
+  cursormesh.vertexData = VertexDataA(
+    position: PositionAttribute[TVec2[float32]](data: shape),
+    color: ColorAttribute[TVec3[float32]](data: colors),
+    iscursor: GenericAttribute[int32](data: @[1'i32, 1'i32, 1'i32, 1'i32, 1'i32, 1'i32]),
   )
   # transform the cursor a bit to make it look nice
-  for i in 0 ..< cursorpart.vertexData.position.data.len:
+  for i in 0 ..< cursormesh.vertexData.position.data.len:
     let cursorscale = (
       scale2d(20'f32, 20'f32) *
       translate2d(1'f32, 1'f32) *
@@ -71,16 +71,24 @@
       scale2d(0.5'f32, 1'f32) *
       rotate2d(float32(PI) / 4'f32)
     )
-    let pos = Vec3[float32]([cursorpart.vertexData.position.data[i][0], cursorpart.vertexData.position.data[i][1], 1'f32])
-    cursorpart.vertexData.position.data[i] = (cursorscale * pos).xy
-  cursor.parts.add cursorpart
+    let pos = TVec3[float32]([cursormesh.vertexData.position.data[i][0], cursormesh.vertexData.position.data[i][1], 1'f32])
+    cursormesh.vertexData.position.data[i] = (cursorscale * pos).xy
+  cursor.parts.add cursormesh
+
+  var box = new Thing
+  var boxmesh = new Mesh[VertexDataA]
+  boxmesh.vertexData = VertexDataA(
+    position: PositionAttribute[TVec2[float32]](data: shape),
+    color: ColorAttribute[TVec3[float32]](data: colors),
+    iscursor: GenericAttribute[int32](data: @[1'i32, 1'i32, 1'i32, 1'i32, 1'i32, 1'i32]),
+  )
 
   var scene = new Thing
   scene.children.add cursor
 
   # upload data, prepare shaders, etc
   const vertexShader = generateVertexShaderCode[VertexDataA, Uniforms]("""
-    out_position = uniforms.projection * vec4(in_position + uniforms.cursor, 0, 1);
+    out_position = uniforms.projection * vec4(in_position + (uniforms.cursor * iscursor), 0, 1);
   """)
   const fragmentShader = generateFragmentShaderCode[VertexDataA]()
   echo vertexShader