109 lines
2.5 KiB
C++
109 lines
2.5 KiB
C++
|
|
#include "imgui.h"
|
|
#include "imgui_impl_sdl3.h"
|
|
#include "imgui_impl_sdlrenderer3.h"
|
|
#include <cstdlib>
|
|
#include <SDL3/SDL.h>
|
|
|
|
#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;
|
|
}
|