54 lines
1.5 KiB
Zig
54 lines
1.5 KiB
Zig
|
|
//! ----------------------------------------------------
|
||
|
|
//! `🗲` 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);
|
||
|
|
}
|