diff options
| author | s-ol <s+removethis@s-ol.nu> | 2025-03-04 20:15:04 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2025-03-04 20:15:04 +0000 |
| commit | 4ee4361915619ef309092ec5f26aa8d2b841f23f (patch) | |
| tree | 7aa16b24f7572d8a9cc5057f23c9b0265b648e2f /src/control.zig | |
| parent | automatically add GLSL 3.30 header (diff) | |
| download | glsl-view-4ee4361915619ef309092ec5f26aa8d2b841f23f.tar.gz glsl-view-4ee4361915619ef309092ec5f26aa8d2b841f23f.zip | |
load videoes/textures relative to project_root
Diffstat (limited to 'src/control.zig')
| -rw-r--r-- | src/control.zig | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/control.zig b/src/control.zig index 9482015..3c44e36 100644 --- a/src/control.zig +++ b/src/control.zig @@ -86,7 +86,15 @@ fn set_array( } } -fn set_texture(progress: std.Progress.Node, dest: *?gl.Texture, texture_type: gl.Texture.Type, argc: c_int, argv: [*c][*c]c.lo_arg, types: []const u8) !void { +fn set_texture( + progress: std.Progress.Node, + project_root: std.fs.Dir, + dest: *?gl.Texture, + texture_type: gl.Texture.Type, + argc: c_int, + argv: [*c][*c]c.lo_arg, + types: []const u8, +) !void { if (argc != 1 or types[0] != 's') return error.invalidType; if (dest.*) |old| { @@ -94,8 +102,12 @@ fn set_texture(progress: std.Progress.Node, dest: *?gl.Texture, texture_type: gl dest.* = null; } + var buffer: [1024]u8 = undefined; + const filepath = try project_root.realpathZ(@ptrCast(&argv[0].*.s), buffer[0..]); + buffer[filepath.len] = 0; + dest.* = gl.Texture.create(texture_type); - try video.loadVideo(progress, @ptrCast(&argv[0].*.s), &dest.*.?); + try video.loadVideo(progress, @ptrCast(filepath), &dest.*.?); } pub const ControlServer = struct { @@ -103,13 +115,14 @@ pub const ControlServer = struct { reload_requested: bool, cache: *gl.UniformCache, + config: *cfg.Config, progress: std.Progress.Node, allocator: std.mem.Allocator, pub fn init( allocator: std.mem.Allocator, progress: std.Progress.Node, - config: cfg.OSCConfig, + config: *cfg.Config, cache: *gl.UniformCache, ) !*ControlServer { var self: *ControlServer = try allocator.create(ControlServer); @@ -118,11 +131,12 @@ pub const ControlServer = struct { .reload_requested = false, .cache = cache, + .config = config, .progress = progress, .allocator = allocator, }; - switch (config) { + switch (config.osc) { .Manual => |conf| { var port = [_]u8{0} ** 6; _ = std.fmt.formatIntBuf(port[0..], conf.port, 10, .lower, std.fmt.FormatOptions{}); @@ -247,18 +261,18 @@ pub const ControlServer = struct { .SAMPLER_2D_SHADOW, .INT_SAMPLER_2D, .UNSIGNED_INT_SAMPLER_2D, - => |val| set_texture(self.progress, val, .TEXTURE_2D, argc, argv, types), + => |val| set_texture(self.progress, self.config.project_root, val, .TEXTURE_2D, argc, argv, types), .SAMPLER_2D_ARRAY, .SAMPLER_2D_ARRAY_SHADOW, .INT_SAMPLER_2D_ARRAY, .UNSIGNED_INT_SAMPLER_2D_ARRAY, - => |val| set_texture(self.progress, val, .TEXTURE_2D_ARRAY, argc, argv, types), + => |val| set_texture(self.progress, self.config.project_root, val, .TEXTURE_2D_ARRAY, argc, argv, types), .SAMPLER_3D, .INT_SAMPLER_3D, .UNSIGNED_INT_SAMPLER_3D, - => |val| set_texture(self.progress, val, .TEXTURE_3D, argc, argv, types), + => |val| set_texture(self.progress, self.config.project_root, val, .TEXTURE_3D, argc, argv, types), else => error.uniformNotSupported, }; |
