vulkan-zig/src/main.zig

77 lines
2.1 KiB
Zig

const std = @import("std");
const vk = @import("vulkan");
const sdl = @import("sdl2");
const zm = @import("zmath");
const VulkanRenderer = @import("vulkan_renderer.zig").VulkanRenderer;
const Vector3 = @import("utilities.zig").Vector3;
pub fn main() !void {
const window = try initWindow();
defer sdl.quit();
defer sdl.vulkan.unloadLibrary();
defer window.destroy();
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
var vulkan_renderer = try VulkanRenderer.init(window, allocator);
defer vulkan_renderer.deinit();
var angle: f32 = 0.0;
var now: u64 = sdl.getPerformanceCounter();
var last: u64 = 0;
var delta_time: f32 = 0.0;
mainLoop: while (true) {
while (sdl.pollEvent()) |ev| {
switch (ev) {
.quit => break :mainLoop,
.key_down => |key| {
if (key.keycode == sdl.Keycode.escape) {
break :mainLoop;
}
},
else => {},
}
}
last = now;
now = sdl.getPerformanceCounter();
delta_time = @as(f32, @floatFromInt(now - last)) * 1000.0 / @as(f32, @floatFromInt(now));
angle += 10.0 * delta_time;
if (angle > 360.0) {
angle -= 360.0;
}
var first_model = zm.rotationZ(angle);
var second_model = zm.rotationZ(-angle * 2);
first_model = zm.mul(first_model, zm.translation(0.0, 0.0, -2.5));
second_model = zm.mul(second_model, zm.translation(0.0, 0.0, -4.5));
try vulkan_renderer.updateModel(0, first_model);
try vulkan_renderer.updateModel(1, second_model);
try vulkan_renderer.draw();
}
}
fn initWindow() !sdl.Window {
sdl.init(.{ .timer = true, .video = true, .events = true }) catch {
std.log.err("Failed to initialize SDL2", .{});
};
return try sdl.createWindow(
"Vulkan Test",
.{ .centered = {} },
.{ .centered = {} },
800,
600,
.{ .vis = .shown, .context = .vulkan },
);
}