#include "imgui.h" #include "imgui_impl_sdl3.h" #include "imgui_impl_sdlrenderer3.h" #include #include #include "editor.hpp" SDL_Window *window = nullptr; SDL_Renderer *renderer = nullptr; void quit(int code) { editor_quit(); ImGui_ImplSDLRenderer3_Shutdown(); ImGui_ImplSDL3_Shutdown(); ImGui::DestroyContext(); if (window) SDL_DestroyRenderer(renderer); if (renderer) SDL_DestroyWindow(window); SDL_Quit(); exit(code); } void die(const char *fmt, ...) { va_list ap; va_start(ap, fmt); SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_ERROR, fmt, ap); va_end(ap); quit(1); } int main(int argc, char **argv) { if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMEPAD)) die("Error: SDL_Init(): %s", SDL_GetError()); window = SDL_CreateWindow("Yeti3D World Editor", 1280, 720, SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIDDEN | SDL_WINDOW_MAXIMIZED); if (!window) die("Error: SDL_CreateWindow(): %s", SDL_GetError()); renderer = SDL_CreateRenderer(window, nullptr); SDL_SetRenderVSync(renderer, 1); if (!renderer) die("Error: SDL_CreateRenderer(): %s", SDL_GetError()); SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); SDL_ShowWindow(window); IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO &io = ImGui::GetIO(); io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; io.IniFilename = nullptr; io.LogFilename = nullptr; ImGui::StyleColorsDark(); ImGui_ImplSDL3_InitForSDLRenderer(window, renderer); ImGui_ImplSDLRenderer3_Init(renderer); ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); editor_init(); while (true) { SDL_Event event; while (SDL_PollEvent(&event)) { ImGui_ImplSDL3_ProcessEvent(&event); if (event.type == SDL_EVENT_QUIT) quit(0); if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED && event.window.windowID == SDL_GetWindowID(window)) quit(0); } if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED) { SDL_Delay(10); continue; } ImGui_ImplSDLRenderer3_NewFrame(); ImGui_ImplSDL3_NewFrame(); ImGui::NewFrame(); editor_main(); ImGui::Render(); SDL_SetRenderScale(renderer, io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y); SDL_SetRenderDrawColorFloat(renderer, clear_color.x, clear_color.y, clear_color.z, clear_color.w); SDL_RenderClear(renderer); ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData(), renderer); SDL_RenderPresent(renderer); } quit(0); return 0; }