Browse Source

Add WebGL helper (`CreateProgramHelper`)

gingerBill 3 years ago
parent
commit
d84d2f85e8
1 changed files with 49 additions and 0 deletions
  1. 49 0
      vendor/wasm/WebGL/webgl_helpers.odin

+ 49 - 0
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
+
+}