diff options
| author | s-ol <s+removethis@s-ol.nu> | 2025-09-16 16:02:52 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2025-09-16 16:02:52 +0000 |
| commit | eff88416045dfe70b2c5e17a12f2722c2e419f0b (patch) | |
| tree | b59bcf3e8099b468c10f2468f0f65cf36a734845 | |
| parent | build.zig: remove 'lib' prefix from ffmpeg libs (diff) | |
| download | glsl-view-eff88416045dfe70b2c5e17a12f2722c2e419f0b.tar.gz glsl-view-eff88416045dfe70b2c5e17a12f2722c2e419f0b.zip | |
TSVSource: fix initialization in thread
| -rw-r--r-- | src/tsv.zig | 44 |
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), |
