//! ---------------------------------------------------- //! `🗲` Vulkan Surface `🗲` //! ---------------------------------------------------- const std = @import("std"); const vk = @import("vulkan"); const Instance = @import("../instance.zig"); const Window = @import("../../root.zig").Window; const Self = @This(); // // FIELDS // raw: *vk.VkSurfaceKHR_T, /// ---------------------------------------------------- /// ---------------------------------------------------- pub fn init( instance: *Instance, window: Window, ) !Self { const surface: *vk.VkSurfaceKHR_T = blk: { var raw: vk.VkSurfaceKHR = null; switch (window) { .xlib => |v| { var info: vk.VkXlibSurfaceCreateInfoKHR = .{ .sType = vk.VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR, .window = v.window, .dpy = @ptrCast(v.display), }; if (vk.vkCreateXlibSurfaceKHR(instance.raw, &info, null, &raw) != vk.VK_SUCCESS) { return error.FailedToCreateXlibSurfaceKHR; } break :blk raw.?; }, else => return error.NotImplementedYet, } return error.FailedToCreateSurface; }; return .{ .raw = surface, }; } /// ---------------------------------------------------- /// ---------------------------------------------------- pub fn deinit(self: *Self, instance: *Instance) void { vk.vkDestroySurfaceKHR(instance.raw, self.raw, null); }