From d84d2f85e82f04fd5eb3e7169fec0a9d9171caf6 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 21 May 2022 15:34:12 +0100 Subject: [PATCH] Add WebGL helper (`CreateProgramHelper`) --- vendor/wasm/WebGL/webgl_helpers.odin | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 vendor/wasm/WebGL/webgl_helpers.odin 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 + +}