From d6829aa9cd8e784b0f968a55597bff4767b093ae Mon Sep 17 00:00:00 2001 From: oxmox Date: Sun, 12 Feb 2023 03:32:02 +0100 Subject: [PATCH] ctrl: write some broken sdl and imgui code --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 7 +++++++ src/doompanning.cc | 52 ++++++++++++++++++++++++++++++++++++++++++---- src/doomsim.cc | 6 +++--- 4 files changed, 59 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 81bd120..0d7d5bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) ## Create binaries in the root of the build directory set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "ON") add_subdirectory(external) add_subdirectory(src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e114770..c4621b8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,6 +6,7 @@ target_compile_options(logc INTERFACE "-ffile-prefix-map=${CMAKE_SOURCE_DIR}=." 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") @@ -15,10 +16,16 @@ target_link_libraries(dp_common PUBLIC Threads::Threads ) +find_package(SDL2 REQUIRED) + add_executable(doompanning doompanning.cc) target_compile_features(doompanning PRIVATE cxx_std_17) +#target_compile_options(doompanning PRIVATE ${IMGUI_CFLAGS}) +#target_include_directories(doompanning PRIVATE ${IMGUI_INCLUDE_DIRS}) target_link_libraries(doompanning PRIVATE dp_common + #PRIVATE ${IMGUI_LIBRARIES} + PRIVATE SDL2::SDL2-static ) add_executable(doomsim doomsim.cc) diff --git a/src/doompanning.cc b/src/doompanning.cc index a98b360..a418642 100644 --- a/src/doompanning.cc +++ b/src/doompanning.cc @@ -1,14 +1,36 @@ #include #include -#include -#include + +//#include +//#include +#include + #include "dp_common.h" #include "log.h" +void dp_sdl_fatal(const char *const msg) +{ + log_fatal("%s: %s", SDL_GetError()); + abort(); +} + static const size_t NumDooms = 3; -int doom_controller_loop(nng_socket pubSock, nng_socket subSock) +int doom_controller_loop(nng_socket pubSock, nng_socket subSock, SDL_Window *window, SDL_Renderer *renderer) { + bool done = false; + + while (!done) + { + SDL_Event event; + while (SDL_PollEvent(&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; + } + } return 0; } @@ -25,7 +47,29 @@ int main(int argc, char *argv[]) auto pubSock = make_ctrl_pub(CtrlUrl); auto subSock = make_ctrl_sub(DoomUrl); - int ret = doom_controller_loop(pubSock, subSock); + 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", 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); + + int ret = doom_controller_loop(pubSock, subSock, window, renderer); nng_close(pubSock); nng_close(subSock); diff --git a/src/doomsim.cc b/src/doomsim.cc index ea23fa2..7696ee9 100644 --- a/src/doomsim.cc +++ b/src/doomsim.cc @@ -102,14 +102,14 @@ DEF_DOOM_STATE_FUNC(do_doom_running) { assert(ctx->state == DP_DS_Running); - // Read and handle input messages + // Non-blocking receive of incoming messages. + // Check if we should quit. + // Handle incoming input. // Let doom render a new frame // Publish the frame - // Check if we should quit - return 0; }