vulkan-tutorial 01
This commit is contained in:
60
src/Window.zig
Normal file
60
src/Window.zig
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
const Self = @This();
|
||||||
|
|
||||||
|
const std = @import("std");
|
||||||
|
const c = @import("c.zig");
|
||||||
|
const vk = @import("vk");
|
||||||
|
|
||||||
|
const BaseDispatch = vk.BaseWrapper(.{});
|
||||||
|
const InstanceDispatch = vk.InstanceWrapper(.{});
|
||||||
|
const DeviceDispatch = vk.DeviceWrapper(.{});
|
||||||
|
|
||||||
|
vkb: BaseDispatch,
|
||||||
|
vki: InstanceDispatch,
|
||||||
|
vkd: DeviceDispatch,
|
||||||
|
|
||||||
|
window: *c.GLFWwindow,
|
||||||
|
|
||||||
|
pub fn mainLoop(self: Self) void {
|
||||||
|
while (c.glfwWindowShouldClose(self.window) == 0) : (c.glfwPollEvents()) {
|
||||||
|
c.glfwSwapBuffers(self.window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn initWindow(self: *Self) !void {
|
||||||
|
c.glfwWindowHint(c.GLFW_CLIENT_API, c.GLFW_NO_API);
|
||||||
|
self.window = c.glfwCreateWindow(
|
||||||
|
1280,
|
||||||
|
720,
|
||||||
|
"Hello World",
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
) orelse return error.glfwCreateWindowFailed;
|
||||||
|
errdefer self.deinitWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn deinitWindow(self: Self) void {
|
||||||
|
c.glfwDestroyWindow(self.window);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn initVulkan(self: *Self) !void {
|
||||||
|
_ = self;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn deinitVulkan(self: Self) void {
|
||||||
|
_ = self;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init() !Self {
|
||||||
|
var self: Self = undefined;
|
||||||
|
try self.initWindow();
|
||||||
|
errdefer self.deinitWindow();
|
||||||
|
try self.initVulkan();
|
||||||
|
errdefer self.deinitVulkan();
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deinit(self: Self) void {
|
||||||
|
self.deinitWindow();
|
||||||
|
self.deinitVulkan();
|
||||||
|
}
|
124
src/main.zig
124
src/main.zig
@@ -1,75 +1,81 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
|
|
||||||
const c = @import("c.zig");
|
const c = @import("c.zig");
|
||||||
|
|
||||||
const vk = @import("vk");
|
const vk = @import("vk");
|
||||||
|
|
||||||
const BaseDispatch = vk.BaseWrapper(.{
|
const Window = @import("Window.zig");
|
||||||
.createInstance = true,
|
|
||||||
.getInstanceProcAddr = true,
|
|
||||||
});
|
|
||||||
|
|
||||||
const InstanceDispatch = vk.InstanceWrapper(.{
|
// const BaseDispatch = vk.BaseWrapper(.{
|
||||||
.destroyInstance = true,
|
// .createInstance = true,
|
||||||
});
|
// .getInstanceProcAddr = true,
|
||||||
|
// });
|
||||||
const Context = struct {
|
//
|
||||||
vkb: BaseDispatch,
|
// const InstanceDispatch = vk.InstanceWrapper(.{
|
||||||
vki: InstanceDispatch,
|
// .destroyInstance = true,
|
||||||
|
// });
|
||||||
instance: vk.Instance,
|
//
|
||||||
|
// const Context = struct {
|
||||||
pub fn init(allocator: std.mem.Allocator, app_name: [*:0]const u8, window: *c.GLFWwindow) !Context {
|
// vkb: BaseDispatch,
|
||||||
_ = allocator;
|
// vki: InstanceDispatch,
|
||||||
_ = window;
|
//
|
||||||
|
// instance: vk.Instance,
|
||||||
var self: Context = undefined;
|
//
|
||||||
self.vkb = try BaseDispatch.load(c.glfwGetInstanceProcAddress);
|
// pub fn init(allocator: std.mem.Allocator, app_name: [*:0]const u8, window: *c.GLFWwindow) !Context {
|
||||||
|
// _ = allocator;
|
||||||
var glfw_exts_count: u32 = 0;
|
// _ = window;
|
||||||
const glfw_exts = c.glfwGetRequiredInstanceExtensions(&glfw_exts_count);
|
//
|
||||||
|
// var self: Context = undefined;
|
||||||
const app_info = vk.ApplicationInfo{
|
// self.vkb = try BaseDispatch.load(c.glfwGetInstanceProcAddress);
|
||||||
.p_application_name = app_name,
|
//
|
||||||
.application_version = vk.makeApiVersion(0, 0, 0, 0),
|
// var glfw_exts_count: u32 = 0;
|
||||||
.p_engine_name = app_name,
|
// const glfw_exts = c.glfwGetRequiredInstanceExtensions(&glfw_exts_count);
|
||||||
.engine_version = vk.makeApiVersion(0, 0, 0, 0),
|
//
|
||||||
.api_version = vk.API_VERSION_1_2,
|
// const app_info = vk.ApplicationInfo{
|
||||||
};
|
// .p_application_name = app_name,
|
||||||
|
// .application_version = vk.makeApiVersion(0, 0, 0, 0),
|
||||||
self.instance = try self.vkb.createInstance(&.{
|
// .p_engine_name = app_name,
|
||||||
.p_application_info = &app_info,
|
// .engine_version = vk.makeApiVersion(0, 0, 0, 0),
|
||||||
.enabled_extension_count = glfw_exts_count,
|
// .api_version = vk.API_VERSION_1_2,
|
||||||
.pp_enabled_extension_names = @as([*]const [*:0]const u8, @ptrCast(glfw_exts)),
|
// };
|
||||||
}, null);
|
//
|
||||||
|
// self.instance = try self.vkb.createInstance(&.{
|
||||||
self.vki = try InstanceDispatch.load(self.instance, self.vkb.dispatch.vkGetInstanceProcAddr);
|
// .p_application_info = &app_info,
|
||||||
errdefer self.vki.destroyInstance(self.instance, null);
|
// .enabled_extension_count = glfw_exts_count,
|
||||||
|
// .pp_enabled_extension_names = @as([*]const [*:0]const u8, @ptrCast(glfw_exts)),
|
||||||
return self;
|
// }, null);
|
||||||
}
|
//
|
||||||
|
// self.vki = try InstanceDispatch.load(self.instance, self.vkb.dispatch.vkGetInstanceProcAddr);
|
||||||
pub fn deinit(self: Context) void {
|
// errdefer self.vki.destroyInstance(self.instance, null);
|
||||||
self.vki.destroyInstance(self.instance, null);
|
//
|
||||||
}
|
// return self;
|
||||||
};
|
// }
|
||||||
|
//
|
||||||
|
// pub fn deinit(self: Context) void {
|
||||||
|
// self.vki.destroyInstance(self.instance, null);
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
// var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
const allocator = gpa.allocator();
|
// const allocator = gpa.allocator();
|
||||||
|
|
||||||
if (c.glfwInit() != c.GLFW_TRUE) {
|
if (c.glfwInit() != c.GLFW_TRUE) {
|
||||||
return error.GlfwInitFailed;
|
return error.GlfwInitFailed;
|
||||||
}
|
}
|
||||||
defer c.glfwTerminate();
|
defer c.glfwTerminate();
|
||||||
|
|
||||||
const window: *c.GLFWwindow = c.glfwCreateWindow(1280, 720, "Hello World!", null, null) orelse return error.GlfwWindowFailed;
|
const window = try Window.init();
|
||||||
defer c.glfwDestroyWindow(window);
|
defer window.deinit();
|
||||||
|
|
||||||
const ctx = try Context.init(allocator, "content", window);
|
window.mainLoop();
|
||||||
defer ctx.deinit();
|
|
||||||
|
|
||||||
while (c.glfwWindowShouldClose(window) == 0) : (c.glfwPollEvents()) {
|
// c.glfwWindowHint(c.GLFW_CLIENT_API, c.GLFW_NO_API);
|
||||||
c.glfwSwapBuffers(window);
|
// const window: *c.GLFWwindow = c.glfwCreateWindow(1280, 720, "Hello World!", null, null) orelse return error.GlfwWindowFailed;
|
||||||
}
|
// defer c.glfwDestroyWindow(window);
|
||||||
|
|
||||||
|
// const ctx = try Context.init(allocator, "content", window);
|
||||||
|
// defer ctx.deinit();
|
||||||
|
|
||||||
|
// while (c.glfwWindowShouldClose(window) == 0) : (c.glfwPollEvents()) {
|
||||||
|
// c.glfwSwapBuffers(window);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user