xo-imgui: restore opengl + vulkan builds
This commit is contained in:
parent
d817c649aa
commit
d9aa1ddc81
15 changed files with 202 additions and 194 deletions
|
|
@ -24,7 +24,7 @@ add_definitions(${PROJECT_CXX_FLAGS})
|
||||||
|
|
||||||
set(XO_EXAMPLE_INSTALL_DIR bin/xo/imgui/example)
|
set(XO_EXAMPLE_INSTALL_DIR bin/xo/imgui/example)
|
||||||
|
|
||||||
#add_subdirectory(src/imgui)
|
add_subdirectory(src/imgui)
|
||||||
add_subdirectory(example)
|
add_subdirectory(example)
|
||||||
# add_subdirectory(utest)
|
# add_subdirectory(utest)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
$ nixGL glxgears
|
$ nixGL glxgears
|
||||||
|
|
||||||
2. does vulkaninf work ?
|
2. does vulkaninfo work ?
|
||||||
|
|
||||||
|
|
||||||
For WSL2 (nvidia GPU)
|
For WSL2 (nvidia GPU)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
add_subdirectory(ex1)
|
add_subdirectory(ex1)
|
||||||
#add_subdirectory(ex2)
|
add_subdirectory(ex2)
|
||||||
#add_subdirectory(ex3)
|
add_subdirectory(ex3)
|
||||||
#add_subdirectory(ex4)
|
add_subdirectory(ex4)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ if (XO_ENABLE_EXAMPLES)
|
||||||
|
|
||||||
if (XO_ENABLE_OPENGL)
|
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
|
find_path(IMGUI_INCLUDE_DIR
|
||||||
NAMES imgui/imgui.h
|
NAMES imgui/imgui.h
|
||||||
DOC "path to imgui header"
|
DOC "path to imgui header"
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,12 @@ int main(int, char **)
|
||||||
|
|
||||||
std::cout << "Hello, world!" << std::endl;
|
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);
|
SDL_Init(SDL_INIT_VIDEO);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,66 +1,72 @@
|
||||||
if (XO_ENABLE_EXAMPLES)
|
if (XO_ENABLE_EXAMPLES)
|
||||||
# imgui dependency
|
# imgui dependency
|
||||||
|
|
||||||
find_path(IMGUI_INCLUDE_DIR
|
if (XO_ENABLE_OPENGL)
|
||||||
NAMES imgui/imgui.h
|
|
||||||
DOC "path to imgui header"
|
find_path(IMGUI_INCLUDE_DIR
|
||||||
)
|
NAMES imgui/imgui.h
|
||||||
if (IMGUI_INCLUDE_DIR)
|
DOC "path to imgui header"
|
||||||
message(STATUS "found imgui/imgui.h in IMGUI_INCLUDE_DIR=[${IMGUI_INCLUDE_DIR}]")
|
HINTS ${PROJECT_SOURCE_DIR}/include
|
||||||
else()
|
)
|
||||||
message(FATAL_ERROR "unable to find imgui.h")
|
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()
|
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()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -884,7 +884,7 @@ write_gc_history_tooltip(gc_history_headline headline,
|
||||||
{
|
{
|
||||||
xo::flatstring<512> retval;
|
xo::flatstring<512> retval;
|
||||||
|
|
||||||
xo::flatstring<512> headline_str;
|
xo::flatstring<256> headline_str;
|
||||||
switch (headline) {
|
switch (headline) {
|
||||||
case gc_history_headline::survive:
|
case gc_history_headline::survive:
|
||||||
snprintf(headline_str.data(), headline_str.capacity(),
|
snprintf(headline_str.data(), headline_str.capacity(),
|
||||||
|
|
@ -921,10 +921,8 @@ write_gc_history_tooltip(gc_history_headline headline,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
snprintf(retval.data(), retval.capacity(),
|
snprintf(retval.data(), retval.capacity(),
|
||||||
"%s\n"
|
"%.*s\n"
|
||||||
"\n"
|
"\n"
|
||||||
" gcseq: %lu\n"
|
" gcseq: %lu\n"
|
||||||
" type: %s\n"
|
" type: %s\n"
|
||||||
|
|
@ -937,7 +935,7 @@ write_gc_history_tooltip(gc_history_headline headline,
|
||||||
" garbage\u2099: %lu\n" /*garbageN*/
|
" garbage\u2099: %lu\n" /*garbageN*/
|
||||||
" effort: %lu dt: %.1lfus\n"
|
" effort: %lu dt: %.1lfus\n"
|
||||||
" copy efficiency: %.1lf%% collection rate: %.0lf bytes/sec",
|
" copy efficiency: %.1lf%% collection rate: %.0lf bytes/sec",
|
||||||
headline_str.c_str(),
|
static_cast<int>(headline_str.capacity()), headline_str.c_str(),
|
||||||
stats.gc_seq_,
|
stats.gc_seq_,
|
||||||
(stats.upto_ == generation::nursery) ? "incremental" : "FULL",
|
(stats.upto_ == generation::nursery) ? "incremental" : "FULL",
|
||||||
stats.new_alloc_z_,
|
stats.new_alloc_z_,
|
||||||
|
|
|
||||||
|
|
@ -1,67 +1,74 @@
|
||||||
if (XO_ENABLE_EXAMPLES)
|
if (XO_ENABLE_EXAMPLES)
|
||||||
# imgui dependency
|
# imgui dependency
|
||||||
|
|
||||||
find_path(IMGUI_INCLUDE_DIR
|
if (XO_ENABLE_VULKAN)
|
||||||
NAMES imgui/imgui.h
|
|
||||||
DOC "path to imgui header"
|
find_path(
|
||||||
)
|
IMGUI_INCLUDE_DIR
|
||||||
if (IMGUI_INCLUDE_DIR)
|
NAMES imgui/imgui.h
|
||||||
message(STATUS "found imgui/imgui.h in IMGUI_INCLUDE_DIR=[${IMGUI_INCLUDE_DIR}]")
|
DOC "path to imgui header"
|
||||||
else()
|
HINTS ${PROJECT_SOURCE_DIR}/include
|
||||||
message(FATAL_ERROR "unable to find imgui.h")
|
)
|
||||||
|
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()
|
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()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -4365,17 +4365,23 @@ private:
|
||||||
throw std::runtime_error("Failed to get SDL Vulkan extensions!");
|
throw std::runtime_error("Failed to get SDL Vulkan extensions!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __apple__
|
||||||
// Add portability extension for MoltenVK (macOS)
|
// Add portability extension for MoltenVK (macOS)
|
||||||
extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
|
extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
|
||||||
|
#endif
|
||||||
|
|
||||||
createInfo.enabledExtensionCount = extensions.size();
|
createInfo.enabledExtensionCount = extensions.size();
|
||||||
createInfo.ppEnabledExtensionNames = extensions.data();
|
createInfo.ppEnabledExtensionNames = extensions.data();
|
||||||
createInfo.enabledLayerCount = 0;
|
createInfo.enabledLayerCount = 0;
|
||||||
|
|
||||||
|
#ifdef __apple__
|
||||||
// CRITICAL: Enable portability enumeration flag for MoltenVK
|
// CRITICAL: Enable portability enumeration flag for MoltenVK
|
||||||
createInfo.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
|
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!");
|
throw std::runtime_error("Failed to create instance!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,5 @@
|
||||||
if (XO_ENABLE_EXAMPLES)
|
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
|
# target executable
|
||||||
|
|
||||||
set(SELF_EXE imgui_ex4)
|
set(SELF_EXE imgui_ex4)
|
||||||
add_executable(${SELF_EXE} imgui_ex4.cpp
|
add_executable(${SELF_EXE} imgui_ex4.cpp
|
||||||
AppState.cpp
|
AppState.cpp
|
||||||
|
|
@ -20,54 +7,13 @@ if (XO_ENABLE_EXAMPLES)
|
||||||
GcStateDescription.cpp
|
GcStateDescription.cpp
|
||||||
AnimateGcCopyCb.cpp
|
AnimateGcCopyCb.cpp
|
||||||
GenerationLayout.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})
|
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_self_dependency(${SELF_EXE} xo_imgui)
|
||||||
xo_dependency(${SELF_EXE} xo_object)
|
xo_dependency(${SELF_EXE} xo_object)
|
||||||
xo_dependency(${SELF_EXE} randomgen)
|
xo_dependency(${SELF_EXE} randomgen)
|
||||||
xo_dependency(${SELF_EXE} xo_flatstring)
|
xo_dependency(${SELF_EXE} xo_flatstring)
|
||||||
xo_dependency(${SELF_EXE} xo_alloc)
|
xo_dependency(${SELF_EXE} xo_alloc)
|
||||||
|
xo_dependency(${SELF_EXE} indentlog)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -251,7 +251,7 @@ DrawState::write_gc_history_tooltip(gc_history_headline headline,
|
||||||
{
|
{
|
||||||
xo::flatstring<512> retval;
|
xo::flatstring<512> retval;
|
||||||
|
|
||||||
xo::flatstring<512> headline_str;
|
xo::flatstring<256> headline_str;
|
||||||
switch (headline) {
|
switch (headline) {
|
||||||
case gc_history_headline::survive:
|
case gc_history_headline::survive:
|
||||||
snprintf(headline_str.data(), headline_str.capacity(),
|
snprintf(headline_str.data(), headline_str.capacity(),
|
||||||
|
|
@ -288,10 +288,8 @@ DrawState::write_gc_history_tooltip(gc_history_headline headline,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
snprintf(retval.data(), retval.capacity(),
|
snprintf(retval.data(), retval.capacity(),
|
||||||
"%s\n"
|
"%.*s\n"
|
||||||
"\n"
|
"\n"
|
||||||
" gcseq: %lu\n"
|
" gcseq: %lu\n"
|
||||||
" type: %s\n"
|
" type: %s\n"
|
||||||
|
|
@ -304,7 +302,7 @@ DrawState::write_gc_history_tooltip(gc_history_headline headline,
|
||||||
" garbage\u2099: %lu\n" /*garbageN*/
|
" garbage\u2099: %lu\n" /*garbageN*/
|
||||||
" effort: %lu dt: %.1lfus\n"
|
" effort: %lu dt: %.1lfus\n"
|
||||||
" copy efficiency: %.1lf%% collection rate: %.0lf bytes/sec",
|
" copy efficiency: %.1lf%% collection rate: %.0lf bytes/sec",
|
||||||
headline_str.c_str(),
|
static_cast<int>(headline_str.capacity()), headline_str.c_str(),
|
||||||
stats.gc_seq_,
|
stats.gc_seq_,
|
||||||
(stats.upto_ == generation::nursery) ? "incremental" : "FULL",
|
(stats.upto_ == generation::nursery) ? "incremental" : "FULL",
|
||||||
stats.new_alloc_z_,
|
stats.new_alloc_z_,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
/* GenerationLayout.hpp */
|
/* GenerationLayout.hpp */
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include "GcGenerationDescription.hpp"
|
#include "GcGenerationDescription.hpp"
|
||||||
#include "xo/imgui/ImRect.hpp"
|
#include "xo/imgui/ImRect.hpp"
|
||||||
|
|
||||||
|
|
@ -90,4 +92,5 @@ struct GenerationLayout {
|
||||||
ImRect mem_rect_to_;
|
ImRect mem_rect_to_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* GenerationLayout.hpp */
|
/* GenerationLayout.hpp */
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,16 @@
|
||||||
/* imgui_ex4.cpp */
|
/* imgui_ex4.cpp */
|
||||||
|
|
||||||
#include "xo/imgui/VulkanApp.hpp"
|
#include "xo/imgui/VulkanApp.hpp"
|
||||||
|
#ifdef TEMPORARILY_REMOVE
|
||||||
#include "xo/imgui/ImRect.hpp"
|
#include "xo/imgui/ImRect.hpp"
|
||||||
|
#endif
|
||||||
#include "AppState.hpp"
|
#include "AppState.hpp"
|
||||||
#include "DrawState.hpp"
|
#include "DrawState.hpp"
|
||||||
#include <backends/imgui_impl_sdl2.h>
|
#include <backends/imgui_impl_sdl2.h>
|
||||||
#include <backends/imgui_impl_vulkan.h>
|
#include <backends/imgui_impl_vulkan.h>
|
||||||
|
|
||||||
|
#include "xo/indentlog/scope.hpp"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
|
|
@ -14,6 +19,7 @@ namespace {
|
||||||
using xo::scope;
|
using xo::scope;
|
||||||
using xo::xtag;
|
using xo::xtag;
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
app_duty_cycle_top(AppState * p_app_state,
|
app_duty_cycle_top(AppState * p_app_state,
|
||||||
DrawState * p_draw_state)
|
DrawState * p_draw_state)
|
||||||
|
|
@ -173,6 +179,11 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
printf("Hello world\n");
|
||||||
|
|
||||||
|
scope log(XO_DEBUG(true));
|
||||||
|
log && log("starting main");
|
||||||
|
|
||||||
AppState app_state;
|
AppState app_state;
|
||||||
DrawState draw_state;
|
DrawState draw_state;
|
||||||
draw_state.gcstate_ = app_state.snapshot_gc_state();
|
draw_state.gcstate_ = app_state.snapshot_gc_state();
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,9 @@
|
||||||
|
|
||||||
find_path(IMGUI_INCLUDE_DIR
|
find_path(IMGUI_INCLUDE_DIR
|
||||||
NAMES imgui/imgui.h
|
NAMES imgui/imgui.h
|
||||||
DOC "path to imgui header")
|
DOC "path to imgui header"
|
||||||
|
HINTS ${PROJECT_SOURCE_DIR}/include
|
||||||
|
)
|
||||||
if (IMGUI_INCLUDE_DIR)
|
if (IMGUI_INCLUDE_DIR)
|
||||||
message(STATUS
|
message(STATUS
|
||||||
"found imgui/imgui.h in IMGUI_INCLUDE_DIR=[${IMGUI_INCLUDE_DIR}]")
|
"found imgui/imgui.h in IMGUI_INCLUDE_DIR=[${IMGUI_INCLUDE_DIR}]")
|
||||||
|
|
@ -10,10 +12,11 @@ else()
|
||||||
message(FATAL_ERROR "unable to find imgui.h")
|
message(FATAL_ERROR "unable to find imgui.h")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(SELF_LIB xo_imgui)
|
if (XO_ENABLE_VULKAN)
|
||||||
set(SELF_SRCS
|
set(SELF_LIB xo_imgui)
|
||||||
VulkanApp.cpp
|
set(SELF_SRCS
|
||||||
ImRect.cpp
|
VulkanApp.cpp
|
||||||
|
ImRect.cpp
|
||||||
${IMGUI_INCLUDE_DIR}/imgui/imgui.cpp
|
${IMGUI_INCLUDE_DIR}/imgui/imgui.cpp
|
||||||
${IMGUI_INCLUDE_DIR}/imgui/imgui_demo.cpp
|
${IMGUI_INCLUDE_DIR}/imgui/imgui_demo.cpp
|
||||||
${IMGUI_INCLUDE_DIR}/imgui/imgui_draw.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_sdl2.cpp
|
||||||
#${IMGUI_INCLUDE_DIR}/imgui/backends/imgui_impl_opengl3.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_glfw.cpp
|
||||||
${IMGUI_INCLUDE_DIR}/imgui/backends/imgui_impl_vulkan.cpp)
|
${IMGUI_INCLUDE_DIR}/imgui/backends/imgui_impl_vulkan.cpp
|
||||||
|
)
|
||||||
|
|
||||||
xo_add_shared_library4(
|
xo_add_shared_library4(
|
||||||
${SELF_LIB}
|
${SELF_LIB}
|
||||||
${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS}
|
${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS}
|
||||||
)
|
)
|
||||||
|
|
||||||
find_package(Vulkan REQUIRED)
|
find_package(Vulkan REQUIRED)
|
||||||
target_link_libraries(${SELF_LIB} PUBLIC Vulkan::Vulkan)
|
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,
|
# NOTE: would prefer to use just IMGUI_INCLUDE_DIR,
|
||||||
# but imgui/backends/ .h files don't quote the imgui/ stem
|
# but imgui/backends/ .h files don't quote the imgui/ stem
|
||||||
#
|
#
|
||||||
target_include_directories(${SELF_LIB} PUBLIC ${IMGUI_INCLUDE_DIR}/imgui)
|
target_include_directories(${SELF_LIB} PUBLIC ${IMGUI_INCLUDE_DIR}/imgui)
|
||||||
|
|
||||||
xo_dependency(${SELF_LIB} indentlog)
|
xo_dependency(${SELF_LIB} indentlog)
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,10 @@
|
||||||
#include <backends/imgui_impl_sdl2.h>
|
#include <backends/imgui_impl_sdl2.h>
|
||||||
#include <backends/imgui_impl_vulkan.h>
|
#include <backends/imgui_impl_vulkan.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <vulkan/vulkan_core.h>
|
||||||
|
#ifdef __linux__
|
||||||
|
# include <vulkan/vulkan_wayland.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
using xo::scope;
|
using xo::scope;
|
||||||
using xo::xtag;
|
using xo::xtag;
|
||||||
|
|
@ -38,6 +42,12 @@ VulkanApp::run() {
|
||||||
|
|
||||||
void
|
void
|
||||||
VulkanApp::init_window() {
|
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) {
|
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
||||||
throw std::runtime_error("Failed to initialize SDL!");
|
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!");
|
throw std::runtime_error("Failed to get SDL Vulkan extensions!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
// Add portability extension for MoltenVK (macOS)
|
// Add portability extension for MoltenVK (macOS)
|
||||||
extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
|
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.enabledExtensionCount = extensions.size();
|
||||||
createInfo.ppEnabledExtensionNames = extensions.data();
|
createInfo.ppEnabledExtensionNames = extensions.data();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue