annotate src/zamikongine/shader.nim @ 33:94c38e4b5782

did: refactoring, move more from make to nimscript
author Sam <sam@basx.dev>
date Sun, 15 Jan 2023 23:23:54 +0700
parents 9edca5dc4e93
children c3c963e7c1a6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
1 import std/strformat
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
2 import std/strutils
17
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
3 import std/tables
24
71bbe11d8de8 did: change shader compilation to run during program compilation, maybe add dynamic version later
Sam <sam@basx.dev>
parents: 22
diff changeset
4 import std/compilesettings
71bbe11d8de8 did: change shader compilation to run during program compilation, maybe add dynamic version later
Sam <sam@basx.dev>
parents: 22
diff changeset
5
17
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
6
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
7 import ./vulkan_helpers
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
8 import ./glsl_helpers
17
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
9 import ./vulkan
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
10 import ./vertex
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
11 import ./descriptor
28
b1b05d4efb52 big refactoring, part1
Sam <sam@basx.dev>
parents: 25
diff changeset
12 import ./math/vector
17
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
13
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
14 type
28
b1b05d4efb52 big refactoring, part1
Sam <sam@basx.dev>
parents: 25
diff changeset
15 AllowedUniformType = SomeNumber|Vec
b1b05d4efb52 big refactoring, part1
Sam <sam@basx.dev>
parents: 25
diff changeset
16 UniformSlot *[T:AllowedUniformType] = object
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
17 ShaderProgram*[VertexType, Uniforms] = object
17
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
18 entryPoint*: string
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
19 programType*: VkShaderStageFlagBits
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
20 shader*: VkPipelineShaderStageCreateInfo
28
b1b05d4efb52 big refactoring, part1
Sam <sam@basx.dev>
parents: 25
diff changeset
21 uniforms*: Uniforms
17
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
22
24
71bbe11d8de8 did: change shader compilation to run during program compilation, maybe add dynamic version later
Sam <sam@basx.dev>
parents: 22
diff changeset
23 func stage2string(stage: VkShaderStageFlagBits): string {.compileTime.} =
22
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
24 case stage
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
25 of VK_SHADER_STAGE_VERTEX_BIT: "vert"
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
26 of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT: "tesc"
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
27 of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT: "tese"
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
28 of VK_SHADER_STAGE_GEOMETRY_BIT: "geom"
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
29 of VK_SHADER_STAGE_FRAGMENT_BIT: "frag"
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
30 of VK_SHADER_STAGE_ALL_GRAPHICS: ""
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
31 of VK_SHADER_STAGE_COMPUTE_BIT: "comp"
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
32 of VK_SHADER_STAGE_ALL: ""
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
33
24
71bbe11d8de8 did: change shader compilation to run during program compilation, maybe add dynamic version later
Sam <sam@basx.dev>
parents: 22
diff changeset
34 proc compileGLSLToSPIRV(stage: VkShaderStageFlagBits, shaderSource: string, entrypoint: string): seq[uint32] {.compileTime.} =
22
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
35 let stagename = stage2string(stage)
25
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
36
28
b1b05d4efb52 big refactoring, part1
Sam <sam@basx.dev>
parents: 25
diff changeset
37 # TODO: compiles only on linux for now (because we don't have compile-time functionality in std/tempfile)
25
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
38 let (tmpfile, exitCode) = gorgeEx(command=fmt"mktemp --tmpdir shader_XXXXXXX.{stagename}")
22
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
39 if exitCode != 0:
25
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
40 raise newException(Exception, tmpfile)
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
41
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
42 let (output, exitCode_glsl) = gorgeEx(command=fmt"{querySetting(projectPath)}/glslangValidator --entry-point {entrypoint} -V --stdin -S {stagename} -o {tmpfile}", input=shaderSource)
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
43 if exitCode_glsl != 0:
22
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
44 raise newException(Exception, output)
25
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
45 let shaderbinary = staticRead tmpfile
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
46
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
47 let (output_rm, exitCode_rm) = gorgeEx(command=fmt"rm {tmpfile}")
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
48 if exitCode_rm != 0:
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
49 raise newException(Exception, output_rm)
8f290112718a fix: build from scratch not working, remove temp shader files from compilation
Sam <sam@basx.dev>
parents: 24
diff changeset
50
22
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
51 var i = 0
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
52 while i < shaderbinary.len:
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
53 result.add(
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
54 (uint32(shaderbinary[i + 0]) shl 0) or
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
55 (uint32(shaderbinary[i + 1]) shl 8) or
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
56 (uint32(shaderbinary[i + 2]) shl 16) or
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
57 (uint32(shaderbinary[i + 3]) shl 24)
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
58 )
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
59 i += 4
b45a5d338cd0 did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
Sam <sam@basx.dev>
parents: 19
diff changeset
60
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
61 proc initShaderProgram*[VertexType, Uniforms](device: VkDevice, programType: static VkShaderStageFlagBits, shader: static string, entryPoint: static string="main"): ShaderProgram[VertexType, Uniforms] =
17
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
62 result.entryPoint = entryPoint
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
63 result.programType = programType
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
64
24
71bbe11d8de8 did: change shader compilation to run during program compilation, maybe add dynamic version later
Sam <sam@basx.dev>
parents: 22
diff changeset
65 const constcode = compileGLSLToSPIRV(programType, shader, entryPoint)
71bbe11d8de8 did: change shader compilation to run during program compilation, maybe add dynamic version later
Sam <sam@basx.dev>
parents: 22
diff changeset
66 var code = constcode
17
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
67 var createInfo = VkShaderModuleCreateInfo(
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
68 sType: VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
69 codeSize: uint(code.len * sizeof(uint32)),
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
70 pCode: if code.len > 0: addr(code[0]) else: nil,
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
71 )
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
72 var shaderModule: VkShaderModule
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
73 checkVkResult vkCreateShaderModule(device, addr(createInfo), nil, addr(shaderModule))
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
74
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
75 result.shader = VkPipelineShaderStageCreateInfo(
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
76 sType: VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
77 stage: programType,
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
78 module: shaderModule,
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
79 pName: cstring(result.entryPoint), # entry point for shader
b40466fa446a add: vertex basics, some refactoring
Sam <sam@basx.dev>
parents:
diff changeset
80 )
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
81
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
82 func generateVertexShaderCode*[VertexType, Uniforms](
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
83 shaderBody: static string = "",
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
84 entryPoint: static string = "main",
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
85 glslVersion: static string = "450"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
86 ): string {.compileTime.} =
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
87 var lines: seq[string]
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
88 lines.add "#version " & glslVersion
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
89 lines.add "layout(row_major) uniform;"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
90 lines.add generateGLSLUniformDeclarations[Uniforms]()
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
91 lines.add generateGLSLVertexDeclarations[VertexType]()
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
92 lines.add "layout(location = 0) out vec3 fragColor;"
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
93 lines.add "void " & entryPoint & "() {"
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
94
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
95 var hasPosition = 0
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
96 var hasColor = 0
28
b1b05d4efb52 big refactoring, part1
Sam <sam@basx.dev>
parents: 25
diff changeset
97 for name, value in VertexType().fieldPairs:
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
98 when typeof(value) is PositionAttribute:
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
99 let glsltype = getGLSLType[getAttributeType(value)]()
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
100 lines.add &" {glsltype} in_position = " & name & ";"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
101 if getAttributeType(value) is Vec2:
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
102 lines.add " vec4 out_position = vec4(in_position, 0.0, 1.0);"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
103 elif getAttributeType(value) is Vec3:
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
104 lines.add " vec4 out_position = vec4(in_position, 1.0);"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
105 elif getAttributeType(value) is Vec4:
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
106 lines.add " vec4 out_position = in_position;"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
107 hasPosition += 1
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
108 when typeof(value) is ColorAttribute:
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
109 let glsltype = getGLSLType[getAttributeType(value)]()
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
110 lines.add &" {glsltype} in_color = " & name & ";"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
111 lines.add &" {glsltype} out_color = in_color;";
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
112 hasColor += 1
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
113
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
114 lines.add shaderBody
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
115 lines.add " gl_Position = out_position;"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
116 lines.add " fragColor = out_color;"
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
117 lines.add "}"
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
118 if hasPosition != 1:
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
119 raise newException(Exception, fmt"VertexType needs to have exactly one attribute of type PositionAttribute (has {hasPosition})")
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
120 if hasColor != 1:
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
121 raise newException(Exception, fmt"VertexType needs to have exactly one attribute of type ColorAttribute (has {hasColor})")
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
122 return lines.join("\n")
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
123
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
124 func generateFragmentShaderCode*[VertexType](
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
125 shaderBody: static string = "",
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
126 entryPoint: static string = "main",
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
127 glslVersion: static string = "450"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
128 ): string {.compileTime.} =
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
129 var lines: seq[string]
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
130 lines.add "#version " & glslVersion
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
131 lines.add "layout(row_major) uniform;"
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
132 lines.add "layout(location = 0) in vec3 fragColor;"
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
133 lines.add "layout(location = 0) out vec4 outColor;"
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
134 lines.add "void " & entryPoint & "() {"
32
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
135 lines.add " vec3 in_color = fragColor;"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
136 lines.add " vec3 out_color = in_color;"
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
137 lines.add shaderBody
9edca5dc4e93 add: working implementation of uniforms
Sam <sam@basx.dev>
parents: 28
diff changeset
138 lines.add " outColor = vec4(out_color, 1.0);"
19
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
139 lines.add "}"
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
140
b55d6ecde79d did: introduce scene graph, meshs and generic vertex buffers
Sam <sam@basx.dev>
parents: 17
diff changeset
141 return lines.join("\n")