aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralaric <alaric@netmythos.org>2024-04-14 22:56:10 -0700
committeralaric <alaric@netmythos.org>2024-04-14 22:56:10 -0700
commitbcde32b414b7bc8b2c175d611ec818a88cb183a2 (patch)
tree481151013228fb94c6f477fa9d2f8e11ad308d5b
parent72b43b36111f21d4625dfdb33b67a963ce23bcb8 (diff)
downloadengine-bcde32b414b7bc8b2c175d611ec818a88cb183a2.tar.gz
engine-bcde32b414b7bc8b2c175d611ec818a88cb183a2.zip
Add support for float arrays in shaders
-rw-r--r--src/webgl.zig11
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;