made webgl easier to use
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 19 Oct 2021 19:01:38 +0000 (14:01 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 19 Oct 2021 19:01:38 +0000 (14:01 -0500)
modules/immediate_mode/gl_utils.onyx
modules/webgl2/webgl2.js
modules/webgl2/webgl2.onyx
src/wasm_output.c

index 67185ebfa8b1d1ba07d1165a16143c7b6ed39ea1..a4b90c69f9720b76d97a3ce1405548133f13356c 100644 (file)
@@ -47,37 +47,6 @@ Shader :: struct {
         texture_uniform = gl.getUniformLocation(program, "u_texture");
         view_uniform    = gl.getUniformLocation(program, "u_view");
         world_uniform   = gl.getUniformLocation(program, "u_world");
-
-        compile_shader :: (source: str, shader_type: gl.GLenum) -> (gl.GLShader, bool) {
-            shader := gl.createShader(shader_type);
-            gl.shaderSource(shader, source);
-            gl.compileShader(shader);
-
-            success := true;
-            if gl.getShaderParameter(shader, gl.COMPILE_STATUS) == 0 {
-                println("Error compiling shader.");
-                gl.printShaderInfoLog(shader);
-                success = false;
-            }
-
-            return shader, success;
-        }
-
-        link_program :: (vertex_shader: gl.GLShader, fragment_shader: gl.GLShader) -> (gl.GLProgram, bool) {
-            program := gl.createProgram();
-            gl.attachShader(program, vertex_shader);
-            gl.attachShader(program, fragment_shader);
-            gl.linkProgram(program);
-
-            success := true;
-            if gl.getProgramParameter(program, gl.LINK_STATUS) == 0 {
-                println("Error linking program.");
-                gl.printProgramInfoLog(program);
-                success = false;
-            }
-
-            return program, success;
-        }
     }
 
     free :: (use shader: ^Shader) {
@@ -85,3 +54,33 @@ Shader :: struct {
     }
 }
 
+compile_shader :: (source: str, shader_type: gl.GLenum) -> (gl.GLShader, bool) {
+    shader := gl.createShader(shader_type);
+    gl.shaderSource(shader, source);
+    gl.compileShader(shader);
+
+    success := true;
+    if gl.getShaderParameter(shader, gl.COMPILE_STATUS) == 0 {
+        println("Error compiling shader.");
+        gl.printShaderInfoLog(shader);
+        success = false;
+    }
+
+    return shader, success;
+}
+
+link_program :: (vertex_shader: gl.GLShader, fragment_shader: gl.GLShader) -> (gl.GLProgram, bool) {
+    program := gl.createProgram();
+    gl.attachShader(program, vertex_shader);
+    gl.attachShader(program, fragment_shader);
+    gl.linkProgram(program);
+
+    success := true;
+    if gl.getProgramParameter(program, gl.LINK_STATUS) == 0 {
+        println("Error linking program.");
+        gl.printProgramInfoLog(program);
+        success = false;
+    }
+
+    return program, success;
+}
\ No newline at end of file
index 6964651b794447977e0903c6ac98bc01548a917f..32c28af204d5cc4e9961fb7c4b8535ee397d36eb 100644 (file)
@@ -284,6 +284,14 @@ window.ONYX_MODULES.push({
     uniform3i(loc, x, y, z) { gl.uniform3i(uniformlocs[loc], x, y, z); },
     uniform4f(loc, x, y, z, w) { gl.uniform4f(uniformlocs[loc], x, y, z, w); },
     uniform4i(loc, x, y, z, w) { gl.uniform4i(uniformlocs[loc], x, y, z, w); },
+    uniform1iv(loc, valueptr, valuelen) { gl.uniform1iv(uniformlocs[loc], new Int32Array(window.ONYX_MEMORY.buffer,   valueptr, valuelen)); },
+    uniform1fv(loc, valueptr, valuelen) { gl.uniform1fv(uniformlocs[loc], new Float32Array(window.ONYX_MEMORY.buffer, valueptr, valuelen)); },
+    uniform2iv(loc, valueptr, valuelen) { gl.uniform2iv(uniformlocs[loc], new Int32Array(window.ONYX_MEMORY.buffer,   valueptr, valuelen * 2)); },
+    uniform2fv(loc, valueptr, valuelen) { gl.uniform2fv(uniformlocs[loc], new Float32Array(window.ONYX_MEMORY.buffer, valueptr, valuelen * 2)); },
+    uniform3iv(loc, valueptr, valuelen) { gl.uniform3iv(uniformlocs[loc], new Int32Array(window.ONYX_MEMORY.buffer,   valueptr, valuelen * 3)); },
+    uniform3fv(loc, valueptr, valuelen) { gl.uniform3fv(uniformlocs[loc], new Float32Array(window.ONYX_MEMORY.buffer, valueptr, valuelen * 3)); },
+    uniform4iv(loc, valueptr, valuelen) { gl.uniform4iv(uniformlocs[loc], new Int32Array(window.ONYX_MEMORY.buffer,   valueptr, valuelen * 4)); },
+    uniform4fv(loc, valueptr, valuelen) { gl.uniform4fv(uniformlocs[loc], new Float32Array(window.ONYX_MEMORY.buffer, valueptr, valuelen * 4)); },
     uniformMatrix2(loc, transpose, valueptr) {
         const data = new Float32Array(window.ONYX_MEMORY.buffer, valueptr, 4);
         gl.uniformMatrix2fv(uniformlocs[loc], transpose, data);
index 24141a39b7a33c09c45754be05ebf5563d2b3ed0..6d45cd14618eab194c105e1a146413a110481af5 100644 (file)
@@ -844,6 +844,14 @@ uniform3f                      :: (loc: GLUniformLocation, x: GLfloat, y: GLfloa
 uniform3i                      :: (loc: GLUniformLocation, x: GLint, y: GLint, z: GLint) -> void #foreign "gl" "uniform3i" ---
 uniform4f                      :: (loc: GLUniformLocation, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat) -> void #foreign "gl" "uniform4f" ---
 uniform4i                      :: (loc: GLUniformLocation, x: GLint, y: GLint, z: GLint, w: GLint) -> void #foreign "gl" "uniform4i" ---
+uniform1iv                     :: (loc: GLUniformLocation, v: [] void) -> void #foreign "gl" "uniform1iv" ---
+uniform1fv                     :: (loc: GLUniformLocation, v: [] void) -> void #foreign "gl" "uniform1fv" ---
+uniform2iv                     :: (loc: GLUniformLocation, v: [] void) -> void #foreign "gl" "uniform2iv" ---
+uniform2fv                     :: (loc: GLUniformLocation, v: [] void) -> void #foreign "gl" "uniform2fv" ---
+uniform3iv                     :: (loc: GLUniformLocation, v: [] void) -> void #foreign "gl" "uniform3iv" ---
+uniform3fv                     :: (loc: GLUniformLocation, v: [] void) -> void #foreign "gl" "uniform3fv" ---
+uniform4iv                     :: (loc: GLUniformLocation, v: [] void) -> void #foreign "gl" "uniform4iv" ---
+uniform4fv                     :: (loc: GLUniformLocation, v: [] void) -> void #foreign "gl" "uniform4fv" ---
 uniformMatrix2                 :: (loc: GLUniformLocation, transpose: GLboolean, value: GLMat2) -> void #foreign "gl" "uniformMatrix2" ---
 uniformMatrix3                 :: (loc: GLUniformLocation, transpose: GLboolean, value: GLMat3) -> void #foreign "gl" "uniformMatrix3" ---
 uniformMatrix4                 :: (loc: GLUniformLocation, transpose: GLboolean, value: GLMat4) -> void #foreign "gl" "uniformMatrix4" ---
index 305a8b0c50e687a96e20745f2faf3975fafb1919..69e28f066ef655e2f80e8d0dbc33bc5208e836b9 100644 (file)
@@ -633,7 +633,7 @@ static i32 output_datasection(OnyxWasmModule* module, bh_buffer* buff) {
     bh_buffer_append(&vec_buff, leb, leb_len);
 
     bh_arr_each(WasmDatum, datum, module->data) {
-        if (datum->data == NULL) continue;
+        assert(datum->data != NULL);
 
         i32 memory_flags = 0x00;
         if (context.options->use_multi_threading) memory_flags |= 0x01;