-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* ported from NanoGUI to Dear/Hello ImGui * added --help option * added SVG (in addition to EPS) export * works as web app via emscripten * fix memory bugs in samplers * added "About" dialog
- Loading branch information
Showing
71 changed files
with
4,472 additions
and
3,153 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
name: Publish web app version to gh-pages | ||
|
||
on: | ||
push: | ||
branches: | ||
- "*" | ||
pull_request: | ||
- "*" | ||
paths: | ||
# This action only runs on push when C++ files are changed | ||
- "**.cpp" | ||
- "**.h" | ||
- "**.cmake" | ||
- "**Lists.txt" | ||
- "**-emscripten.yml" | ||
workflow_dispatch: | ||
|
||
env: | ||
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules | ||
|
||
jobs: | ||
build: | ||
name: Build and deploy | ||
runs-on: macos-12 | ||
|
||
steps: | ||
- name: Install dependencies | ||
run: brew install ninja emscripten | ||
|
||
- uses: actions/checkout@v3 | ||
|
||
- uses: actions/cache@v3 | ||
with: | ||
path: "**/cpm_modules" | ||
key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }} | ||
|
||
# Setup caching of build artifacts to reduce total build time (only Linux and MacOS) | ||
- name: ccache | ||
uses: hendrikmuhs/[email protected] | ||
|
||
- name: Create Build Environment | ||
run: cmake -E make_directory ${{github.workspace}}/build | ||
|
||
- name: Configure CMake | ||
run: | | ||
emcmake cmake -B ${{github.workspace}}/build -G Ninja -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache | ||
- name: Build | ||
run: cmake --build ${{github.workspace}}/build --parallel 4 | ||
|
||
- name: Archive build artifacts | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: build-artifacts | ||
path: | | ||
${{github.workspace}}/build | ||
- name: Copy web app | ||
working-directory: ${{github.workspace}}/build | ||
run: | | ||
mkdir deploy | ||
cp Samplin\ Safari.data Samplin\ Safari.html Samplin\ Safari.js Samplin\ Safari.wasm deploy/ | ||
mv deploy/Samplin\ Safari.html deploy/index.html | ||
- name: Publish | ||
uses: peaceiris/actions-gh-pages@v3 | ||
with: | ||
personal_token: ${{ secrets.GITHUB_TOKEN }} | ||
publish_branch: gh-pages | ||
publish_dir: ${{github.workspace}}/build/deploy |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,37 +2,40 @@ cmake_minimum_required(VERSION 3.13) | |
|
||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/" "${CMAKE_SOURCE_DIR}/resources") | ||
|
||
include(VersionFromGit) | ||
|
||
string(TIMESTAMP BUILD_TIME "%Y-%m-%d %H:%M") | ||
message(STATUS "Saving build timestamp: ${BUILD_TIME}") | ||
|
||
version_from_git( | ||
LOG ON | ||
TIMESTAMP "%Y-%m-%d-%H:%M:%S" | ||
ARG_UTC) | ||
|
||
project( | ||
SamplinSafari | ||
DESCRIPTION | ||
"A research tool to visualize and interactively inspect high-dimensional (quasi) Monte Carlo samplers." | ||
# VERSION ${VERSION} | ||
LANGUAGES C CXX) | ||
|
||
set(SAMPLINSAFARI_VERSION "${GIT_DESCRIBE}") | ||
VERSION ${VERSION} | ||
LANGUAGES C CXX | ||
) | ||
|
||
if(CMAKE_SIZEOF_VOID_P EQUAL 8) | ||
set(SAMPLINSAFARI_VERSION "${SAMPLINSAFARI_VERSION} (64 bit)") | ||
set(VERSION_LONG "${SEMVER} (64 bit)") | ||
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) | ||
set(SAMPLINSAFARI_VERSION "${SAMPLINSAFARI_VERSION} (32 bit)") | ||
set(VERSION_LONG "${SEMVER} (32 bit)") | ||
endif() | ||
|
||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/src/common.cpp @ONLY) | ||
|
||
include(sanitizers) | ||
|
||
# Set ourselves as the startup project in visual studio. Not available until cmake 3.6, but doesn't break older | ||
# versions. | ||
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT SamplinSafari) | ||
|
||
set(USE_IWYU OFF CACHE BOOL "INCLUDE WHAT YOU USE") | ||
|
||
include(CheckCXXCompilerFlag) | ||
|
||
# prevent glfw from changing the directory on macOS bundles | ||
# SET(GLFW_USE_CHDIR OFF CACHE BOOL "Prevent glfwInit from chdir to Contents/Resources" FORCE) | ||
|
||
# ============================================================================ | ||
# Set a default build configuration (Release) | ||
# ============================================================================ | ||
|
@@ -50,10 +53,6 @@ if(CMAKE_GENERATOR MATCHES "Visual Studio") | |
set_property(GLOBAL PROPERTY USE_FOLDERS ON) | ||
endif() | ||
|
||
if(APPLE) | ||
set(CMAKE_MACOSX_RPATH ON) | ||
endif() | ||
|
||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") | ||
# Prefer libc++ in conjunction with Clang | ||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") | ||
|
@@ -126,12 +125,6 @@ endif() | |
# ============================================================================ | ||
include(cmake/CPM.cmake) | ||
|
||
cpmaddpackage("gh:mitsuba-renderer/tinyformat#43816c694297a27909da0982f91315fb33d60676") | ||
if(tinyformat_ADDED) | ||
add_library(tinyformat INTERFACE IMPORTED) | ||
target_include_directories(tinyformat INTERFACE "${tinyformat_SOURCE_DIR}") | ||
endif() | ||
|
||
cpmaddpackage("gh:wjakob/pcg32#70099eadb86d3999c38cf69d2c55f8adc1f7fe34") | ||
if(pcg32_ADDED) | ||
add_library(pcg32 INTERFACE IMPORTED) | ||
|
@@ -143,29 +136,28 @@ if(galois_ADDED) | |
target_include_directories(galois++ INTERFACE "${galois_SOURCE_DIR}/include") | ||
endif() | ||
|
||
set(NANOGUI_BACKEND "OpenGL" CACHE BOOL " " FORCE) | ||
cpmaddpackage("gh:sgorsten/[email protected]") | ||
if(linalg_ADDED) | ||
add_library(linalg INTERFACE IMPORTED) | ||
target_include_directories(linalg INTERFACE "${linalg_SOURCE_DIR}") | ||
endif() | ||
|
||
cpmaddpackage("gh:fmtlib/fmt#7.1.3") | ||
|
||
cpmaddpackage("gh:samhocevar/portable-file-dialogs#7f852d88a480020d7f91957cbcefe514fc95000c") | ||
if(portable_file_dialogs_ADDED) | ||
add_library(portable_file_dialogs INTERFACE IMPORTED) | ||
target_include_directories(portable_file_dialogs INTERFACE "${portable_file_dialogs_SOURCE_DIR}") | ||
endif() | ||
|
||
cpmaddpackage( | ||
NAME | ||
nanogui | ||
GITHUB_REPOSITORY | ||
Tom94/nanogui-1 | ||
GIT_TAG | ||
cf8baf7c2a02a0e8443379a6b80f6709139f84a0 | ||
NAME hello_imgui | ||
GITHUB_REPOSITORY pthom/hello_imgui | ||
GIT_TAG "c57e60ad898abd79524d073f3801b80d87ce5468" | ||
OPTIONS | ||
"NANOGUI_BACKEND OpenGL" | ||
"NANOGUI_BUILD_EXAMPLES OFF" | ||
"NANOGUI_BUILD_SHARED OFF" | ||
"NANOGUI_BUILD_PYTHON OFF" | ||
"NANOGUI_INSTALL OFF" | ||
"EXCLUDE_FROM_ALL YES") | ||
if(nanogui_ADDED) | ||
add_library(nanogui::nanogui INTERFACE IMPORTED) | ||
target_include_directories( | ||
nanogui::nanogui SYSTEM INTERFACE ${nanogui_SOURCE_DIR}/ext/glfw/include ${nanogui_SOURCE_DIR}/ext/nanovg/src | ||
${nanogui_SOURCE_DIR}/include ${NANOGUI_EXTRA_INCS}) | ||
target_link_libraries(nanogui::nanogui INTERFACE "nanogui") | ||
target_compile_definitions(nanogui::nanogui INTERFACE "${NANOGUI_BACKEND_DEFS}") | ||
endif() | ||
"HELLOIMGUI_WITH_GLFW ON" | ||
"HELLOIMGUI_WITH_TEST_ENGINE OFF" | ||
) | ||
|
||
|
||
# ============================================================================ | ||
|
@@ -211,74 +203,66 @@ add_library(samplerlib OBJECT STATIC | |
include/sampler/Random.h | ||
include/sampler/RandomPermutation.h | ||
include/sampler/Sobol.h | ||
src/Misc.cpp | ||
src/Halton.cpp | ||
src/Jittered.cpp | ||
src/LP.cpp | ||
src/MultiJittered.cpp | ||
src/NRooks.cpp | ||
src/OA.cpp | ||
src/OAAddelmanKempthorne.cpp | ||
src/OABose.cpp | ||
src/OABoseBush.cpp | ||
src/OABush.cpp | ||
src/OACMJND.cpp | ||
src/SOA.cpp | ||
src/Random.cpp | ||
src/Sobol.cpp | ||
src/SobolMatrices.cpp) | ||
src/sampler/Misc.cpp | ||
src/sampler/Halton.cpp | ||
src/sampler/Jittered.cpp | ||
src/sampler/LP.cpp | ||
src/sampler/MultiJittered.cpp | ||
src/sampler/NRooks.cpp | ||
src/sampler/OA.cpp | ||
src/sampler/OAAddelmanKempthorne.cpp | ||
src/sampler/OABose.cpp | ||
src/sampler/OABoseBush.cpp | ||
src/sampler/OABush.cpp | ||
src/sampler/OACMJND.cpp | ||
src/sampler/SOA.cpp | ||
src/sampler/Random.cpp | ||
src/sampler/Sobol.cpp | ||
src/sampler/SobolMatrices.cpp) | ||
|
||
# Link dependencies | ||
target_link_libraries( | ||
samplerlib | ||
PUBLIC galois++ pcg32 tinyformat | ||
) | ||
PUBLIC galois++ pcg32) | ||
|
||
set_target_properties(samplerlib PROPERTIES CXX_STANDARD 17) | ||
set_target_properties(samplerlib PROPERTIES | ||
CXX_STANDARD 17) | ||
|
||
# Resource file (icons etc.) | ||
set(EXTRA_SOURCE "") | ||
if (APPLE) | ||
set(EXTRA_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/resources/icon.icns") | ||
elseif(WIN32) | ||
#set(EXTRA_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/resources/icon.rc") | ||
endif() | ||
|
||
# The following lines build the main executable. | ||
add_executable(SamplinSafari MACOSX_BUNDLE | ||
gui/SampleViewer.cpp | ||
gui/SampleViewer.h | ||
gui/main.cpp | ||
gui/Well.cpp | ||
gui/Well.h | ||
${EXTRA_SOURCE} | ||
) | ||
|
||
add_definitions(${NANOGUI_EXTRA_DEFS}) | ||
target_link_libraries( | ||
SamplinSafari | ||
PRIVATE nanogui::nanogui | ||
tinyformat | ||
samplerlib) | ||
# Now build the Samplin' Safari viewer app | ||
string(TIMESTAMP YEAR "%Y") | ||
|
||
set(output_name "Samplin Safari") | ||
set(HELLO_IMGUI_BUNDLE_IDENTIFIER_URL_PART "com.im.SamplinSafari") | ||
set(HELLO_IMGUI_BUNDLE_IDENTIFIER_NAME_PART ${app_name}) | ||
set(HELLO_IMGUI_ICON_DISPLAY_NAME ${output_name}) | ||
set(HELLO_IMGUI_BUNDLE_NAME ${output_name}) | ||
set(HELLO_IMGUI_BUNDLE_COPYRIGHT "© Wojciech Jarosz, ${YEAR}") | ||
set(HELLO_IMGUI_BUNDLE_EXECUTABLE ${output_name}) | ||
set(HELLO_IMGUI_BUNDLE_VERSION ${VERSION}) | ||
set(HELLO_IMGUI_BUNDLE_SHORT_VERSION ${VERSION}) | ||
set(HELLO_IMGUI_BUNDLE_ICON_FILE icon.icns) | ||
|
||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/shell.emscripten.html.in ${CMAKE_CURRENT_SOURCE_DIR}/shell.emscripten.html @ONLY) | ||
|
||
hello_imgui_add_app(SamplinSafari | ||
src/app.cpp | ||
${CMAKE_CURRENT_BINARY_DIR}/src/common.cpp | ||
src/shader.cpp | ||
src/export_to_file.cpp | ||
) | ||
|
||
set_target_properties(SamplinSafari PROPERTIES | ||
OUTPUT_NAME "SamplinSafari" | ||
CXX_STANDARD 17) | ||
OUTPUT_NAME ${output_name} | ||
CXX_STANDARD 17 | ||
) | ||
|
||
if (APPLE) | ||
# Build an application bundle on OSX | ||
set_target_properties(SamplinSafari PROPERTIES | ||
MACOSX_BUNDLE_BUNDLE_NAME "Samplin' Safari" | ||
MACOSX_BUNDLE_BUNDLE_GUI_IDENTIFIER "com.im.SamplinSafari" | ||
MACOSX_BUNDLE_ICON_FILE icon.icns | ||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/resources/MacOSXBundleInfo.plist.in | ||
MACOSX_BUNDLE_INFO_STRING "Samplin' Safari" | ||
MACOSX_BUNDLE_COPYRIGHT "© Wojciech Jarosz") | ||
set_source_files_properties(resources/icon.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") | ||
else() | ||
# Insulate from a few types of ABI changes by statically linking against libgcc and libstdc++ | ||
set_target_properties(SamplinSafari PROPERTIES LINK_FLAGS "-static-libgcc") | ||
endif() | ||
target_link_libraries( | ||
SamplinSafari | ||
PRIVATE samplerlib | ||
linalg | ||
fmt::fmt | ||
portable_file_dialogs | ||
) | ||
|
||
if (UNIX AND NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG) | ||
add_custom_command(TARGET SamplinSafari POST_BUILD COMMAND strip $<TARGET_FILE:SamplinSafari>) | ||
|
@@ -294,5 +278,3 @@ if(CMAKE_GENERATOR STREQUAL "Ninja") | |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always") | ||
endif() | ||
endif() | ||
|
||
target_compile_features(samplerlib PRIVATE cxx_std_17) |
Oops, something went wrong.