Files
WickedEngine/Samples/Example_ImGui_Docking/main_SDL2.cpp
T
Dennis Brakhane 2ebee47c4b allocate application on heap instead of stack and delete it
This prevents problems with Vulkan debug layers that don't like
Vulkan calls to happen during C++ app shutdown.
2026-01-19 14:16:17 +01:00

94 lines
3.4 KiB
C++

#include "stdafx.h"
#include "sdl2.h"
#include "ImGui/imgui_impl_sdl.h"
Example_ImGui* exampleImGui;
int sdl_loop()
{
bool quit = false;
while (!quit)
{
exampleImGui->Run();
SDL_Event event;
while(SDL_PollEvent(&event)){
switch(event.type){
case SDL_QUIT:
quit = true;
break;
case SDL_WINDOWEVENT:
switch (event.window.event) {
case SDL_WINDOWEVENT_CLOSE: // exit tests
quit = true;
break;
case SDL_WINDOWEVENT_RESIZED:
// Tells the engine to reload window configuration (size and dpi)
exampleImGui->SetWindow(exampleImGui->window);
break;
case SDL_WINDOWEVENT_FOCUS_LOST: //TODO
exampleImGui->is_window_active = false;
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
exampleImGui->is_window_active = true;
if (wi::shadercompiler::GetRegisteredShaderCount() > 0)
{
std::thread([] {
wi::backlog::post("[Shader check] Started checking " + std::to_string(wi::shadercompiler::GetRegisteredShaderCount()) + " registered shaders for changes...");
if (wi::shadercompiler::CheckRegisteredShadersOutdated())
{
wi::backlog::post("[Shader check] Changes detected, initiating reload...");
wi::eventhandler::Subscribe_Once(wi::eventhandler::EVENT_THREAD_SAFE_POINT, [](uint64_t userdata) {
wi::renderer::ReloadShaders();
});
}
else
{
wi::backlog::post("[Shader check] All up to date");
}
}).detach();
}
break;
default:
break;
}
default:
break;
}
wi::input::sdlinput::ProcessEvent(event);
ImGui_ImplSDL2_ProcessEvent(&event);
}
}
return 0;
}
int main(int argc, char *argv[])
{
// TODO: Place code here.
exampleImGui = new Example_ImGui();
wi::arguments::Parse(argc, argv);
sdl2::sdlsystem_ptr_t system = sdl2::make_sdlsystem(SDL_INIT_EVERYTHING | SDL_INIT_EVENTS);
if (*system) {
wilog_error("Error creating SDL2 system");
}
sdl2::window_ptr_t window = sdl2::make_window(
"Wicked Engine Tests",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
1280, 800,
SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE);
if (!window) {
wilog_error("Error creating window");
}
exampleImGui->SetWindow(window.get());
int ret = sdl_loop();
delete exampleImGui;
SDL_Quit();
return ret;
}