Mercurial > games > semicongine
diff old_tests/test_materials.nim @ 1227:4d97cfc4888b
merge
author | sam <sam@basx.dev> |
---|---|
date | Wed, 17 Jul 2024 23:45:43 +0700 |
parents | 6360c8d17ce0 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/old_tests/test_materials.nim Wed Jul 17 23:45:43 2024 +0700 @@ -0,0 +1,79 @@ +import std/times +import std/tables + +import semicongine + +let + sampler = Sampler(magnification: VK_FILTER_NEAREST, minification: VK_FILTER_NEAREST) + (RT, WT, PT) = (ToRGBA("A51931").AsPixel, ToRGBA("F4F5F8").AsPixel, ToRGBA("2D2A4A").AsPixel) + thai = Image[RGBAPixel](width: 7, height: 5, imagedata: @[ + RT, RT, RT, RT, RT, RT, RT, + WT, WT, WT, WT, WT, WT, WT, + PT, PT, PT, PT, PT, PT, PT, + WT, WT, WT, WT, WT, WT, WT, + RT, RT, RT, RT, RT, RT, RT, + ]) + swiss = LoadImage[RGBAPixel]("flag.png") + doubleTextureMaterial = MaterialType( + name: "Double texture", + vertexAttributes: { + "position": Vec3F32, + "uv": Vec2F32, + }.toTable, + attributes: {"tex1": TextureType, "tex2": TextureType}.toTable + ) + material = InitMaterialData( + theType = doubleTextureMaterial, + name = "swiss-thai", + attributes = { + "tex1": InitDataList(@[Texture(colorImage: thai, sampler: sampler, isGrayscale: false)]), + "tex2": InitDataList(@[Texture(colorImage: swiss, sampler: sampler, isGrayscale: false)]), + } + ) + +proc main() = + var flag = Rect() + flag.material = material + var scene = Scene(name: "main", meshes: @[flag]) + scene.AddShaderGlobalArray("test2", @[NewVec4f(), NewVec4f()]) + + var engine = InitEngine("Test materials") + + const + shaderConfiguration1 = CreateShaderConfiguration( + name = "shader 1", + inputs = [ + Attr[Vec3f]("position", memoryPerformanceHint = PreferFastRead), + Attr[Vec2f]("uv", memoryPerformanceHint = PreferFastRead), + ], + intermediates = [ + Attr[Vec2f]("uvout"), + ], + uniforms = [Attr[Vec4f]("test2", arrayCount = 2)], + samplers = @[ + Attr[Texture]("tex1"), + Attr[Texture]("tex2"), + ], + outputs = [Attr[Vec4f]("color")], + vertexCode = """ + gl_Position = vec4(position.x, position.y + sin(Uniforms.test2[1].x) / Uniforms.test2[1].x * 0.5, position.z, 1.0); + uvout = uv;""", + fragmentCode = """ + float d = sin(Uniforms.test2[0].x) * 0.5 + 0.5; + color = texture(tex1, uvout) * (1 - d) + texture(tex2, uvout) * d; + """, + ) + engine.InitRenderer({ + doubleTextureMaterial: shaderConfiguration1, + }) + engine.LoadScene(scene) + var t = cpuTime() + while engine.UpdateInputs() and not KeyIsDown(Escape): + var d = float32(cpuTime() - t) + SetShaderGlobalArray(scene, "test2", @[NewVec4f(d), NewVec4f(d * 2)]) + engine.RenderScene(scene) + engine.Destroy() + + +when isMainModule: + main()