comparison tests/test_vulkan_wrapper.nim @ 125:6e2c48cb6f60

add: mesh primitives
author Sam <sam@basx.dev>
date Tue, 11 Apr 2023 00:58:16 +0700
parents cb9e27a30165
children 81a8e62215db
comparison
equal deleted inserted replaced
124:cb9e27a30165 125:6e2c48cb6f60
87 ) 87 )
88 var mymesh4 = newMesh( 88 var mymesh4 = newMesh(
89 positions=[newVec3f(0.0, -0.8), newVec3f(0.8, 0.8), newVec3f(-0.8, 0.8)], 89 positions=[newVec3f(0.0, -0.8), newVec3f(0.8, 0.8), newVec3f(-0.8, 0.8)],
90 colors=[newVec3f(0.0, 0.0, 1.0), newVec3f(0.0, 0.0, 1.0), newVec3f(0.0, 0.0, 1.0)], 90 colors=[newVec3f(0.0, 0.0, 1.0), newVec3f(0.0, 0.0, 1.0), newVec3f(0.0, 0.0, 1.0)],
91 indices=[[0'u16, 1'u16, 2'u16]], 91 indices=[[0'u16, 1'u16, 2'u16]],
92 ) 92 instanceCount=2
93 setMeshData[Vec3f](mymesh1, "translate", @[newVec3f(0.3, 0.3)]) 93 )
94 setMeshData[Vec3f](mymesh1, "translate", @[newVec3f(0.3, 0.0)])
95 setMeshData[Vec3f](mymesh2, "translate", @[newVec3f(0.0, 0.3)])
96 setMeshData[Vec3f](mymesh3, "translate", @[newVec3f(-0.3, 0.0)])
97 setMeshData[Vec3f](mymesh4, "translate", @[newVec3f(0.0, -0.3), newVec3f(0.0, 0.5)])
94 result = Scene( 98 result = Scene(
95 name: "main", 99 name: "main",
96 root: newEntity("root", newEntity("triangle", mymesh4, mymesh3, mymesh2, mymesh1),) 100 root: newEntity("root", newEntity("triangle", mymesh4, mymesh3, mymesh2, mymesh1))
97 ) 101 )
98 102
103 proc scene_primitives(): Scene =
104 var r = rect(color="ff0000")
105 var t = tri(color="0000ff")
106 var c = circle(color="00ff00")
107 setMeshData[Vec3f](r, "translate", @[newVec3f(0.5, -0.3)])
108 setMeshData[Vec3f](t, "translate", @[newVec3f(0.3, 0.3)])
109 setMeshData[Vec3f](c, "translate", @[newVec3f(-0.3, 0.1)])
110 result = Scene(
111 name: "main",
112 root: newEntity("root", t, r, c)
113 )
99 114
100 when isMainModule: 115 when isMainModule:
101 # INIT ENGINE: 116 # INIT ENGINE:
102 # create instance 117 # create instance
103 var thewindow = createWindow("Test") 118 var thewindow = createWindow("Test")
119 # INIT RENDERER: 134 # INIT RENDERER:
120 const 135 const
121 vertexInput = @[ 136 vertexInput = @[
122 attr[Vec3f]("position", memoryLocation=VRAM), 137 attr[Vec3f]("position", memoryLocation=VRAM),
123 attr[Vec3f]("color", memoryLocation=VRAM), 138 attr[Vec3f]("color", memoryLocation=VRAM),
124 # attr[Vec3f]("translate", perInstance=true) 139 attr[Vec3f]("translate", perInstance=true)
125 ] 140 ]
126 vertexOutput = @[attr[Vec3f]("outcolor")] 141 vertexOutput = @[attr[Vec3f]("outcolor")]
127 uniforms = @[attr[float32]("time")] 142 uniforms = @[attr[float32]("time")]
128 fragOutput = @[attr[Vec4f]("color")] 143 fragOutput = @[attr[Vec4f]("color")]
129 vertexCode = compileGlslShader( 144 vertexCode = compileGlslShader(
130 stage=VK_SHADER_STAGE_VERTEX_BIT, 145 stage=VK_SHADER_STAGE_VERTEX_BIT,
131 inputs=vertexInput, 146 inputs=vertexInput,
132 uniforms=uniforms, 147 uniforms=uniforms,
133 outputs=vertexOutput, 148 outputs=vertexOutput,
134 body="""gl_Position = vec4(position, 1.0); outcolor = color * sin(Uniforms.time) * 0.5 + 0.5;""" 149 body="""gl_Position = vec4(position + translate, 1.0); outcolor = color;"""
135 ) 150 )
136 fragmentCode = compileGlslShader( 151 fragmentCode = compileGlslShader(
137 stage=VK_SHADER_STAGE_FRAGMENT_BIT, 152 stage=VK_SHADER_STAGE_FRAGMENT_BIT,
138 inputs=vertexOutput, 153 inputs=vertexOutput,
139 uniforms=uniforms, 154 uniforms=uniforms,
150 raise newException(Exception, "Unable to create swapchain") 165 raise newException(Exception, "Unable to create swapchain")
151 166
152 # INIT SCENE 167 # INIT SCENE
153 var time = initShaderGlobal("time", 0.0'f32) 168 var time = initShaderGlobal("time", 0.0'f32)
154 169
155 var thescene = scene_simple() 170 # var thescene = scene_simple()
171 # var thescene = scene_different_mesh_types()
172 var thescene = scene_primitives()
156 thescene.root.components.add time 173 thescene.root.components.add time
157 thescene.setupDrawables(renderPass) 174 thescene.setupDrawables(renderPass)
158 swapchain.setupUniforms(thescene) 175 swapchain.setupUniforms(thescene)
159 176
160 # MAINLOOP 177 # MAINLOOP