From 9700ada0797cf3c02e0f56d28536bb49c82fe67b Mon Sep 17 00:00:00 2001 From: oxmox Date: Sun, 12 Feb 2023 13:39:48 +0100 Subject: [PATCH] add an imgui demo app + cmake cleanup --- src/CMakeLists.txt | 18 +++++++---- src/dp_imgui_demo.cc | 77 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 src/dp_imgui_demo.cc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6342d9c..ceb4c5d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,23 +1,22 @@ +set(DP_WARN_FLAGS -Wall -Wextra -Wpedantic) + # Source: log.c by rxi (https://github.com/rxi/log.c) add_library(logc log.c) target_compile_features(logc PRIVATE c_std_11) target_compile_definitions(logc PRIVATE -DLOG_USE_COLOR) -target_compile_options(logc INTERFACE "-ffile-prefix-map=${CMAKE_SOURCE_DIR}=." PRIVATE "-Wall" "-Wextra") +target_compile_options(logc INTERFACE -ffile-prefix-map=${CMAKE_SOURCE_DIR}=. PRIVATE ${DP_WARN_FLAGS}) find_package(Threads) - add_library(dp_common dp_common.c) target_compile_features(dp_common PRIVATE c_std_11) -target_compile_options(dp_common PUBLIC "-Wall" "-Wextra") +target_compile_options(dp_common PUBLIC ${DP_WARN_FLAGS}) # spread warning flags target_link_libraries(dp_common PUBLIC logc PUBLIC nng PUBLIC Threads::Threads ) -find_package(SDL2 REQUIRED) - add_executable(doompanning doompanning.cc) target_compile_features(doompanning PRIVATE cxx_std_17) target_link_libraries(doompanning @@ -25,8 +24,15 @@ target_link_libraries(doompanning PRIVATE imgui ) +add_executable(dp_imgui_demo dp_imgui_demo.cc) +target_compile_features(dp_imgui_demo PRIVATE cxx_std_17) +target_link_libraries(dp_imgui_demo + PRIVATE dp_common + PRIVATE imgui + ) + add_executable(doomsim doomsim.cc) target_compile_features(doomsim PRIVATE cxx_std_17) target_link_libraries(doomsim PRIVATE dp_common -) +) \ No newline at end of file diff --git a/src/dp_imgui_demo.cc b/src/dp_imgui_demo.cc new file mode 100644 index 0000000..46d3a89 --- /dev/null +++ b/src/dp_imgui_demo.cc @@ -0,0 +1,77 @@ +#include +#include +#include +#include + +#include "dp_common.h" + +void dp_sdl_fatal(const char *const msg) +{ + log_fatal("%s: %s", msg, SDL_GetError()); + abort(); +} + +int main(int argc, char *argv[]) +{ + (void) argc; + (void) argv; + + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER)) + dp_sdl_fatal("SDL_Init"); + +#ifdef SDL_HINT_IME_SHOW_UI + SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1"); +#endif + + const auto windowFlags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI; + auto window = SDL_CreateWindow("doompanning imgui demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, windowFlags); + if (!window) + dp_sdl_fatal("SDL_CreateWindow"); + + auto renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED); + + if (!renderer) + dp_sdl_fatal("SDL_CreateRenderer"); + + IMGUI_CHECKVERSION(); + ImGui::CreateContext(); + ImGui::StyleColorsDark(); + ImGui_ImplSDL2_InitForSDLRenderer(window, renderer); + ImGui_ImplSDLRenderer_Init(renderer); + + bool show_demo_window = true; + ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); + + bool done = false; + + while (!done) + { + SDL_Event event; + while (SDL_PollEvent(&event)) + { + ImGui_ImplSDL2_ProcessEvent(&event); + + if (event.type == SDL_QUIT) + done = true; + if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window)) + done = true; + } + + // Start the Dear ImGui frame + ImGui_ImplSDLRenderer_NewFrame(); + ImGui_ImplSDL2_NewFrame(); + ImGui::NewFrame(); + + if (show_demo_window) + ImGui::ShowDemoWindow(&show_demo_window); + + // Rendering + ImGui::Render(); + SDL_SetRenderDrawColor(renderer, (Uint8)(clear_color.x * 255), (Uint8)(clear_color.y * 255), (Uint8)(clear_color.z * 255), (Uint8)(clear_color.w * 255)); + SDL_RenderClear(renderer); + ImGui_ImplSDLRenderer_RenderDrawData(ImGui::GetDrawData()); + SDL_RenderPresent(renderer); + } + + return 0; +} \ No newline at end of file