Mercurial > games > semicongine
comparison tests/test_mesh.nim @ 730:88ab3e6dcaa0
add: simpler shader construction
| author | Sam <sam@basx.dev> |
|---|---|
| date | Sun, 28 May 2023 18:36:11 +0700 |
| parents | 7b72da29ad8d |
| children | da0bd61abe91 |
comparison
equal
deleted
inserted
replaced
| 729:7b72da29ad8d | 730:88ab3e6dcaa0 |
|---|---|
| 22 attr[Vec3f]("position", memoryPerformanceHint=PreferFastRead), | 22 attr[Vec3f]("position", memoryPerformanceHint=PreferFastRead), |
| 23 attr[uint8]("material", memoryPerformanceHint=PreferFastRead), | 23 attr[uint8]("material", memoryPerformanceHint=PreferFastRead), |
| 24 attr[Vec2f]("texcoord_0", memoryPerformanceHint=PreferFastRead), | 24 attr[Vec2f]("texcoord_0", memoryPerformanceHint=PreferFastRead), |
| 25 attr[Mat4]("transform", memoryPerformanceHint=PreferFastWrite, perInstance=true), | 25 attr[Mat4]("transform", memoryPerformanceHint=PreferFastWrite, perInstance=true), |
| 26 ] | 26 ] |
| 27 vertexOutput = @[ | 27 intermediate = @[ |
| 28 attr[Vec4f]("vertexColor"), | 28 attr[Vec4f]("vertexColor"), |
| 29 attr[Vec2f]("colorTexCoord"), | 29 attr[Vec2f]("colorTexCoord"), |
| 30 attr[uint8]("materialId", noInterpolation=true) | 30 attr[uint8]("materialId", noInterpolation=true) |
| 31 ] | 31 ] |
| 32 fragOutput = @[attr[Vec4f]("color")] | 32 fragOutput = @[attr[Vec4f]("color")] |
| 33 uniforms = @[ | 33 uniforms = @[ |
| 34 attr[Mat4]("projection"), | 34 attr[Mat4]("projection"), |
| 35 attr[Mat4]("view"), | 35 attr[Mat4]("view"), |
| 36 attr[Vec4f]("baseColorFactor", arrayCount=4), | 36 attr[Vec4f]("baseColorFactor", arrayCount=4), |
| 37 ] | 37 ] |
| 38 samplers = @[ | 38 samplers = @[attr[Sampler2DType]("baseColorTexture", arrayCount=4)] |
| 39 attr[Sampler2DType]("baseColorTexture", arrayCount=4), | 39 (vertexCode, fragmentCode) = compileVertexFragmentShaderSet( |
| 40 ] | |
| 41 vertexCode = compileGlslShader( | |
| 42 stage=VK_SHADER_STAGE_VERTEX_BIT, | |
| 43 inputs=vertexInput, | 40 inputs=vertexInput, |
| 44 outputs=vertexOutput, | 41 intermediate=intermediate, |
| 42 outputs=fragOutput, | |
| 45 uniforms=uniforms, | 43 uniforms=uniforms, |
| 46 samplers=samplers, | 44 samplers=samplers, |
| 47 main=""" | 45 vertexCode=""" |
| 48 gl_Position = vec4(position, 1.0) * (transform * Uniforms.view * Uniforms.projection); | 46 gl_Position = vec4(position, 1.0) * (transform * Uniforms.view * Uniforms.projection); |
| 49 vertexColor = Uniforms.baseColorFactor[material]; | 47 vertexColor = Uniforms.baseColorFactor[material]; |
| 50 colorTexCoord = texcoord_0; | 48 colorTexCoord = texcoord_0; |
| 51 materialId = material; | 49 materialId = material; |
| 52 """ | 50 """, |
| 53 ) | 51 fragmentCode=""" |
| 54 fragmentCode = compileGlslShader( | |
| 55 stage=VK_SHADER_STAGE_FRAGMENT_BIT, | |
| 56 inputs=vertexOutput, | |
| 57 outputs=fragOutput, | |
| 58 uniforms=uniforms, | |
| 59 samplers=samplers, | |
| 60 main=""" | |
| 61 vec4 col[4] = vec4[4](vec4(1, 0, 0, 1), vec4(0, 1, 0, 1), vec4(0, 0, 1, 1), vec4(1, 1, 1, 1)); | 52 vec4 col[4] = vec4[4](vec4(1, 0, 0, 1), vec4(0, 1, 0, 1), vec4(0, 0, 1, 1), vec4(1, 1, 1, 1)); |
| 62 color = texture(baseColorTexture[materialId], colorTexCoord) * vertexColor; | 53 color = texture(baseColorTexture[materialId], colorTexCoord) * vertexColor; |
| 63 """ | 54 """ |
| 64 ) | 55 ) |
| 65 engine.setRenderer(engine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode, clearColor=newVec4f(0, 0, 0, 1))) | 56 engine.setRenderer(engine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode, clearColor=newVec4f(0, 0, 0, 1))) |
