aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-05-21 15:34:12 +0100
committergingerBill <bill@gingerbill.org>2022-05-21 15:34:12 +0100
commitd84d2f85e82f04fd5eb3e7169fec0a9d9171caf6 (patch)
tree20394fd4b9c527335302bd3bce19a7cddaac8640
parent10f1d8c6043f679f3ecd167997af01b8627e5e75 (diff)
Add WebGL helper (`CreateProgramHelper`)
-rw-r--r--vendor/wasm/WebGL/webgl_helpers.odin49
1 files changed, 49 insertions, 0 deletions
diff --git a/vendor/wasm/WebGL/webgl_helpers.odin b/vendor/wasm/WebGL/webgl_helpers.odin
new file mode 100644
index 000000000..d86086783
--- /dev/null
+++ b/vendor/wasm/WebGL/webgl_helpers.odin
@@ -0,0 +1,49 @@
+package webgl
+
+import "core:fmt"
+
+CreateProgramHelper :: proc(vs_sources, fs_sources: []string) -> (program: Program, ok: bool) {
+ ok = true
+ log: [1024]byte
+
+ vs := CreateShader(VERTEX_SHADER)
+ fs := CreateShader(FRAGMENT_SHADER)
+ defer DeleteShader(vs)
+ defer DeleteShader(fs)
+ ShaderSource(vs, vs_sources)
+ ShaderSource(fs, fs_sources)
+ CompileShader(vs)
+ if GetShaderiv(vs, COMPILE_STATUS) == 0 {
+ err := GetShaderInfoLog(vs, log[:])
+ fmt.eprintln("Vertex shader did not compile successfully", err)
+ ok = false
+ return
+ }
+
+ CompileShader(fs)
+ if GetShaderiv(fs, COMPILE_STATUS) == 0 {
+ err := GetShaderInfoLog(fs, log[:])
+ fmt.eprintln("Fragment shader did not compile successfully", err)
+ ok = false
+ return
+ }
+
+ program = CreateProgram()
+ defer if !ok do DeleteProgram(program)
+
+ AttachShader(program, vs)
+ AttachShader(program, fs)
+ LinkProgram(program)
+ DetachShader(program, vs)
+ DetachShader(program, fs)
+
+ if GetProgramParameter(program, LINK_STATUS) == 0 {
+ err := GetProgramInfoLog(program, log[:])
+ fmt.eprintln("Shader program did not link successfully", err)
+ ok = false
+ return
+ }
+
+ return
+
+}