#include #include #include #include #include #include #include #include using namespace deimos; static LogApi* log_api; static AllocatorApi* allocator_api; static OsApi* os_api; static VulkanBackendApi* vulkan_backend_api; int main(int /* argc */, char* /* argv */[]) { auto* api_registry = InitializeGlobalApiRegistry(); log_api = api_registry->Get(); allocator_api = api_registry->Get(); os_api = api_registry->Get(); log_api->LogInfo("Base APIs registered"); RegisterVulkanLoaderApi(api_registry); RegisterVulkanBackendApi(api_registry); vulkan_backend_api = api_registry->Get(); OsWindow* window{}; { auto s = os_api->window->Create("Deimos", 1280, 720); if (!s.ok()) { log_api->LogError("Window error: $", s); return 1; } window = s.value(); } IVulkanBackend* vulkan = nullptr; { StatusOr s = vulkan_backend_api->CreateBackend(allocator_api->system, window); if (!s.ok()) { log_api->LogError("Vulkan initialization error: $", s); return 1; } vulkan = s.value(); log_api->LogInfo("Vulkan backend created"); } IRenderBackend* render = vulkan->AsRenderBackend(); RenderSwapchain* swapchain = nullptr; { auto s = render->CreateSwapchain(); if (!s.ok()) { log_api->LogError("Swapchain creation error: $", s); return 1; } swapchain = s.value(); log_api->LogInfo("Swapchain created"); } while (!os_api->window->QuitRequested(window)) { os_api->window->Update(window); render->BeginFrame(); render->EndFrame(); } log_api->LogInfo("Goodbye"); return 0; }