aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2025-09-16 16:02:52 +0000
committers-ol <s+removethis@s-ol.nu>2025-09-16 16:02:52 +0000
commiteff88416045dfe70b2c5e17a12f2722c2e419f0b (patch)
treeb59bcf3e8099b468c10f2468f0f65cf36a734845
parentbuild.zig: remove 'lib' prefix from ffmpeg libs (diff)
downloadglsl-view-eff88416045dfe70b2c5e17a12f2722c2e419f0b.tar.gz
glsl-view-eff88416045dfe70b2c5e17a12f2722c2e419f0b.zip
TSVSource: fix initialization in thread
-rw-r--r--src/tsv.zig44
1 files changed, 29 insertions, 15 deletions
diff --git a/src/tsv.zig b/src/tsv.zig
index 7a121d7..2f44c65 100644
--- a/src/tsv.zig
+++ b/src/tsv.zig
@@ -56,18 +56,6 @@ pub const TSVSource = struct {
};
errdefer allocator.free(self.name);
- const guard = c.gl_client_find_image_data(get_or_init_client(), name, false) orelse return error.notFound;
- defer c.gl_client_image_data_guard_destroy(guard);
-
- const metadata = c.gl_client_image_data_guard_read(guard) orelse return error.tsvError;
- self.source.texture.allocate(
- @intCast(metadata.*.width),
- @intCast(metadata.*.height),
- 0,
- c.GL_RGBA8,
- );
-
- self.update();
self.thread = try gl.Thread.init(allocator, constants, update_loop, .{self});
return &self.source;
@@ -82,17 +70,43 @@ pub const TSVSource = struct {
}
fn update_loop(self: *TSVSource) !void {
+ _ = c.gl_client_initialize_external_gl();
+ const client = c.gl_client_new_with_server_launch(
+ c.VK_SERVER_DEFAULT_SOCKET_PATH,
+ 1000,
+ c.VK_SERVER_EXECUTABLE,
+ c.VK_SERVER_DEFAULT_LOCKFILE_PATH,
+ c.VK_SERVER_DEFAULT_SOCKET_PATH,
+ c.VK_SERVER_DEFAULT_SHMEM_PREFIX,
+ 2000,
+ 2000,
+ 2000,
+ 2000,
+ 2000,
+ ) orelse unreachable;
+
+ const guard = c.gl_client_find_image_data(client, self.name, false) orelse return error.notFound;
+ defer c.gl_client_image_data_guard_destroy(guard);
+
+ const metadata = c.gl_client_image_data_guard_read(guard) orelse return error.tsvError;
+ self.source.texture.allocate(
+ @intCast(metadata.*.width),
+ @intCast(metadata.*.height),
+ 0,
+ c.GL_RGBA8,
+ );
+
while (!self.thread.quit) {
- self.update();
+ self.update(client);
c.glFlush();
try std.Thread.yield();
}
}
- fn update(self: *TSVSource) void {
+ fn update(self: *TSVSource, client: *c.GlClient) void {
if (!self.stream.shouldStep()) return;
_ = c.gl_client_recv_image(
- get_or_init_client(),
+ client,
self.name.ptr,
self.source.texture.id,
@intFromEnum(self.source.texture.type),