Mercurial > games > semicongine
comparison old_tests/test_mesh.nim @ 1203:6360c8d17ce0 compiletime-tests
did: preprations to add rendering tests
author | sam <sam@basx.dev> |
---|---|
date | Mon, 15 Jul 2024 20:06:42 +0700 |
parents | tests/test_mesh.nim@114f395b9144 |
children |
comparison
equal
deleted
inserted
replaced
1202:a8864fe6fe6e | 1203:6360c8d17ce0 |
---|---|
1 import std/strformat | |
2 import semicongine | |
3 | |
4 const | |
5 MeshMaterial* = MaterialType( | |
6 name: "colored single texture material", | |
7 vertexAttributes: { | |
8 "position": Vec3F32, | |
9 "texcoord_0": Vec2F32, | |
10 }.toTable, | |
11 attributes: {"baseTexture": TextureType, "color": Vec4F32}.toTable | |
12 ) | |
13 | |
14 proc main() = | |
15 var scenes = [ | |
16 Scene(name: "Donut", meshes: LoadMeshes("donut.glb", MeshMaterial)[0].toSeq), | |
17 ] | |
18 | |
19 var engine = InitEngine("Test meshes") | |
20 const | |
21 shaderConfiguration = CreateShaderConfiguration( | |
22 name = "default shader", | |
23 inputs = [ | |
24 Attr[Vec3f]("position", memoryPerformanceHint = PreferFastRead), | |
25 Attr[uint16](MATERIALINDEX_ATTRIBUTE, memoryPerformanceHint = PreferFastRead, perInstance = true), | |
26 Attr[Vec2f]("texcoord_0", memoryPerformanceHint = PreferFastRead), | |
27 Attr[Mat4]("transform", memoryPerformanceHint = PreferFastWrite, perInstance = true), | |
28 ], | |
29 intermediates = [ | |
30 Attr[Vec4f]("vertexColor"), | |
31 Attr[Vec2f]("colorTexCoord"), | |
32 Attr[uint16]("materialIndexOut", noInterpolation = true) | |
33 ], | |
34 outputs = [Attr[Vec4f]("color")], | |
35 uniforms = [ | |
36 Attr[Mat4]("projection"), | |
37 Attr[Mat4]("view"), | |
38 Attr[Vec4f]("color", arrayCount = 4), | |
39 ], | |
40 samplers = [Attr[Texture]("baseTexture", arrayCount = 4)], | |
41 vertexCode = &""" | |
42 gl_Position = vec4(position, 1.0) * (transform * (Uniforms.view * Uniforms.projection)); | |
43 vertexColor = Uniforms.color[{MATERIALINDEX_ATTRIBUTE}]; | |
44 colorTexCoord = texcoord_0; | |
45 materialIndexOut = {MATERIALINDEX_ATTRIBUTE}; | |
46 """, | |
47 fragmentCode = "color = texture(baseTexture[materialIndexOut], colorTexCoord) * vertexColor;" | |
48 ) | |
49 engine.InitRenderer({MeshMaterial: shaderConfiguration}) | |
50 | |
51 for scene in scenes.mitems: | |
52 scene.AddShaderGlobal("projection", Unit4F32) | |
53 scene.AddShaderGlobal("view", Unit4F32) | |
54 engine.LoadScene(scene) | |
55 | |
56 var | |
57 size = 1'f32 | |
58 elevation = 0'f32 | |
59 azimut = 0'f32 | |
60 currentScene = 0 | |
61 | |
62 while engine.UpdateInputs() and not KeyIsDown(Escape): | |
63 if KeyWasPressed(`1`): | |
64 currentScene = 0 | |
65 elif KeyWasPressed(`2`): | |
66 currentScene = 1 | |
67 elif KeyWasPressed(`3`): | |
68 currentScene = 2 | |
69 elif KeyWasPressed(`4`): | |
70 currentScene = 3 | |
71 elif KeyWasPressed(`5`): | |
72 currentScene = 4 | |
73 elif KeyWasPressed(`6`): | |
74 currentScene = 5 | |
75 | |
76 if KeyWasPressed(NumberRowExtra3): | |
77 size = 0.3'f32 | |
78 elevation = 0'f32 | |
79 azimut = 0'f32 | |
80 | |
81 let ratio = engine.GetWindow().Size[0] / engine.GetWindow().Size[1] | |
82 size *= 1'f32 + MouseWheel() * 0.05 | |
83 azimut += MouseMove().x / 180'f32 | |
84 elevation -= MouseMove().y / 180'f32 | |
85 scenes[currentScene].SetShaderGlobal("projection", Perspective(PI / 2, ratio, -0.5, 1)) | |
86 scenes[currentScene].SetShaderGlobal( | |
87 "view", | |
88 Scale(size, size, size) * Rotate(elevation, NewVec3f(1, 0, 0)) * Rotate(azimut, Yf32) | |
89 ) | |
90 engine.RenderScene(scenes[currentScene]) | |
91 engine.Destroy() | |
92 | |
93 when isMainModule: | |
94 main() |