55 lines
1.6 KiB
Zig
55 lines
1.6 KiB
Zig
const std = @import("std");
|
|
const vk = @import("vulkan");
|
|
|
|
const device = @import("device.zig");
|
|
|
|
pub const SyncContext = struct {
|
|
image_available_semaphore: vk.Semaphore,
|
|
render_finished_semaphore: vk.Semaphore,
|
|
in_flight_fence: vk.Fence,
|
|
|
|
pub fn destroy(self: *const SyncContext, ldc: *const device.LogicalDeviceContext) void {
|
|
ldc.vkd.destroyFence(ldc.device, self.in_flight_fence, null);
|
|
ldc.vkd.destroySemaphore(ldc.device, self.render_finished_semaphore, null);
|
|
ldc.vkd.destroySemaphore(ldc.device, self.image_available_semaphore, null);
|
|
}
|
|
};
|
|
|
|
pub fn initSyncObjects(ldc: device.LogicalDeviceContext) !SyncContext {
|
|
const semaphore_create_info = vk.SemaphoreCreateInfo{};
|
|
|
|
const image_available_semaphore = try ldc.vkd.createSemaphore(
|
|
ldc.device,
|
|
&semaphore_create_info,
|
|
null,
|
|
);
|
|
errdefer ldc.vkd.destroySemaphore(ldc.device, image_available_semaphore, null);
|
|
|
|
const render_finished_semaphore = try ldc.vkd.createSemaphore(
|
|
ldc.device,
|
|
&semaphore_create_info,
|
|
null,
|
|
);
|
|
errdefer ldc.vkd.destroySemaphore(ldc.device, render_finished_semaphore, null);
|
|
|
|
const fence_create_info = vk.FenceCreateInfo{
|
|
.flags = .{
|
|
.signaled_bit = true,
|
|
},
|
|
};
|
|
|
|
const in_flight_fence = try ldc.vkd.createFence(
|
|
ldc.device,
|
|
&fence_create_info,
|
|
null,
|
|
);
|
|
|
|
std.debug.print("created synchronization objects\n", .{});
|
|
|
|
return .{
|
|
.image_available_semaphore = image_available_semaphore,
|
|
.render_finished_semaphore = render_finished_semaphore,
|
|
.in_flight_fence = in_flight_fence,
|
|
};
|
|
}
|