77 lines
2.1 KiB
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 },
|
|
);
|
|
}
|