diff options
author | alaric <alaric@netmythos.org> | 2024-04-14 22:56:10 -0700 |
---|---|---|
committer | alaric <alaric@netmythos.org> | 2024-04-14 22:56:10 -0700 |
commit | bcde32b414b7bc8b2c175d611ec818a88cb183a2 (patch) | |
tree | 481151013228fb94c6f477fa9d2f8e11ad308d5b | |
parent | 72b43b36111f21d4625dfdb33b67a963ce23bcb8 (diff) | |
download | engine-bcde32b414b7bc8b2c175d611ec818a88cb183a2.tar.gz engine-bcde32b414b7bc8b2c175d611ec818a88cb183a2.zip |
Add support for float arrays in shaders
-rw-r--r-- | src/webgl.zig | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/webgl.zig b/src/webgl.zig index c4b7af8..934ae3c 100644 --- a/src/webgl.zig +++ b/src/webgl.zig @@ -7,7 +7,7 @@ const Mat4 = matrix.Matrix(f32, 4, 4); const Color = engine.Color; -const ShaderType = enum { vec2, vec3 }; +const ShaderType = enum { f32, vec2, vec3 }; const UniformInfo = struct { identifier: [:0]const u8, @@ -30,7 +30,7 @@ const UniformInfo = struct { const AttributeInfo = struct { identifier: [:0]const u8, shader_name: []const u8, - kind: enum { vec2, vec3, vec4 }, + kind: enum { f32, vec2, vec3, vec4 }, instance_divisor: ?u16 = null, }; @@ -48,6 +48,7 @@ pub const Buffer = struct { fn FillDataType(comptime shader_type: ShaderType) type { return switch (shader_type) { + .f32 => []const f32, .vec2 => []const [2]f32, .vec3 => []const [3]f32, }; @@ -62,6 +63,9 @@ pub const Buffer = struct { ) void { bindings.bindBuffer(target, self.handle); switch (kind) { + .f32 => { + bindings.bufferData(target, @ptrCast(vals.ptr), vals.len, usage_pattern); + }, .vec2 => { bindings.bufferData(target, @ptrCast(vals.ptr), vals.len * 2, usage_pattern); }, @@ -201,11 +205,12 @@ pub fn Program( bindings.enableVertexAttribArray(attr_handle); const size = switch (attr_info.kind) { + .f32 => 1, .vec2 => 2, .vec3, .vec4 => 3, }; const a_type = switch (attr_info.kind) { - .vec2, .vec3, .vec4 => .f32, + .f32, .vec2, .vec3, .vec4 => .f32, }; const normalize = .false; const stride = 0; |