From 33ed99902ed5ab36a45474ae7c281e49299dd6e9 Mon Sep 17 00:00:00 2001 From: Daniel Gibson Date: Wed, 20 Mar 2024 15:22:21 +0100 Subject: [PATCH] Integrate ImGui into buildsystem, adjust its OpenGL code for qgl --- neo/CMakeLists.txt | 23 +++++++++-- .../imgui/backends/imgui_impl_opengl2.cpp | 41 +++++++++++++++++++ 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/neo/CMakeLists.txt b/neo/CMakeLists.txt index 12ecd2eb..ebcc23a3 100644 --- a/neo/CMakeLists.txt +++ b/neo/CMakeLists.txt @@ -739,6 +739,20 @@ set(src_idlib add_globbed_headers(src_idlib "idlib") +set(src_imgui + libs/imgui/backends/imgui_impl_sdl2.cpp + libs/imgui/backends/imgui_impl_opengl2.cpp + + libs/imgui/imgui.cpp + libs/imgui/imgui_draw.cpp + libs/imgui/imgui_tables.cpp + libs/imgui/imgui_widgets.cpp + + libs/imgui/imgui_demo.cpp +) + +add_globbed_headers(src_imgui "libs/imgui") + set(src_game game/AF.cpp game/AFEntity.cpp @@ -1148,6 +1162,7 @@ if(CORE) ${src_core} ${src_sys_base} ${src_sys_core} + ${src_imgui} ${src_editor_tools} ) @@ -1156,7 +1171,9 @@ if(CORE) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${DHEWM3BINARY}) endif() - source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX neo FILES ${src_core} ${src_sys_base} ${src_sys_core} ${src_editor_tools}) + source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX neo FILES ${src_core} ${src_sys_base} ${src_sys_core} ${src_imgui} ${src_editor_tools}) + + target_include_directories(${DHEWM3BINARY} PRIVATE "${CMAKE_SOURCE_DIR}/libs/imgui") if(HARDLINK_GAME) set_target_properties(${DHEWM3BINARY} PROPERTIES COMPILE_DEFINITIONS "${TOOLS_DEFINES}") @@ -1197,10 +1214,10 @@ if(DEDICATED) source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX neo FILES ${src_core} ${src_sys_base} ${src_stub_openal} ${src_stub_gl} ${src_debuggerServer}) if(HARDLINK_GAME) - set_target_properties(${DHEWM3BINARY}ded PROPERTIES COMPILE_DEFINITIONS "ID_DEDICATED") + set_target_properties(${DHEWM3BINARY}ded PROPERTIES COMPILE_DEFINITIONS "IMGUI_DISABLE;ID_DEDICATED") target_include_directories(${DHEWM3BINARY}ded PRIVATE ${game_includes}) else() - set_target_properties(${DHEWM3BINARY}ded PROPERTIES COMPILE_DEFINITIONS "ID_DEDICATED;__DOOM_DLL__") + set_target_properties(${DHEWM3BINARY}ded PROPERTIES COMPILE_DEFINITIONS "IMGUI_DISABLE;ID_DEDICATED;__DOOM_DLL__") endif() set_target_properties(${DHEWM3BINARY}ded PROPERTIES LINK_FLAGS "${ldflags}") target_link_libraries(${DHEWM3BINARY}ded diff --git a/neo/libs/imgui/backends/imgui_impl_opengl2.cpp b/neo/libs/imgui/backends/imgui_impl_opengl2.cpp index 17935b1f..583f97ce 100644 --- a/neo/libs/imgui/backends/imgui_impl_opengl2.cpp +++ b/neo/libs/imgui/backends/imgui_impl_opengl2.cpp @@ -51,6 +51,9 @@ #pragma clang diagnostic ignored "-Wnonportable-system-include-path" #endif +// DG: use qgl instead of GL/gl.h for dhewm3 (where D3_OSTYPE is always defined by CMake) +#ifndef D3_OSTYPE + // Include OpenGL header (without an OpenGL loader) requires a bit of fiddling #if defined(_WIN32) && !defined(APIENTRY) #define APIENTRY __stdcall // It is customary to use APIENTRY for OpenGL function pointer declarations on all platforms. Additionally, the Windows OpenGL header needs APIENTRY. @@ -65,6 +68,44 @@ #include #endif +#else // DG: use qgl + +#include "renderer/qgl.h" + +// creating some #defines for the used gl functions instead of adapting the code below +// will make updating to new imgui versions easier +#define glBindTexture qglBindTexture +#define glBlendFunc qglBlendFunc +#define glColorPointer qglColorPointer +#define glDeleteTextures qglDeleteTextures +#define glDisableClientState qglDisableClientState +#define glDisable qglDisable +#define glDrawElements qglDrawElements +#define glEnableClientState qglEnableClientState +#define glEnable qglEnable +#define glGenTextures qglGenTextures +#define glGetIntegerv qglGetIntegerv +#define glGetTexEnviv qglGetTexEnviv +#define glLoadIdentity qglLoadIdentity +#define glMatrixMode qglMatrixMode +#define glOrtho qglOrtho +#define glPixelStorei qglPixelStorei +#define glPolygonMode qglPolygonMode +#define glPopAttrib qglPopAttrib +#define glPopMatrix qglPopMatrix +#define glPushAttrib qglPushAttrib +#define glPushMatrix qglPushMatrix +#define glScissor qglScissor +#define glShadeModel qglShadeModel +#define glTexCoordPointer qglTexCoordPointer +#define glTexEnvi qglTexEnvi +#define glTexImage2D qglTexImage2D +#define glTexParameteri qglTexParameteri +#define glVertexPointer qglVertexPointer +#define glViewport qglViewport + +#endif // DG: use qgl + struct ImGui_ImplOpenGL2_Data { GLuint FontTexture;