aboutsummaryrefslogtreecommitdiff
path: root/vendor
diff options
context:
space:
mode:
authorKarl Zylinski <karl@zylinski.se>2025-12-26 23:34:45 +0100
committerKarl Zylinski <karl@zylinski.se>2025-12-26 23:34:45 +0100
commit7dee25bdcc069bbb0ceb5d4a1ac1a9e3009bfb83 (patch)
tree2ba171e519dd2d8e65ba7f243c7e58e01083952a /vendor
parent7e39239907885447b73c8c03648a85554552f1bc (diff)
More allocator-aware webgl bindings and added more missing bindings.
Diffstat (limited to 'vendor')
-rw-r--r--vendor/wasm/WebGL/webgl.odin37
-rw-r--r--vendor/wasm/WebGL/webgl2.odin25
2 files changed, 61 insertions, 1 deletions
diff --git a/vendor/wasm/WebGL/webgl.odin b/vendor/wasm/WebGL/webgl.odin
index 1c3bda2e6..601071c3a 100644
--- a/vendor/wasm/WebGL/webgl.odin
+++ b/vendor/wasm/WebGL/webgl.odin
@@ -313,6 +313,43 @@ GetActiveAttrib :: proc {
GetActiveAttribAlloc,
}
+GetActiveUniformBuf :: proc "contextless" (program: Program, index: u32, name_buf: []byte) -> (info: ActiveInfo) {
+ foreign webgl {
+ @(link_name="GetActiveUniform")
+ _GetActiveUniform :: proc "contextless" (shader: Program, index: u32, size: ^int, type: ^Enum, name_buf: []byte, name_len: ^int) ---
+ }
+ name_len: int
+ _GetActiveUniform(program, index, &info.size, &info.type, name_buf, &name_len)
+ info.name = string(name_buf[:name_len])
+ return
+}
+
+GetActiveUniformAlloc :: proc(program: Program, index: u32, allocator: runtime.Allocator, loc := #caller_location) -> (info: ActiveInfo) {
+ foreign webgl {
+ @(link_name="GetActiveUniform")
+ _GetActiveUniform :: proc "contextless" (shader: Program, index: u32, size: ^int, type: ^Enum, name_buf: []byte, name_len: ^int) ---
+ }
+
+ name_len: int
+
+ // Passing {} to the buf but giving it a name_len ptr will write the needed len into that int
+ _GetActiveUniform(program, index, &info.size, &info.type, {}, &name_len)
+
+ if name_len > 0 {
+ name_buf := make([]byte, name_len, allocator, loc)
+ _GetActiveUniform(program, index, &info.size, &info.type, name_buf, &name_len)
+ assert(name_len == len(name_buf))
+ info.name = string(name_buf[:name_len])
+ }
+
+ return
+}
+
+GetActiveUniform :: proc {
+ GetActiveUniformBuf,
+ GetActiveUniformAlloc,
+}
+
GetProgramInfoLog :: proc "contextless" (program: Program, buf: []byte) -> string {
foreign webgl {
@(link_name="GetProgramInfoLog")
diff --git a/vendor/wasm/WebGL/webgl2.odin b/vendor/wasm/WebGL/webgl2.odin
index 66a739303..3494559a5 100644
--- a/vendor/wasm/WebGL/webgl2.odin
+++ b/vendor/wasm/WebGL/webgl2.odin
@@ -3,6 +3,7 @@ package webgl
foreign import "webgl2"
import "base:intrinsics"
+import "base:runtime"
import glm "core:math/linalg/glsl"
Query :: distinct u32
@@ -109,7 +110,7 @@ foreign webgl2 {
BindVertexArray :: proc(vertexArray: VertexArrayObject) ---
}
-GetActiveUniformBlockName :: proc(program: Program, uniformBlockIndex: i32, buf: []byte) -> string {
+GetActiveUniformBlockNameBuf :: proc(program: Program, uniformBlockIndex: i32, buf: []byte) -> string {
foreign webgl2 {
_GetActiveUniformBlockName :: proc "contextless" (program: Program, uniformBlockIndex: i32, buf: []byte, length: ^int) ---
}
@@ -118,6 +119,28 @@ GetActiveUniformBlockName :: proc(program: Program, uniformBlockIndex: i32, buf:
return string(buf[:n])
}
+GetActiveUniformBlockNameAlloc :: proc(program: Program, uniformBlockIndex: i32, allocator: runtime.Allocator, loc := #caller_location) -> string {
+ foreign webgl2 {
+ _GetActiveUniformBlockName :: proc "contextless" (program: Program, uniformBlockIndex: i32, buf: []byte, length: ^int) ---
+ }
+ n: int
+ _GetActiveUniformBlockName(program, uniformBlockIndex, {}, &n)
+
+ if n > 0 {
+ buf := make([]byte, n, allocator, loc)
+ _GetActiveUniformBlockName(program, uniformBlockIndex, buf, &n)
+ assert(n == len(buf))
+ return string(buf[:n])
+ }
+
+ return ""
+}
+
+GetActiveUniformBlockName :: proc {
+ GetActiveUniformBlockNameBuf,
+ GetActiveUniformBlockNameAlloc,
+}
+
Uniform1uiv :: proc "contextless" (location: i32, v: u32) {
Uniform1ui(location, v)