Mercurial > games > semicongine
comparison examples/E02_squares.nim @ 797:812b5e28f441
did: update examples to work with improved scenegraph/material api, notice removed complexity!
author | Sam <sam@basx.dev> |
---|---|
date | Tue, 05 Sep 2023 00:28:35 +0700 |
parents | 754835bf175e |
children | c66503386e8b |
comparison
equal
deleted
inserted
replaced
796:8084252b807a | 797:812b5e28f441 |
---|---|
1 import std/sequtils | 1 import std/sequtils |
2 import std/tables | |
2 import std/random | 3 import std/random |
3 | 4 |
4 import ../src/semicongine | 5 import ../src/semicongine |
5 | 6 |
6 | 7 |
40 indices[squareIndex * 2 + 0] = [uint16(vertIndex + 0), uint16(vertIndex + 1), uint16(vertIndex + 2)] | 41 indices[squareIndex * 2 + 0] = [uint16(vertIndex + 0), uint16(vertIndex + 1), uint16(vertIndex + 2)] |
41 indices[squareIndex * 2 + 1] = [uint16(vertIndex + 2), uint16(vertIndex + 3), uint16(vertIndex + 0)] | 42 indices[squareIndex * 2 + 1] = [uint16(vertIndex + 2), uint16(vertIndex + 3), uint16(vertIndex + 0)] |
42 | 43 |
43 | 44 |
44 const | 45 const |
45 inputs = @[ | 46 shaderConfiguration = createShaderConfiguration( |
46 attr[Vec3f]("position"), | 47 inputs=[ |
47 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), | 48 attr[Vec3f]("position"), |
48 attr[uint32]("index"), | 49 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), |
49 ] | 50 attr[uint32]("index"), |
50 intermediate = @[attr[Vec4f]("outcolor")] | 51 ], |
51 uniforms = @[attr[float32]("time")] | 52 intermediates=[attr[Vec4f]("outcolor")], |
52 outputs = @[attr[Vec4f]("color")] | 53 uniforms=[attr[float32]("time")], |
53 (vertexCode, fragmentCode) = compileVertexFragmentShaderSet( | 54 outputs=[attr[Vec4f]("color")], |
54 inputs=inputs, | |
55 intermediate=intermediate, | |
56 outputs=outputs, | |
57 uniforms=uniforms, | |
58 vertexCode=""" | 55 vertexCode=""" |
59 float pos_weight = index / 100.0; // add some gamma correction? | 56 float pos_weight = index / 100.0; // add some gamma correction? |
60 float t = sin(Uniforms.time * 0.5) * 0.5 + 0.5; | 57 float t = sin(Uniforms.time * 0.5) * 0.5 + 0.5; |
61 float v = min(1, max(0, pow(pos_weight - t, 2))); | 58 float v = min(1, max(0, pow(pos_weight - t, 2))); |
62 v = pow(1 - v, 3000); | 59 v = pow(1 - v, 3000); |
67 ) | 64 ) |
68 var squaremesh = newMesh( | 65 var squaremesh = newMesh( |
69 positions=vertices, | 66 positions=vertices, |
70 indices=indices, | 67 indices=indices, |
71 colors=colors, | 68 colors=colors, |
69 material=Material(name: "default") | |
72 ) | 70 ) |
73 setMeshData[uint32](squaremesh, "index", iValues.toSeq) | 71 squaremesh[].initVertexAttribute("index", iValues.toSeq) |
74 | 72 |
75 var myengine = initEngine("Squares") | 73 var myengine = initEngine("Squares") |
76 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode)) | 74 myengine.initRenderer({"default": shaderConfiguration}.toTable) |
77 | 75 |
78 var scene = newScene("scene", newEntity("scene", [], newEntity("squares", {"mesh": Component(squaremesh)}))) | 76 var scene = Scene(name: "scene", meshes: @[squaremesh]) |
79 myengine.addScene(scene, inputs, @[], transformAttribute="") | |
80 scene.addShaderGlobal("time", 0.0'f32) | 77 scene.addShaderGlobal("time", 0.0'f32) |
78 myengine.addScene(scene) | |
81 while myengine.updateInputs() == Running and not myengine.keyWasPressed(Escape): | 79 while myengine.updateInputs() == Running and not myengine.keyWasPressed(Escape): |
82 setShaderGlobal(scene, "time", getShaderGlobal[float32](scene, "time") + 0.0005'f) | 80 scene.setShaderGlobal("time", getShaderGlobal[float32](scene, "time") + 0.0005'f) |
83 myengine.renderScene(scene) | 81 myengine.renderScene(scene) |
84 | 82 |
85 myengine.destroy() | 83 myengine.destroy() |