diff options
| author | gingerBill <bill@gingerbill.org> | 2022-05-21 15:34:12 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2022-05-21 15:34:12 +0100 |
| commit | d84d2f85e82f04fd5eb3e7169fec0a9d9171caf6 (patch) | |
| tree | 20394fd4b9c527335302bd3bce19a7cddaac8640 | |
| parent | 10f1d8c6043f679f3ecd167997af01b8627e5e75 (diff) | |
Add WebGL helper (`CreateProgramHelper`)
| -rw-r--r-- | vendor/wasm/WebGL/webgl_helpers.odin | 49 |
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 + +} |