Mercurial > games > semicongine
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/old_tests/test_mesh.nim Mon Jul 15 20:06:42 2024 +0700 @@ -0,0 +1,94 @@ +import std/strformat +import semicongine + +const + MeshMaterial* = MaterialType( + name: "colored single texture material", + vertexAttributes: { + "position": Vec3F32, + "texcoord_0": Vec2F32, + }.toTable, + attributes: {"baseTexture": TextureType, "color": Vec4F32}.toTable + ) + +proc main() = + var scenes = [ + Scene(name: "Donut", meshes: LoadMeshes("donut.glb", MeshMaterial)[0].toSeq), + ] + + var engine = InitEngine("Test meshes") + const + shaderConfiguration = CreateShaderConfiguration( + name = "default shader", + inputs = [ + Attr[Vec3f]("position", memoryPerformanceHint = PreferFastRead), + Attr[uint16](MATERIALINDEX_ATTRIBUTE, memoryPerformanceHint = PreferFastRead, perInstance = true), + Attr[Vec2f]("texcoord_0", memoryPerformanceHint = PreferFastRead), + Attr[Mat4]("transform", memoryPerformanceHint = PreferFastWrite, perInstance = true), + ], + intermediates = [ + Attr[Vec4f]("vertexColor"), + Attr[Vec2f]("colorTexCoord"), + Attr[uint16]("materialIndexOut", noInterpolation = true) + ], + outputs = [Attr[Vec4f]("color")], + uniforms = [ + Attr[Mat4]("projection"), + Attr[Mat4]("view"), + Attr[Vec4f]("color", arrayCount = 4), + ], + samplers = [Attr[Texture]("baseTexture", arrayCount = 4)], + vertexCode = &""" + gl_Position = vec4(position, 1.0) * (transform * (Uniforms.view * Uniforms.projection)); + vertexColor = Uniforms.color[{MATERIALINDEX_ATTRIBUTE}]; + colorTexCoord = texcoord_0; + materialIndexOut = {MATERIALINDEX_ATTRIBUTE}; + """, + fragmentCode = "color = texture(baseTexture[materialIndexOut], colorTexCoord) * vertexColor;" + ) + engine.InitRenderer({MeshMaterial: shaderConfiguration}) + + for scene in scenes.mitems: + scene.AddShaderGlobal("projection", Unit4F32) + scene.AddShaderGlobal("view", Unit4F32) + engine.LoadScene(scene) + + var + size = 1'f32 + elevation = 0'f32 + azimut = 0'f32 + currentScene = 0 + + while engine.UpdateInputs() and not KeyIsDown(Escape): + if KeyWasPressed(`1`): + currentScene = 0 + elif KeyWasPressed(`2`): + currentScene = 1 + elif KeyWasPressed(`3`): + currentScene = 2 + elif KeyWasPressed(`4`): + currentScene = 3 + elif KeyWasPressed(`5`): + currentScene = 4 + elif KeyWasPressed(`6`): + currentScene = 5 + + if KeyWasPressed(NumberRowExtra3): + size = 0.3'f32 + elevation = 0'f32 + azimut = 0'f32 + + let ratio = engine.GetWindow().Size[0] / engine.GetWindow().Size[1] + size *= 1'f32 + MouseWheel() * 0.05 + azimut += MouseMove().x / 180'f32 + elevation -= MouseMove().y / 180'f32 + scenes[currentScene].SetShaderGlobal("projection", Perspective(PI / 2, ratio, -0.5, 1)) + scenes[currentScene].SetShaderGlobal( + "view", + Scale(size, size, size) * Rotate(elevation, NewVec3f(1, 0, 0)) * Rotate(azimut, Yf32) + ) + engine.RenderScene(scenes[currentScene]) + engine.Destroy() + +when isMainModule: + main()