xo-imgui: restore opengl + vulkan builds

This commit is contained in:
Roland Conybeare 2025-09-23 00:53:31 -04:00
commit d9aa1ddc81
15 changed files with 202 additions and 194 deletions

View file

@ -2,7 +2,9 @@
find_path(IMGUI_INCLUDE_DIR
NAMES imgui/imgui.h
DOC "path to imgui header")
DOC "path to imgui header"
HINTS ${PROJECT_SOURCE_DIR}/include
)
if (IMGUI_INCLUDE_DIR)
message(STATUS
"found imgui/imgui.h in IMGUI_INCLUDE_DIR=[${IMGUI_INCLUDE_DIR}]")
@ -10,10 +12,11 @@ else()
message(FATAL_ERROR "unable to find imgui.h")
endif()
set(SELF_LIB xo_imgui)
set(SELF_SRCS
VulkanApp.cpp
ImRect.cpp
if (XO_ENABLE_VULKAN)
set(SELF_LIB xo_imgui)
set(SELF_SRCS
VulkanApp.cpp
ImRect.cpp
${IMGUI_INCLUDE_DIR}/imgui/imgui.cpp
${IMGUI_INCLUDE_DIR}/imgui/imgui_demo.cpp
${IMGUI_INCLUDE_DIR}/imgui/imgui_draw.cpp
@ -22,21 +25,23 @@ set(SELF_SRCS
${IMGUI_INCLUDE_DIR}/imgui/backends/imgui_impl_sdl2.cpp
#${IMGUI_INCLUDE_DIR}/imgui/backends/imgui_impl_opengl3.cpp
#${IMGUI_INCLUDE_DIR}/imgui/backends/imgui_impl_glfw.cpp
${IMGUI_INCLUDE_DIR}/imgui/backends/imgui_impl_vulkan.cpp)
${IMGUI_INCLUDE_DIR}/imgui/backends/imgui_impl_vulkan.cpp
)
xo_add_shared_library4(
${SELF_LIB}
${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS}
)
xo_add_shared_library4(
${SELF_LIB}
${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS}
)
find_package(Vulkan REQUIRED)
target_link_libraries(${SELF_LIB} PUBLIC Vulkan::Vulkan)
find_package(Vulkan REQUIRED)
target_link_libraries(${SELF_LIB} PUBLIC Vulkan::Vulkan)
xo_external_pkgconfig_dependency(${SELF_LIB} SDL2 sdl2)
xo_external_pkgconfig_dependency(${SELF_LIB} SDL2 sdl2)
# NOTE: would prefer to use just IMGUI_INCLUDE_DIR,
# but imgui/backends/ .h files don't quote the imgui/ stem
#
target_include_directories(${SELF_LIB} PUBLIC ${IMGUI_INCLUDE_DIR}/imgui)
# NOTE: would prefer to use just IMGUI_INCLUDE_DIR,
# but imgui/backends/ .h files don't quote the imgui/ stem
#
target_include_directories(${SELF_LIB} PUBLIC ${IMGUI_INCLUDE_DIR}/imgui)
xo_dependency(${SELF_LIB} indentlog)
xo_dependency(${SELF_LIB} indentlog)
endif()

View file

@ -6,6 +6,10 @@
#include <backends/imgui_impl_sdl2.h>
#include <backends/imgui_impl_vulkan.h>
#include <cstdint>
#include <vulkan/vulkan_core.h>
#ifdef __linux__
# include <vulkan/vulkan_wayland.h>
#endif
using xo::scope;
using xo::xtag;
@ -38,6 +42,12 @@ VulkanApp::run() {
void
VulkanApp::init_window() {
#ifdef __linux__
// on linux (at least for wsl2) force x11 with xlib instead of xcb
// alternatively could set env var SDL_VIDEODRIVER
SDL_SetHint(SDL_HINT_VIDEODRIVER, "x11");
#endif
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
throw std::runtime_error("Failed to initialize SDL!");
}
@ -97,8 +107,21 @@ VulkanApp::create_instance()
throw std::runtime_error("Failed to get SDL Vulkan extensions!");
}
#ifdef __APPLE__
// Add portability extension for MoltenVK (macOS)
extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
// claude.ai says:
// extensions.push_back("VK_KHR_get_physical_device_properties2")
#endif
#ifdef __linux__
extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
// native wayland drivers. or use VK_KHR_XLIB_SURFACE_EXTENSION_NAME here
//extensions.push_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
//extensions.push_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
#endif
extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
createInfo.enabledExtensionCount = extensions.size();
createInfo.ppEnabledExtensionNames = extensions.data();