From: Brendan Hansen Date: Tue, 19 Oct 2021 19:01:38 +0000 (-0500) Subject: made webgl easier to use X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=813aabc748ac277949c300bcc28fbe8a6a3d966c;p=onyx.git made webgl easier to use --- diff --git a/modules/immediate_mode/gl_utils.onyx b/modules/immediate_mode/gl_utils.onyx index 67185ebf..a4b90c69 100644 --- a/modules/immediate_mode/gl_utils.onyx +++ b/modules/immediate_mode/gl_utils.onyx @@ -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 diff --git a/modules/webgl2/webgl2.js b/modules/webgl2/webgl2.js index 6964651b..32c28af2 100644 --- a/modules/webgl2/webgl2.js +++ b/modules/webgl2/webgl2.js @@ -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); diff --git a/modules/webgl2/webgl2.onyx b/modules/webgl2/webgl2.onyx index 24141a39..6d45cd14 100644 --- a/modules/webgl2/webgl2.onyx +++ b/modules/webgl2/webgl2.onyx @@ -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" --- diff --git a/src/wasm_output.c b/src/wasm_output.c index 305a8b0c..69e28f06 100644 --- a/src/wasm_output.c +++ b/src/wasm_output.c @@ -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;