v/main.cpp

105 lines
2.2 KiB
C++

#include <print>
#include <vector>
#include <fstream>
#include <cassert>
#define VOLK_IMPLEMENTATION
#include <Volk/volk.h>
#define VMA_IMPLEMENTATION
#include <vma/vk_mem_alloc.h>
#include <GLFW/glfw3.h>
#include "renderer/init.h"
#include "renderer/renderer.h"
#include "renderer/texture.h"
#define STB_IMAGE_IMPLEMENTATION
#include <stb_image.h>
GLFWwindow *window;
int32_t window_width = 640;
int32_t window_height = 480;
uint64_t t = 0;
uint64_t accumulator = 0;
uint64_t dt = 0;
int main() {
if (!glfwInit())
return -1;
dt = (uint64_t) (1.0 / 60.0 * glfwGetTimerFrequency());
std::println("Hello, Sailor!");
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
window = glfwCreateWindow(window_width, window_height, "Hello World", nullptr, nullptr);
if (!window) {
glfwTerminate();
return -1;
}
createInstance(window);
createSurface(window);
createDevice();
createSwapchain(window);
slang::createGlobalSession(slangGlobalSession.writeRef());
Renderer renderer(window);
texture_manager.load("assets/boy.png", renderer);
uint64_t current_time = glfwGetTimerValue();
while (!glfwWindowShouldClose(window)) {
uint64_t new_time = glfwGetTimerValue();
uint64_t frame_time = new_time - current_time;
current_time = new_time;
accumulator += frame_time;
glfwPollEvents();
uint64_t updates = 0;
while (accumulator >= dt) {
accumulator -= dt;
t += dt;
updates++;
}
// std::println("Updates: {}", updates);
// std::println("frame time: {}", ((double) (frame_time) / (double) glfwGetTimerFrequency()));
renderer.begin_frame();
double f = 15.0 * (t / (double) glfwGetTimerFrequency());
renderer.submit_quad(
{
100.0 + 10.0 * glm::sin(f),
100.0 - 10.0 * glm::cos(f),
},
{100.0, 100.0});
renderer.submit_quad({400.0, 400.0}, {20.0, 20.0});
// renderer.submit_sprite();
renderer.end_frame();
}
vkDeviceWaitIdle(device);
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}