diff --git a/xo-imgui/CMakeLists.txt b/xo-imgui/CMakeLists.txt index b182890d..6bfe8601 100644 --- a/xo-imgui/CMakeLists.txt +++ b/xo-imgui/CMakeLists.txt @@ -24,7 +24,7 @@ add_definitions(${PROJECT_CXX_FLAGS}) set(XO_EXAMPLE_INSTALL_DIR bin/xo/imgui/example) -#add_subdirectory(src/imgui) +add_subdirectory(src/imgui) add_subdirectory(example) # add_subdirectory(utest) diff --git a/xo-imgui/TROUBLESHOOTING b/xo-imgui/TROUBLESHOOTING index fb848284..f0e2f0fd 100644 --- a/xo-imgui/TROUBLESHOOTING +++ b/xo-imgui/TROUBLESHOOTING @@ -2,7 +2,7 @@ $ nixGL glxgears -2. does vulkaninf work ? +2. does vulkaninfo work ? For WSL2 (nvidia GPU) diff --git a/xo-imgui/example/CMakeLists.txt b/xo-imgui/example/CMakeLists.txt index ccde2610..830e824e 100644 --- a/xo-imgui/example/CMakeLists.txt +++ b/xo-imgui/example/CMakeLists.txt @@ -1,4 +1,4 @@ add_subdirectory(ex1) -#add_subdirectory(ex2) -#add_subdirectory(ex3) -#add_subdirectory(ex4) +add_subdirectory(ex2) +add_subdirectory(ex3) +add_subdirectory(ex4) diff --git a/xo-imgui/example/ex1/CMakeLists.txt b/xo-imgui/example/ex1/CMakeLists.txt index 133a191e..768c94e3 100644 --- a/xo-imgui/example/ex1/CMakeLists.txt +++ b/xo-imgui/example/ex1/CMakeLists.txt @@ -3,7 +3,7 @@ if (XO_ENABLE_EXAMPLES) if (XO_ENABLE_OPENGL) - # TODO: maybe at some point incorporate imgui sources directly into xo source tree + # TODO: maybe incorporate imgui sources into xo-imgui library find_path(IMGUI_INCLUDE_DIR NAMES imgui/imgui.h DOC "path to imgui header" diff --git a/xo-imgui/example/ex1/imgui_ex1.cpp b/xo-imgui/example/ex1/imgui_ex1.cpp index f88fa789..c64de94b 100644 --- a/xo-imgui/example/ex1/imgui_ex1.cpp +++ b/xo-imgui/example/ex1/imgui_ex1.cpp @@ -26,7 +26,12 @@ int main(int, char **) std::cout << "Hello, world!" << std::endl; - SDL_SetHint(SDL_HINT_VIDEO_X11_FORCE_EGL, "1"); + // 500fps with no hint + // 60gps with hint + // + // presumably GLX optimized relative to EGL + + //SDL_SetHint(SDL_HINT_VIDEO_X11_FORCE_EGL, "1"); SDL_Init(SDL_INIT_VIDEO); diff --git a/xo-imgui/example/ex2/CMakeLists.txt b/xo-imgui/example/ex2/CMakeLists.txt index 7a1f6265..df9e7cb9 100644 --- a/xo-imgui/example/ex2/CMakeLists.txt +++ b/xo-imgui/example/ex2/CMakeLists.txt @@ -1,66 +1,72 @@ if (XO_ENABLE_EXAMPLES) # imgui dependency - find_path(IMGUI_INCLUDE_DIR - NAMES imgui/imgui.h - DOC "path to imgui header" - ) - if (IMGUI_INCLUDE_DIR) - message(STATUS "found imgui/imgui.h in IMGUI_INCLUDE_DIR=[${IMGUI_INCLUDE_DIR}]") - else() - message(FATAL_ERROR "unable to find imgui.h") + if (XO_ENABLE_OPENGL) + + find_path(IMGUI_INCLUDE_DIR + NAMES imgui/imgui.h + 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}]") + else() + message(FATAL_ERROR "unable to find imgui.h") + endif() + + # target executable + + set(SELF_EXE imgui_ex2) + add_executable(${SELF_EXE} imgui_ex2.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui_demo.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui_draw.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui_widgets.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui_tables.cpp + ${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_vulkan.cpp + ) + xo_include_options2(${SELF_EXE}) + + # OpenGL dependency + + # have to choose between + # libGL.so + # or + # libOpenGL.so + libGLX.so # GLVND = OpenGL Vendor Neutral Dispatch (e.g. mesa|nvda) + # + # expect in .build/CMakeCache.txt: + # OPENGL_opengl_LIBRARY:FILEPATH=/path/to/libOpenGL.so + # OpenGL_DIR:PATH=OpenGL_DIR-NOTFOUND # no cmake config file + + # set(OpenGL_GL_PREFERENCE GLVND) # or LEGACY + find_package(OpenGL REQUIRED) # find_package(OpenGL CONFIG REQUIRE) won't work + target_link_libraries(${SELF_EXE} PUBLIC OpenGL::GL) + + # find_package(Vulkan REQUIRED) + # target_link_libraries(${SELF_EXE} PUBLIC Vulkan::Vulkan) + + # GLEW dependency + xo_external_pkgconfig_dependency(${SELF_EXE} GLEW glew) + + # GLFW dependency + # find_package(glfw3 CONFIG REQUIRED) + # target_link_libraries(${SELF_EXE} PUBLIC glfw) # want -lglfw + + # SDL2 dependency + xo_external_pkgconfig_dependency(${SELF_EXE} SDL2 sdl2) + + # would prefer to use just IMGUI_INCLUDE_DIR, + # but imgui/backends/ .h files don't quote the imgui/ stem + # + target_include_directories(${SELF_EXE} PUBLIC ${IMGUI_INCLUDE_DIR}/imgui) + + xo_dependency(${SELF_EXE} xo_object) + xo_dependency(${SELF_EXE} randomgen) + xo_dependency(${SELF_EXE} xo_flatstring) + xo_dependency(${SELF_EXE} xo_alloc) + + install(TARGETS ${SELF_EXE} DESTINATION ${XO_EXAMPLE_INSTALL_DIR}) endif() - - # target executable - - set(SELF_EXE imgui_ex2) - add_executable(${SELF_EXE} imgui_ex2.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui_demo.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui_draw.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui_widgets.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui_tables.cpp - ${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_vulkan.cpp - ) - xo_include_options2(${SELF_EXE}) - - # OpenGL dependency - - # have to choose between - # libGL.so - # or - # libOpenGL.so + libGLX.so # GLVND = OpenGL Vendor Neutral Dispatch (e.g. mesa|nvda) - # - # expect in .build/CMakeCache.txt: - # OPENGL_opengl_LIBRARY:FILEPATH=/path/to/libOpenGL.so - # OpenGL_DIR:PATH=OpenGL_DIR-NOTFOUND # no cmake config file - -# set(OpenGL_GL_PREFERENCE GLVND) # or LEGACY - find_package(OpenGL REQUIRED) # find_package(OpenGL CONFIG REQUIRE) won't work - target_link_libraries(${SELF_EXE} PUBLIC OpenGL::GL) - -# find_package(Vulkan REQUIRED) -# target_link_libraries(${SELF_EXE} PUBLIC Vulkan::Vulkan) - - # GLEW dependency - xo_external_pkgconfig_dependency(${SELF_EXE} GLEW glew) - - # GLFW dependency -# find_package(glfw3 CONFIG REQUIRED) -# target_link_libraries(${SELF_EXE} PUBLIC glfw) # want -lglfw - - # SDL2 dependency - xo_external_pkgconfig_dependency(${SELF_EXE} SDL2 sdl2) - - # would prefer to use just IMGUI_INCLUDE_DIR, - # but imgui/backends/ .h files don't quote the imgui/ stem - # - target_include_directories(${SELF_EXE} PUBLIC ${IMGUI_INCLUDE_DIR}/imgui) - - xo_dependency(${SELF_EXE} xo_object) - xo_dependency(${SELF_EXE} randomgen) - xo_dependency(${SELF_EXE} xo_flatstring) - xo_dependency(${SELF_EXE} xo_alloc) endif() diff --git a/xo-imgui/example/ex2/imgui_ex2.cpp b/xo-imgui/example/ex2/imgui_ex2.cpp index 51b0dbb4..0b5aff1a 100644 --- a/xo-imgui/example/ex2/imgui_ex2.cpp +++ b/xo-imgui/example/ex2/imgui_ex2.cpp @@ -884,7 +884,7 @@ write_gc_history_tooltip(gc_history_headline headline, { xo::flatstring<512> retval; - xo::flatstring<512> headline_str; + xo::flatstring<256> headline_str; switch (headline) { case gc_history_headline::survive: snprintf(headline_str.data(), headline_str.capacity(), @@ -921,10 +921,8 @@ write_gc_history_tooltip(gc_history_headline headline, break; } - - snprintf(retval.data(), retval.capacity(), - "%s\n" + "%.*s\n" "\n" " gcseq: %lu\n" " type: %s\n" @@ -937,7 +935,7 @@ write_gc_history_tooltip(gc_history_headline headline, " garbage\u2099: %lu\n" /*garbageN*/ " effort: %lu dt: %.1lfus\n" " copy efficiency: %.1lf%% collection rate: %.0lf bytes/sec", - headline_str.c_str(), + static_cast(headline_str.capacity()), headline_str.c_str(), stats.gc_seq_, (stats.upto_ == generation::nursery) ? "incremental" : "FULL", stats.new_alloc_z_, diff --git a/xo-imgui/example/ex3/CMakeLists.txt b/xo-imgui/example/ex3/CMakeLists.txt index c291476f..4c55b0e3 100644 --- a/xo-imgui/example/ex3/CMakeLists.txt +++ b/xo-imgui/example/ex3/CMakeLists.txt @@ -1,67 +1,74 @@ if (XO_ENABLE_EXAMPLES) # imgui dependency - find_path(IMGUI_INCLUDE_DIR - NAMES imgui/imgui.h - DOC "path to imgui header" - ) - if (IMGUI_INCLUDE_DIR) - message(STATUS "found imgui/imgui.h in IMGUI_INCLUDE_DIR=[${IMGUI_INCLUDE_DIR}]") - else() - message(FATAL_ERROR "unable to find imgui.h") + if (XO_ENABLE_VULKAN) + + find_path( + IMGUI_INCLUDE_DIR + NAMES imgui/imgui.h + 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}]") + else() + message(FATAL_ERROR "unable to find imgui.h") + endif() + + # target executable + + set(SELF_EXE imgui_ex3) + add_executable(${SELF_EXE} imgui_ex3.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui_demo.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui_draw.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui_widgets.cpp + ${IMGUI_INCLUDE_DIR}/imgui/imgui_tables.cpp + ${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 + ) + xo_include_options2(${SELF_EXE}) + + # OpenGL dependency + + # have to choose between + # libGL.so + # or + # libOpenGL.so + libGLX.so # GLVND = OpenGL Vendor Neutral Dispatch (e.g. mesa|nvda) + # + # expect in .build/CMakeCache.txt: + # OPENGL_opengl_LIBRARY:FILEPATH=/path/to/libOpenGL.so + # OpenGL_DIR:PATH=OpenGL_DIR-NOTFOUND # no cmake config file + + # set(OpenGL_GL_PREFERENCE GLVND) # or LEGACY + # find_package(OpenGL REQUIRED) # find_package(OpenGL CONFIG REQUIRE) won't work + # target_link_libraries(${SELF_EXE} PUBLIC OpenGL::GL) + + find_package(Vulkan REQUIRED) + target_link_libraries(${SELF_EXE} PUBLIC Vulkan::Vulkan) + + # GLEW dependency + xo_external_pkgconfig_dependency(${SELF_EXE} GLEW glew) + + # GLFW dependency + #find_package(glfw3 CONFIG REQUIRED) + #target_link_libraries(${SELF_EXE} PUBLIC glfw) # want -lglfw + + # SDL2 dependency + xo_external_pkgconfig_dependency(${SELF_EXE} SDL2 sdl2) + + # would prefer to use just IMGUI_INCLUDE_DIR, + # but imgui/backends/ .h files don't quote the imgui/ stem + # + target_include_directories(${SELF_EXE} PUBLIC ${IMGUI_INCLUDE_DIR}/imgui) + + xo_dependency(${SELF_EXE} xo_object) + xo_dependency(${SELF_EXE} randomgen) + xo_dependency(${SELF_EXE} xo_flatstring) + xo_dependency(${SELF_EXE} xo_alloc) + + install(TARGETS ${SELF_EXE} DESTINATION ${XO_EXAMPLE_INSTALL_DIR}) endif() - - # target executable - - set(SELF_EXE imgui_ex3) - add_executable(${SELF_EXE} imgui_ex3.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui_demo.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui_draw.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui_widgets.cpp - ${IMGUI_INCLUDE_DIR}/imgui/imgui_tables.cpp - ${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 - ) - xo_include_options2(${SELF_EXE}) - - # OpenGL dependency - - # have to choose between - # libGL.so - # or - # libOpenGL.so + libGLX.so # GLVND = OpenGL Vendor Neutral Dispatch (e.g. mesa|nvda) - # - # expect in .build/CMakeCache.txt: - # OPENGL_opengl_LIBRARY:FILEPATH=/path/to/libOpenGL.so - # OpenGL_DIR:PATH=OpenGL_DIR-NOTFOUND # no cmake config file - -# set(OpenGL_GL_PREFERENCE GLVND) # or LEGACY -# find_package(OpenGL REQUIRED) # find_package(OpenGL CONFIG REQUIRE) won't work -# target_link_libraries(${SELF_EXE} PUBLIC OpenGL::GL) - - find_package(Vulkan REQUIRED) - target_link_libraries(${SELF_EXE} PUBLIC Vulkan::Vulkan) - - # GLEW dependency - xo_external_pkgconfig_dependency(${SELF_EXE} GLEW glew) - - # GLFW dependency - #find_package(glfw3 CONFIG REQUIRED) - #target_link_libraries(${SELF_EXE} PUBLIC glfw) # want -lglfw - - # SDL2 dependency - xo_external_pkgconfig_dependency(${SELF_EXE} SDL2 sdl2) - - # would prefer to use just IMGUI_INCLUDE_DIR, - # but imgui/backends/ .h files don't quote the imgui/ stem - # - target_include_directories(${SELF_EXE} PUBLIC ${IMGUI_INCLUDE_DIR}/imgui) - - xo_dependency(${SELF_EXE} xo_object) - xo_dependency(${SELF_EXE} randomgen) - xo_dependency(${SELF_EXE} xo_flatstring) - xo_dependency(${SELF_EXE} xo_alloc) endif() diff --git a/xo-imgui/example/ex3/imgui_ex3.cpp b/xo-imgui/example/ex3/imgui_ex3.cpp index 0ca0be17..acd89fcf 100644 --- a/xo-imgui/example/ex3/imgui_ex3.cpp +++ b/xo-imgui/example/ex3/imgui_ex3.cpp @@ -4365,17 +4365,23 @@ private: 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); +#endif createInfo.enabledExtensionCount = extensions.size(); createInfo.ppEnabledExtensionNames = extensions.data(); createInfo.enabledLayerCount = 0; +#ifdef __apple__ // CRITICAL: Enable portability enumeration flag for MoltenVK createInfo.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; +#endif - if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) { + int result = vkCreateInstance(&createInfo, nullptr, &instance); + if (result != VK_SUCCESS) { + printf("vkCreateInstance failed with error: %d\n", result); throw std::runtime_error("Failed to create instance!"); } } diff --git a/xo-imgui/example/ex4/CMakeLists.txt b/xo-imgui/example/ex4/CMakeLists.txt index bdd8e7fc..4bc2353d 100644 --- a/xo-imgui/example/ex4/CMakeLists.txt +++ b/xo-imgui/example/ex4/CMakeLists.txt @@ -1,18 +1,5 @@ if (XO_ENABLE_EXAMPLES) - # imgui dependency - - find_path(IMGUI_INCLUDE_DIR - NAMES imgui/imgui.h - DOC "path to imgui header" - ) - if (IMGUI_INCLUDE_DIR) - message(STATUS "found imgui/imgui.h in IMGUI_INCLUDE_DIR=[${IMGUI_INCLUDE_DIR}]") - else() - message(FATAL_ERROR "unable to find imgui.h") - endif() - # target executable - set(SELF_EXE imgui_ex4) add_executable(${SELF_EXE} imgui_ex4.cpp AppState.cpp @@ -20,54 +7,13 @@ if (XO_ENABLE_EXAMPLES) GcStateDescription.cpp AnimateGcCopyCb.cpp GenerationLayout.cpp -# ${IMGUI_INCLUDE_DIR}/imgui/imgui.cpp -# ${IMGUI_INCLUDE_DIR}/imgui/imgui_demo.cpp -# ${IMGUI_INCLUDE_DIR}/imgui/imgui_draw.cpp -# ${IMGUI_INCLUDE_DIR}/imgui/imgui_widgets.cpp -# ${IMGUI_INCLUDE_DIR}/imgui/imgui_tables.cpp -# ${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 ) xo_include_options2(${SELF_EXE}) - # OpenGL dependency - - # have to choose between - # libGL.so - # or - # libOpenGL.so + libGLX.so # GLVND = OpenGL Vendor Neutral Dispatch (e.g. mesa|nvda) - # - # expect in .build/CMakeCache.txt: - # OPENGL_opengl_LIBRARY:FILEPATH=/path/to/libOpenGL.so - # OpenGL_DIR:PATH=OpenGL_DIR-NOTFOUND # no cmake config file - -# set(OpenGL_GL_PREFERENCE GLVND) # or LEGACY -# find_package(OpenGL REQUIRED) # find_package(OpenGL CONFIG REQUIRE) won't work -# target_link_libraries(${SELF_EXE} PUBLIC OpenGL::GL) - - find_package(Vulkan REQUIRED) - target_link_libraries(${SELF_EXE} PUBLIC Vulkan::Vulkan) - - # GLEW dependency - xo_external_pkgconfig_dependency(${SELF_EXE} GLEW glew) - - # GLFW dependency - #find_package(glfw3 CONFIG REQUIRED) - #target_link_libraries(${SELF_EXE} PUBLIC glfw) # want -lglfw - - # SDL2 dependency - xo_external_pkgconfig_dependency(${SELF_EXE} SDL2 sdl2) - - # would prefer to use just IMGUI_INCLUDE_DIR, - # but imgui/backends/ .h files don't quote the imgui/ stem - # - target_include_directories(${SELF_EXE} PUBLIC ${IMGUI_INCLUDE_DIR}/imgui) - xo_self_dependency(${SELF_EXE} xo_imgui) xo_dependency(${SELF_EXE} xo_object) xo_dependency(${SELF_EXE} randomgen) xo_dependency(${SELF_EXE} xo_flatstring) xo_dependency(${SELF_EXE} xo_alloc) + xo_dependency(${SELF_EXE} indentlog) endif() diff --git a/xo-imgui/example/ex4/DrawState.cpp b/xo-imgui/example/ex4/DrawState.cpp index f5cc9dea..fa68af10 100644 --- a/xo-imgui/example/ex4/DrawState.cpp +++ b/xo-imgui/example/ex4/DrawState.cpp @@ -251,7 +251,7 @@ DrawState::write_gc_history_tooltip(gc_history_headline headline, { xo::flatstring<512> retval; - xo::flatstring<512> headline_str; + xo::flatstring<256> headline_str; switch (headline) { case gc_history_headline::survive: snprintf(headline_str.data(), headline_str.capacity(), @@ -288,10 +288,8 @@ DrawState::write_gc_history_tooltip(gc_history_headline headline, break; } - - snprintf(retval.data(), retval.capacity(), - "%s\n" + "%.*s\n" "\n" " gcseq: %lu\n" " type: %s\n" @@ -304,7 +302,7 @@ DrawState::write_gc_history_tooltip(gc_history_headline headline, " garbage\u2099: %lu\n" /*garbageN*/ " effort: %lu dt: %.1lfus\n" " copy efficiency: %.1lf%% collection rate: %.0lf bytes/sec", - headline_str.c_str(), + static_cast(headline_str.capacity()), headline_str.c_str(), stats.gc_seq_, (stats.upto_ == generation::nursery) ? "incremental" : "FULL", stats.new_alloc_z_, diff --git a/xo-imgui/example/ex4/GenerationLayout.hpp b/xo-imgui/example/ex4/GenerationLayout.hpp index 2d338aa1..78cc46a5 100644 --- a/xo-imgui/example/ex4/GenerationLayout.hpp +++ b/xo-imgui/example/ex4/GenerationLayout.hpp @@ -1,5 +1,7 @@ /* GenerationLayout.hpp */ +#pragma once + #include "GcGenerationDescription.hpp" #include "xo/imgui/ImRect.hpp" @@ -90,4 +92,5 @@ struct GenerationLayout { ImRect mem_rect_to_; }; + /* GenerationLayout.hpp */ diff --git a/xo-imgui/example/ex4/imgui_ex4.cpp b/xo-imgui/example/ex4/imgui_ex4.cpp index d70e7c4a..ed2fdfbd 100644 --- a/xo-imgui/example/ex4/imgui_ex4.cpp +++ b/xo-imgui/example/ex4/imgui_ex4.cpp @@ -1,11 +1,16 @@ /* imgui_ex4.cpp */ #include "xo/imgui/VulkanApp.hpp" +#ifdef TEMPORARILY_REMOVE #include "xo/imgui/ImRect.hpp" +#endif #include "AppState.hpp" #include "DrawState.hpp" #include #include + +#include "xo/indentlog/scope.hpp" + #include #include @@ -14,6 +19,7 @@ namespace { using xo::scope; using xo::xtag; + void app_duty_cycle_top(AppState * p_app_state, DrawState * p_draw_state) @@ -173,6 +179,11 @@ namespace { } int main() { + printf("Hello world\n"); + + scope log(XO_DEBUG(true)); + log && log("starting main"); + AppState app_state; DrawState draw_state; draw_state.gcstate_ = app_state.snapshot_gc_state(); diff --git a/xo-imgui/src/imgui/CMakeLists.txt b/xo-imgui/src/imgui/CMakeLists.txt index 7a4670e5..36663057 100644 --- a/xo-imgui/src/imgui/CMakeLists.txt +++ b/xo-imgui/src/imgui/CMakeLists.txt @@ -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() diff --git a/xo-imgui/src/imgui/VulkanApp.cpp b/xo-imgui/src/imgui/VulkanApp.cpp index 430a1585..28b70350 100644 --- a/xo-imgui/src/imgui/VulkanApp.cpp +++ b/xo-imgui/src/imgui/VulkanApp.cpp @@ -6,6 +6,10 @@ #include #include #include +#include +#ifdef __linux__ +# include +#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();