aboutsummaryrefslogtreecommitdiffstats
path: root/src/control.zig
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2025-03-04 20:15:04 +0000
committers-ol <s+removethis@s-ol.nu>2025-03-04 20:15:04 +0000
commit4ee4361915619ef309092ec5f26aa8d2b841f23f (patch)
tree7aa16b24f7572d8a9cc5057f23c9b0265b648e2f /src/control.zig
parentautomatically add GLSL 3.30 header (diff)
downloadglsl-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.zig28
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,
};