From 000b195ece12de0813f1bbef8b03c4b6cff188aa Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Mon, 27 Nov 2023 13:31:33 +0100 Subject: [PATCH 01/27] dear imgui port working --- CMakeLists.txt | 113 +- assets/fonts/Roboto/LICENSE.txt | 202 ++ assets/fonts/Roboto/Roboto-Bold.ttf | Bin 0 -> 167336 bytes assets/fonts/Roboto/Roboto-BoldItalic.ttf | Bin 0 -> 171508 bytes assets/fonts/Roboto/Roboto-Regular.ttf | Bin 0 -> 168260 bytes assets/fonts/Roboto/Roboto-RegularItalic.ttf | Bin 0 -> 170504 bytes assets/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes gui/SampleViewer.cpp | 1914 ++++++++---------- gui/SampleViewer.h | 166 +- gui/Well.cpp | 27 - gui/Well.h | 47 - gui/arcball.h | 143 ++ gui/gui_app.cpp | 297 +++ gui/gui_app.h | 81 + gui/main.cpp | 93 - gui/shader.cpp | 637 ++++++ gui/shader.h | 273 +++ gui/traits.h | 110 + gui/utils.h | 269 --- include/sampler/Halton.h | 59 +- include/sampler/Jittered.h | 35 +- include/sampler/LP.h | 32 +- include/sampler/MultiJittered.h | 143 +- include/sampler/OA.h | 52 +- src/Halton.cpp | 18 +- src/Jittered.cpp | 19 +- src/LP.cpp | 20 +- src/Misc.cpp | 26 +- src/MultiJittered.cpp | 108 +- src/NRooks.cpp | 25 +- src/OA.cpp | 2 +- src/OAAddelmanKempthorne.cpp | 86 +- src/OABose.cpp | 139 +- src/OABoseBush.cpp | 51 +- src/OABush.cpp | 65 +- 35 files changed, 3139 insertions(+), 2113 deletions(-) create mode 100644 assets/fonts/Roboto/LICENSE.txt create mode 100644 assets/fonts/Roboto/Roboto-Bold.ttf create mode 100644 assets/fonts/Roboto/Roboto-BoldItalic.ttf create mode 100644 assets/fonts/Roboto/Roboto-Regular.ttf create mode 100644 assets/fonts/Roboto/Roboto-RegularItalic.ttf create mode 100644 assets/fonts/fontawesome-webfont.ttf delete mode 100644 gui/Well.cpp delete mode 100644 gui/Well.h create mode 100644 gui/arcball.h create mode 100644 gui/gui_app.cpp create mode 100644 gui/gui_app.h delete mode 100644 gui/main.cpp create mode 100644 gui/shader.cpp create mode 100644 gui/shader.h create mode 100644 gui/traits.h delete mode 100644 gui/utils.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 94dd946..b3f1ae1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,13 +26,8 @@ include(sanitizers) # 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 +45,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 +117,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 +128,27 @@ if(galois_ADDED) target_include_directories(galois++ INTERFACE "${galois_SOURCE_DIR}/include") endif() -set(NANOGUI_BACKEND "OpenGL" CACHE BOOL " " FORCE) +cpmaddpackage("gh:sgorsten/linalg@2.2") +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 wkjarosz/hello_imgui + GIT_TAG "c5121ed50314596c575ec613df93b73b39711292" 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") # ============================================================================ @@ -231,55 +214,59 @@ add_library(samplerlib OBJECT STATIC # 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) +# Now build the Samplin' Safari viewer app # 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") + 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) +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 "Samplin' Safari") +set(HELLO_IMGUI_BUNDLE_NAME "Samplin' Safari") +set(HELLO_IMGUI_BUNDLE_COPYRIGHT "© Wojciech Jarosz") +set(HELLO_IMGUI_BUNDLE_EXECUTABLE ${app_name}) +set(HELLO_IMGUI_BUNDLE_VERSION ${SAMPLINSAFARI_VERSION}) +set(HELLO_IMGUI_BUNDLE_ICON_FILE icon.icns) + +hello_imgui_add_app(SamplinSafari + gui/SampleViewer.cpp + gui/shader.cpp + gui/gui_app.cpp + ${EXTRA_SOURCE}) set_target_properties(SamplinSafari PROPERTIES OUTPUT_NAME "SamplinSafari" CXX_STANDARD 17) +target_link_libraries( + SamplinSafari + PRIVATE samplerlib + linalg + fmt::fmt + portable_file_dialogs) + 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") + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/resources/MacOSXBundleInfo.plist.in) 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() + if (UNIX AND NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG) add_custom_command(TARGET SamplinSafari POST_BUILD COMMAND strip $) endif() @@ -294,5 +281,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) \ No newline at end of file diff --git a/assets/fonts/Roboto/LICENSE.txt b/assets/fonts/Roboto/LICENSE.txt new file mode 100644 index 0000000..75b5248 --- /dev/null +++ b/assets/fonts/Roboto/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/assets/fonts/Roboto/Roboto-Bold.ttf b/assets/fonts/Roboto/Roboto-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..43da14d84ecb949ca5f5e8ecca3a514aa7fe1c7d GIT binary patch literal 167336 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

CI1`9yZA;krY|pfYv_=)r#TI})&gnG! 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 }T0zx*PitjbVP(pkGu*HnX1(-EMz?0WEMAX) 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/Roboto/Roboto-Regular.ttf b/assets/fonts/Roboto/Roboto-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ddf4bfacb396e97546364ccfeeb9c31dfaea4c25 GIT binary patch literal 168260 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 d0m -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Well.h" +#include + +namespace fs = std::filesystem; +using namespace linalg::ostream_overloads; + +#include "hello_imgui/hello_imgui.h" +#include "imgui.h" +#include "imgui_internal.h" + #include #include #include @@ -34,91 +29,92 @@ #include #include -namespace +#include +#include +#include +#include +#include + +#include "portable-file-dialogs.h" + +#ifndef __EMSCRIPTEN__ +#include +#else +#include +#endif + +#include "GLFW/glfw3.h" + +// clang-format off +#ifdef __EMSCRIPTEN__ + #define VERT_SHADER_HEADER "#version 100\n#define in attribute\n#define out varying\nprecision mediump float;\n" + #define FRAG_SHADER_HEADER "#version 100\n#define in varying\n#define fo_FragColor gl_FragColor\nprecision mediump float;\n" +#else + #define VERT_SHADER_HEADER "#version 330\n" + #define FRAG_SHADER_HEADER "#version 330\nout vec4 fo_FragColor;\n" +#endif +// clang-format on + +// Shader sources + +static const string pointVertexShader = FRAG_SHADER_HEADER R"( +uniform mat4 mvp; +uniform float pointSize; +in vec3 position; +void main() { - -string pointVertexShader = - R"( - #version 330 - uniform mat4 mvp; - uniform float pointSize; - in vec3 position; - void main() - { - gl_Position = mvp * vec4(position, 1.0); - gl_PointSize = pointSize; - } -)"; - -string pointFragmentShader = - R"( - #version 330 - uniform vec3 color; - uniform float pointSize; - out vec4 out_color; - void main() - { - float alpha = 1.0; - if (pointSize > 3) - { - vec2 circCoord = 2.0 * gl_PointCoord - 1.0; - float radius2 = dot(circCoord, circCoord); - if (radius2 > 1.0) - discard; - alpha = 1.0 - smoothstep(1.0 - 2.0/pointSize, 1.0, sqrt(radius2)); - } - out_color = vec4(color, alpha); - } -)"; - -string gridVertexShader = - R"( - #version 330 - uniform mat4 mvp; - in vec3 position; - void main() - { - gl_Position = mvp * vec4(position, 1.0); - } + gl_Position = mvp * vec4(position, 1.0); + gl_PointSize = pointSize; +} )"; -string gridFragmentShader = - R"( - #version 330 - out vec4 out_color; - uniform float alpha; - void main() +static const string pointFragmentShader = FRAG_SHADER_HEADER R"( +uniform vec3 color; +uniform float pointSize; +void main() +{ + float alpha = 1.0; + if (pointSize > 3) { - out_color = vec4(vec3(1.0), alpha); + vec2 circCoord = 2.0 * gl_PointCoord - 1.0; + float radius2 = dot(circCoord, circCoord); + if (radius2 > 1.0) + discard; + alpha = 1.0 - smoothstep(1.0 - 2.0/pointSize, 1.0, sqrt(radius2)); } + fo_FragColor = vec4(color, alpha); +} )"; -void computeCameraMatrices(Matrix4f &model, Matrix4f &lookat, Matrix4f &view, Matrix4f &proj, const CameraParameters &c, - float window_aspect); -void drawEPSGrid(const Matrix4f &mvp, int grid_res, ofstream &file); -void writeEPSPoints(const Array2d &points, int start, int count, const Matrix4f &mvp, ofstream &file, int dim_x, - int dim_y, int dim_z); - -float mapCount2Slider(int count) +static const string gridVertexShader = VERT_SHADER_HEADER R"( +uniform mat4 mvp; +in vec3 position; +void main() { - return (log((float)count) / log(2.f)) / 20; + gl_Position = mvp * vec4(position, 1.0); } +)"; -int mapSlider2Count(float sliderValue) +static const string gridFragmentShader = FRAG_SHADER_HEADER R"( +uniform float alpha; +void main() { - return (int)pow(2.f, round(80 * sliderValue) / 4.0f); + fo_FragColor = vec4(vec3(1.0), alpha); } +)"; + +static void computeCameraMatrices(float4x4 &model, float4x4 &lookat, float4x4 &view, float4x4 &proj, + const CameraParameters &c, float window_aspect); +static void drawEPSGrid(const float4x4 &mvp, int grid_res, ofstream &file); +static void writeEPSPoints(const Array2d &points, int start, int count, const float4x4 &mvp, ofstream &file, + int dim_x, int dim_y, int dim_z); -// float mapRadius2Slider(float radius) -// { -// return sqrt((radius - 1)/32.0f); -// } -float map_slider_to_radius(float sliderValue) +static float map_slider_to_radius(float sliderValue) { - return sliderValue * sliderValue * 32.0f + 1.0f; + return sliderValue * sliderValue * 32.0f + 2.0f; } -void layout_2d_matrix(Matrix4f &position, int numDims, int dim_x, int dim_y) +static void layout_2d_matrix(float4x4 &position, int numDims, int dim_x, int dim_y) { float cellSpacing = 1.f / (numDims - 1); float cellSize = 0.96f / (numDims - 1); @@ -126,32 +122,32 @@ void layout_2d_matrix(Matrix4f &position, int numDims, int dim_x, int dim_y) float xOffset = dim_x - (numDims - 2) / 2.0f; float yOffset = -(dim_y - 1 - (numDims - 2) / 2.0f); - position = Matrix4f::translate(Vector3f(cellSpacing * xOffset, cellSpacing * yOffset, 1)) * - Matrix4f::scale(Vector3f(cellSize, cellSize, 1)); + position = mul(translation_matrix(float3{cellSpacing * xOffset, cellSpacing * yOffset, 1}), + scaling_matrix(float3{cellSize, cellSize, 1})); } -} // namespace - -SampleViewer::SampleViewer() : Screen(Vector2i(800, 600), "Samplin' Safari") +SampleViewer::SampleViewer() : GUIApp() { m_time_strings.resize(3); m_samplers.resize(NUM_POINT_TYPES, nullptr); m_samplers[RANDOM] = new Random(m_num_dimensions); - m_samplers[JITTERED] = new Jittered(1, 1, 1.0f); + m_samplers[JITTERED] = new Jittered(1, 1, m_jitter * 0.01f); // m_samplers[MULTI_JITTERED] = new MultiJittered(1, 1, false, 0.0f); - m_samplers[MULTI_JITTERED_IP] = new MultiJitteredInPlace(1, 1, false, 0.0f); + m_samplers[MULTI_JITTERED_IP] = new MultiJitteredInPlace(1, 1, false, m_jitter * 0.01f); // m_samplers[CORRELATED_MULTI_JITTERED] = new CorrelatedMultiJittered(1, 1, false, 0.0f); - m_samplers[CORRELATED_MULTI_JITTERED_IP] = new CorrelatedMultiJitteredInPlace(1, 1, m_num_dimensions, false, 0.0f); - m_samplers[CMJND] = new CMJNDInPlace(1, 3, MJ_STYLE, false, 0.8); - m_samplers[BOSE_OA_IP] = new BoseOAInPlace(1, MJ_STYLE, false, 0.8f, m_num_dimensions); - m_samplers[BOSE_GALOIS_OA_IP] = new BoseGaloisOAInPlace(1, MJ_STYLE, false, 0.8f, m_num_dimensions); - m_samplers[BUSH_OA_IP] = new BushOAInPlace(1, 3, MJ_STYLE, false, 0.8f, m_num_dimensions); - m_samplers[BUSH_GALOIS_OA_IP] = new BushGaloisOAInPlace(1, 3, MJ_STYLE, false, 0.8f, m_num_dimensions); - m_samplers[ADDEL_KEMP_OA_IP] = new AddelmanKempthorneOAInPlace(2, MJ_STYLE, false, 0.8f, m_num_dimensions); - m_samplers[BOSE_BUSH_OA] = new BoseBushOA(2, MJ_STYLE, false, 0.8f, m_num_dimensions); - m_samplers[BOSE_BUSH_OA_IP] = new BoseBushOAInPlace(2, MJ_STYLE, false, 0.8f, m_num_dimensions); - m_samplers[N_ROOKS_IP] = new NRooksInPlace(m_num_dimensions, 1, false, 1.0f); + m_samplers[CORRELATED_MULTI_JITTERED_IP] = + new CorrelatedMultiJitteredInPlace(1, 1, m_num_dimensions, false, m_jitter * 0.01f); + m_samplers[CMJND] = new CMJNDInPlace(1, 3, MJ_STYLE, false, m_jitter * 0.01f); + m_samplers[BOSE_OA_IP] = new BoseOAInPlace(1, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); + m_samplers[BOSE_GALOIS_OA_IP] = new BoseGaloisOAInPlace(1, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); + m_samplers[BUSH_OA_IP] = new BushOAInPlace(1, 3, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); + m_samplers[BUSH_GALOIS_OA_IP] = new BushGaloisOAInPlace(1, 3, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); + m_samplers[ADDEL_KEMP_OA_IP] = + new AddelmanKempthorneOAInPlace(2, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); + m_samplers[BOSE_BUSH_OA] = new BoseBushOA(2, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); + m_samplers[BOSE_BUSH_OA_IP] = new BoseBushOAInPlace(2, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); + m_samplers[N_ROOKS_IP] = new NRooksInPlace(m_num_dimensions, 1, false, m_jitter * 0.01f); m_samplers[SOBOL] = new Sobol(m_num_dimensions); m_samplers[ZERO_TWO] = new ZeroTwo(1, m_num_dimensions, false); m_samplers[ZERO_TWO_SHUFFLED] = new ZeroTwo(1, m_num_dimensions, true); @@ -161,15 +157,15 @@ SampleViewer::SampleViewer() : Screen(Vector2i(800, 600), "Samplin' Safari") m_samplers[HAMMERSLEY_ZAREMBA] = new Hammersley(m_num_dimensions, 1); m_samplers[LARCHER_PILLICHSHAMMER] = new LarcherPillichshammerGK(3, 1, false); - m_camera[CAMERA_XY].arcball.setState({0, 0, 0, 1}); + m_camera[CAMERA_XY].arcball.set_state({0, 0, 0, 1}); m_camera[CAMERA_XY].persp_factor = 0.0f; m_camera[CAMERA_XY].camera_type = CAMERA_XY; - m_camera[CAMERA_YZ].arcball.setState(rotation_quat({0.f, -1.f, 0.f}, 0.5f * M_PI)); + m_camera[CAMERA_YZ].arcball.set_state(linalg::rotation_quat({0.f, -1.f, 0.f}, float(M_PI_2))); m_camera[CAMERA_YZ].persp_factor = 0.0f; m_camera[CAMERA_YZ].camera_type = CAMERA_YZ; - m_camera[CAMERA_XZ].arcball.setState(rotation_quat({1.f, 0.f, 0.f}, 0.5f * M_PI)); + m_camera[CAMERA_XZ].arcball.set_state(linalg::rotation_quat({1.f, 0.f, 0.f}, float(M_PI_2))); m_camera[CAMERA_XZ].persp_factor = 0.0f; m_camera[CAMERA_XZ].camera_type = CAMERA_XZ; @@ -177,643 +173,510 @@ SampleViewer::SampleViewer() : Screen(Vector2i(800, 600), "Samplin' Safari") m_camera[CAMERA_CURRENT] = m_camera[CAMERA_XY]; m_camera[CAMERA_NEXT] = m_camera[CAMERA_XY]; - // initialize the GUI elements - initialize_GUI(); - - // - // OpenGL setup - // - - // glEnable(GL_PROGRAM_POINT_SIZE); - glEnable(GL_LINE_SMOOTH); - glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); - - m_render_pass = new RenderPass({this}); - m_render_pass->set_clear_color(0, Color(0.f, 0.f, 0.f, 1.f)); + // set up HelloImGui parameters + m_params.appWindowParams.windowGeometry.size = {1200, 800}; + m_params.appWindowParams.windowTitle = "Samplin' Safari"; + m_params.appWindowParams.restorePreviousGeometry = false; + + // Menu bar + m_params.imGuiWindowParams.showMenuBar = true; + m_params.imGuiWindowParams.showStatusBar = true; + m_params.imGuiWindowParams.defaultImGuiWindowType = HelloImGui::DefaultImGuiWindowType::ProvideFullScreenDockSpace; + + // Setting this to true allows multiple viewports where you can drag windows outside out the main window in order to + // put their content into new native windows m_params.imGuiWindowParams.enableViewports = true; + m_params.imGuiWindowParams.enableViewports = false; + m_params.imGuiWindowParams.menuAppTitle = "File"; + + // Dockable windows + // the parameter editor + HelloImGui::DockableWindow winEditor; + winEditor.label = "Editor"; + winEditor.dockSpaceName = "EditorDock"; + winEditor.canBeClosed = true; + winEditor.callBeginEnd = false; + winEditor.GuiFunction = [this] { draw_editor(); }; + + // A Log window named "Logs" will be placed in "MiscSpace". It uses the HelloImGui logger gui + HelloImGui::DockableWindow logsWindow; + logsWindow.label = "Logs"; + logsWindow.dockSpaceName = "MiscSpace"; + logsWindow.GuiFunction = [] { HelloImGui::LogGui(); }; + + m_params.dockingParams.dockableWindows = {winEditor, logsWindow}; + + // Docking Splits + { + HelloImGui::DockingSplit split; + split.initialDock = "MainDockSpace"; + split.newDock = "EditorDock"; + split.direction = ImGuiDir_Right; + split.ratio = 0.25f; + m_params.dockingParams.dockingSplits = {split}; + } - m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); + m_params.callbacks.LoadAdditionalFonts = []() + { + std::string fontFilename = "fonts/Roboto/Roboto-Regular.ttf"; + // std::string fontFilename = "fonts/DroidSans.ttf"; + if (HelloImGui::AssetExists(fontFilename)) + { + float fontSize = 14.f; + ImFont *font = HelloImGui::LoadFontTTF_WithFontAwesomeIcons(fontFilename, fontSize, false); + (void)font; + } + }; - m_point_shader = new Shader(m_render_pass, "Point shader", pointVertexShader, pointFragmentShader, - Shader::BlendMode::AlphaBlend); + m_params.callbacks.ShowAppMenuItems = [this]() + { + if (ImGui::MenuItem(ICON_FA_SAVE " Save as EPS")) + { + try + { + auto basename = pfd::save_file("Base filename").result(); + if (basename.empty()) + return; - m_grid_shader = - new Shader(m_render_pass, "Grid shader", gridVertexShader, gridFragmentShader, Shader::BlendMode::AlphaBlend); + HelloImGui::Log(HelloImGui::LogLevel::Info, "Saving to base filename: %s.", basename.c_str()); - m_point_2d_shader = new Shader(m_render_pass, "Point shader 2D", pointVertexShader, pointFragmentShader, - Shader::BlendMode::AlphaBlend); + ofstream fileAll(basename + "_all2D.eps"); + draw_contents_2D_EPS(fileAll); - update_GPU_points(); - update_GPU_grids(); - set_visible(true); - resize_event(m_size); + ofstream fileXYZ(basename + "_012.eps"); + draw_contents_EPS(fileXYZ, CAMERA_CURRENT, m_dimension.x, m_dimension.y, m_dimension.z); - // Nanogui will redraw the screen for key/mouse events, but we need to manually - // invoke redraw for things like gui animations. do this in a separate thread - m_gui_refresh_thread = std::thread( - [this] - { - std::chrono::microseconds idle_quantum = std::chrono::microseconds(1000 * 1000 / 15); - std::chrono::microseconds anim_quantum = std::chrono::microseconds(1000 * 1000 / 120); - while (true) + for (int y = 0; y < m_num_dimensions; ++y) + for (int x = 0; x < y; ++x) + { + ofstream fileXY(fmt::format("{:s}_{:d}{:d}.eps", basename, x, y)); + draw_contents_EPS(fileXY, CAMERA_XY, x, y, 2); + } + } + catch (const std::exception &e) { - if (m_join_requested) - return; - std::this_thread::sleep_for(m_gui_refresh ? anim_quantum : idle_quantum); - this->m_redraw = false; - this->redraw(); + HelloImGui::Log(HelloImGui::LogLevel::Error, "An error occurred: %s.", e.what()); } - }); + } + }; + + m_params.callbacks.ShowGui = [this]() { draw_gui(); }; } SampleViewer::~SampleViewer() { - m_join_requested = true; - for (size_t i = 0; i < m_samplers.size(); ++i) delete m_samplers[i]; - m_gui_refresh_thread.join(); } -void SampleViewer::initialize_GUI() +int2 SampleViewer::get_draw_range() const { - set_resize_callback( - [&](Vector2i size) + int start = 0, count = m_point_count; + if (m_subset_by_coord) + count = min(count, m_subset_count); + else if (m_subset_by_index) + { + start = m_first_draw_point; + count = m_point_draw_count; + } + return {start, count}; +} + +void SampleViewer::draw_gui() +{ + HelloImGui::Log(HelloImGui::LogLevel::Info, "Current working directory: %s.", fs::current_path().c_str()); + + m_viewport_pos_GL = m_viewport_pos = {0, 0}; + m_viewport_size = m_fbsize; + if (auto id = m_params.dockingParams.dockSpaceIdFromName("MainDockSpace")) + { + auto central_node = ImGui::DockBuilderGetCentralNode(*id); + m_viewport_size = int2{central_node->Size.x, central_node->Size.y}; + m_viewport_pos = int2{central_node->Pos.x, central_node->Pos.y}; + // flip y coordinates between ImGui and OpenGL screen coordinates + m_viewport_pos_GL = + int2{central_node->Pos.x, (ImGui::GetIO().DisplaySize.y - (central_node->Pos.y + central_node->Size.y))}; + } + + float radius = map_slider_to_radius(m_radius); + if (m_scale_radius_with_points) + radius *= 64.0f / std::sqrt(m_point_count); + + float4x4 model, lookat, view, proj, mvp; + computeCameraMatrices(model, lookat, view, proj, m_camera[CAMERA_CURRENT], + float(m_viewport_size.x) / m_viewport_size.y); + mvp = mul(proj, mul(lookat, mul(view, model))); + + if (m_view == CAMERA_2D) + { + float4x4 pos; + + for (int i = 0; i < m_num_dimensions - 1; ++i) { - for (int i = 0; i < NUM_CAMERA_TYPES; ++i) - m_camera[i].arcball.setSize(size); - - if (m_help_dialog->visible()) - m_help_dialog->center(); - - perform_layout(); - }); - - auto thm = new Theme(m_nvg_context); - thm->m_standard_font_size = 14; - thm->m_button_font_size = 14; - thm->m_text_box_font_size = 14; - thm->m_window_corner_radius = 4; - thm->m_window_fill_unfocused = Color(60, 250); - thm->m_window_fill_focused = Color(65, 250); - thm->m_button_corner_radius = 2; - set_theme(thm); - auto createCollapsableSection = [this](Widget *parent, const string &title, bool collapsed = false) + layout_2d_matrix(pos, m_num_dimensions, i, m_num_dimensions - 1); + float4 text_pos = mul(mvp, mul(pos, float4{0.f, -0.5f, 0.0f, 1.0f})); + float2 text_2d_pos((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); + draw_text(m_viewport_pos + + int2((text_2d_pos.x) * m_viewport_size.x, (1.f - text_2d_pos.y) * m_viewport_size.y + 16), + to_string(i), float4(1.0f, 1.0f, 1.0f, 0.75f), 16, 0, TextAlign_CENTER | TextAlign_BOTTOM); + + layout_2d_matrix(pos, m_num_dimensions, 0, i + 1); + text_pos = mul(mvp, mul(pos, float4{-0.5f, 0.f, 0.0f, 1.0f})); + text_2d_pos = float2((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); + draw_text(m_viewport_pos + + int2((text_2d_pos.x) * m_viewport_size.x - 4, (1.f - text_2d_pos.y) * m_viewport_size.y), + to_string(i + 1), float4(1.0f, 1.0f, 1.0f, 0.75f), 16, 0, TextAlign_RIGHT | TextAlign_MIDDLE); + } + } + else { - auto group = new Widget(parent); - group->set_layout(new BoxLayout(Orientation::Vertical, Alignment::Fill, 0, 0)); - - auto btn = - new Button(group, title, !collapsed ? m_theme->m_text_box_down_icon : m_theme->m_popup_chevron_left_icon); - btn->set_flags(Button::ToggleButton); - btn->set_pushed(!collapsed); - btn->set_fixed_size(Vector2i(180, 22)); - btn->set_font_size(16); - btn->set_icon_position(Button::IconPosition::Right); - - auto panel = new Well(group); - panel->set_layout(new BoxLayout(Orientation::Vertical, Alignment::Fill, 5, 5)); - panel->set_visible(!collapsed); - - btn->set_change_callback( - [this, btn, panel](bool value) + for (int i = 0; i < 3; ++i) + draw_text(m_viewport_pos + m_viewport_size - int2(200, (2 - i) * 14 + 20), m_time_strings[i], + float4(1.0f, 1.0f, 1.0f, 0.75f), 16, 0); + + int2 range = get_draw_range(); + + if (m_show_point_nums || m_show_point_coords) + for (int p = range.x; p < range.x + range.y; ++p) { - btn->set_icon(value ? m_theme->m_text_box_down_icon : m_theme->m_popup_chevron_left_icon); - panel->set_visible(value); - this->perform_layout(this->m_nvg_context); - }); - return panel; - }; + float3 point = m_3d_points[p]; + + float4 text_pos = mul(mvp, float4{point.x, point.y, point.z, 1.f}); + float2 text_2d_pos((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); + if (m_show_point_nums) + draw_text(m_viewport_pos + int2((text_2d_pos.x) * m_viewport_size.x, + (1.f - text_2d_pos.y) * m_viewport_size.y - radius / 4), + fmt::format("{:d}", p), float4(1.0f, 1.0f, 1.0f, 0.75f), 12, 0, + TextAlign_CENTER | TextAlign_BOTTOM); + if (m_show_point_coords) + draw_text(m_viewport_pos + int2((text_2d_pos.x) * m_viewport_size.x, + (1.f - text_2d_pos.y) * m_viewport_size.y + radius / 4), + fmt::format("({:0.2f}, {:0.2f}, {:0.2f})", point.x + 0.5, point.y + 0.5, point.z + 0.5), + float4(1.0f, 1.0f, 1.0f, 0.75f), 11, 0, TextAlign_CENTER | TextAlign_TOP); + } + } +} - // create parameters dialog +void SampleViewer::draw_editor() +{ + bool accept_keys = !ImGui::GetIO().WantCaptureKeyboard; + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_Escape)) { - m_parameters_dialog = new Window(this, "Sample parameters"); - m_parameters_dialog->set_theme(thm); - m_parameters_dialog->set_position(Vector2i(15, 15)); - m_parameters_dialog->set_layout(new BoxLayout(Orientation::Vertical, Alignment::Fill, 5, 5)); - - m_help_button = new Button(m_parameters_dialog->button_panel(), "", FA_QUESTION); - m_help_button->set_flags(Button::ToggleButton); - m_help_button->set_change_callback( - [&](bool b) - { - m_help_dialog->set_visible(b); - if (b) - { - m_help_dialog->center(); - m_help_dialog->request_focus(); - } - }); + m_params.appShallExit = true; + return; + } + ImGui::Begin("Sample parameters"); + { + // ========================================================= + ImGui::SeparatorText("Point set"); + // ========================================================= + + if (ImGui::BeginCombo("##", m_samplers[m_sampler]->name().c_str())) { - auto section = createCollapsableSection(m_parameters_dialog, "Point set"); - - vector pointTypeNames(NUM_POINT_TYPES); - for (int i = 0; i < NUM_POINT_TYPES; ++i) - pointTypeNames[i] = m_samplers[i]->name(); - m_point_type_box = new ComboBox(section, pointTypeNames); - m_point_type_box->set_theme(thm); - m_point_type_box->set_fixed_height(20); - m_point_type_box->set_fixed_width(170); - m_point_type_box->set_callback( - [&](int) - { - Sampler *sampler = m_samplers[m_point_type_box->selected_index()]; - OrthogonalArray *oa = dynamic_cast(sampler); - m_strength_label->set_visible(oa); - m_strength_box->set_visible(oa); - m_strength_box->set_enabled(oa); - m_offset_type_label->set_visible(oa); - m_offset_type_box->set_visible(oa); - m_offset_type_box->set_enabled(oa); - m_jitter_slider->set_value(sampler->jitter()); - if (oa) - { - m_offset_type_box->set_selected_index(oa->offsetType()); - m_strength_box->set_value(oa->strength()); - } - this->perform_layout(); - update_GPU_points(); - update_GPU_grids(); - }); - m_point_type_box->set_tooltip("Key: Up/Down"); - - auto panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - auto l = new Label(panel, "Num points", "sans"); - l->set_fixed_width(100); - m_point_count_box = new IntBox(panel); - m_point_count_box->set_editable(true); - m_point_count_box->set_fixed_size(Vector2i(70, 20)); - m_point_count_box->set_alignment(TextBox::Alignment::Right); - m_point_count_box->set_spinnable(true); - m_point_count_box->set_callback( - [&](int v) + for (int n = 0; n < NUM_POINT_TYPES; n++) + { + Sampler *sampler = m_samplers[n]; + const bool is_selected = (m_sampler == n); + if (ImGui::Selectable(sampler->name().c_str(), is_selected)) { - m_target_point_count = v; + m_sampler = n; + sampler->setJitter(m_jitter * 0.01f); + sampler->setRandomized(m_randomize); update_GPU_points(); update_GPU_grids(); - }); + HelloImGui::Log(HelloImGui::LogLevel::Debug, "Switching to sampler %d: %s.", m_sampler, + sampler->name().c_str()); + } - // Add a slider and set defaults - m_point_count_slider = new Slider(section); - m_point_count_slider->set_callback( - [&](float v) - { - m_target_point_count = mapSlider2Count(v); - update_GPU_points(); - update_GPU_grids(); - }); - m_point_count_slider->set_value(6.f / 15.f); - // m_point_count_slider->set_fixed_width(100); - m_point_count_slider->set_tooltip("Key: Left/Right"); - m_target_point_count = m_point_count = mapSlider2Count(m_point_count_slider->value()); - - panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - l = new Label(panel, "Dimensions", "sans"); - l->set_fixed_width(100); - m_dimension_box = new IntBox(panel); - m_dimension_box->set_editable(true); - m_dimension_box->set_fixed_size(Vector2i(70, 20)); - m_dimension_box->set_value(3); - m_dimension_box->set_alignment(TextBox::Alignment::Right); - m_dimension_box->set_default_value("3"); - m_dimension_box->set_format("[2-9]*"); - m_dimension_box->set_spinnable(true); - m_dimension_box->set_min_value(2); - // m_dimension_box->set_max_value(32); - m_dimension_box->set_value_increment(1); - m_dimension_box->set_tooltip("Key: D/d"); - m_dimension_box->set_callback( - [&](int v) - { - m_num_dimensions = v; - m_subset_axis->set_max_value(v - 1); - m_x_dimension->set_max_value(v - 1); - m_y_dimension->set_max_value(v - 1); - m_z_dimension->set_max_value(v - 1); + // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) + if (is_selected) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + ImGui::SetItemTooltip("Key: Up/Down"); + if (accept_keys && !ImGui::IsKeyDown(ImGuiMod_Shift) && + (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) + { + int delta = ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1; + m_sampler = mod(m_sampler + delta, (int)NUM_POINT_TYPES); + Sampler *sampler = m_samplers[m_sampler]; + sampler->setJitter(m_jitter * 0.01f); + sampler->setRandomized(m_randomize); + update_GPU_points(); + update_GPU_grids(); + } - update_GPU_points(); - update_GPU_grids(); - }); - - m_randomize_checkbox = new CheckBox(section, "Randomize"); - m_randomize_checkbox->set_checked(true); - m_randomize_checkbox->set_callback([&](bool) { update_GPU_points(); }); - - panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - l = new Label(panel, "Jitter", "sans"); - l->set_fixed_width(100); - // Add a slider for the point radius - m_jitter_slider = new Slider(panel); - m_jitter_slider->set_value(0.5f); - m_jitter_slider->set_fixed_width(70); - m_jitter_slider->set_callback( - [&](float j) - { - m_samplers[m_point_type_box->selected_index()]->setJitter(j); - update_GPU_points(); - update_GPU_grids(); - }); - - panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - m_strength_label = new Label(panel, "Strength", "sans"); - m_strength_label->set_fixed_width(100); - m_strength_label->set_visible(false); - m_strength_box = new IntBox(panel); - m_strength_box->set_editable(true); - m_strength_box->set_enabled(false); - m_strength_box->set_visible(false); - m_strength_box->set_fixed_size(Vector2i(70, 20)); - m_strength_box->set_value(2); - m_strength_box->set_alignment(TextBox::Alignment::Right); - m_strength_box->set_default_value("2"); - m_strength_box->set_format("[2-9]*"); - m_strength_box->set_spinnable(true); - m_strength_box->set_min_value(2); - // m_strength_box->set_max_value(32); - m_strength_box->set_value_increment(1); - // m_strength_box->set_tooltip("Key: D/d"); - m_strength_box->set_callback( - [&](int v) + if (ImGui::SliderInt("Num points", &m_target_point_count, 1, 1 << 17, "%d", + ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_AlwaysClamp)) + { + HelloImGui::Log(HelloImGui::LogLevel::Debug, "Setting target point count to %d.", m_target_point_count); + update_GPU_points(); + update_GPU_grids(); + HelloImGui::Log(HelloImGui::LogLevel::Debug, "Regenerated %d points.", m_point_count); + } + // now that the user has finished editing, sync the GUI value + if (ImGui::IsItemDeactivatedAfterEdit()) + m_target_point_count = m_point_count; + ImGui::SetItemTooltip("Key: Left/Right"); + if (accept_keys && (ImGui::IsKeyPressed(ImGuiKey_LeftArrow) || ImGui::IsKeyPressed(ImGuiKey_RightArrow))) + { + m_target_point_count = + max(1u, ImGui::IsKeyPressed(ImGuiKey_RightArrow) ? roundUpPow2(m_target_point_count + 1) + : roundDownPow2(m_target_point_count - 1)); + update_GPU_points(); + update_GPU_grids(); + } + + if (ImGui::SliderInt("Dimensions", &m_num_dimensions, 2, 10, "%d", ImGuiSliderFlags_AlwaysClamp)) + { + update_GPU_points(); + update_GPU_grids(); + } + ImGui::SetItemTooltip("Key: D/d"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_D)) + { + m_num_dimensions = std::clamp(m_num_dimensions + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1), 2, 10); + update_GPU_points(); + update_GPU_grids(); + } + + if (ImGui::Checkbox("Randomize", &m_randomize)) + update_GPU_points(); + ImGui::SetItemTooltip("Key: R/r"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_R)) + { + if (ImGui::IsKeyDown(ImGuiMod_Shift)) + { + m_randomize = true; + m_samplers[m_sampler]->setRandomized(true); + } + else + m_randomize = !m_randomize; + update_GPU_points(); + } + + if (ImGui::SliderFloat("Jitter", &m_jitter, 0.f, 100.f, "%3.1f%%")) + { + m_samplers[m_sampler]->setJitter(m_jitter * 0.01f); + update_GPU_points(); + update_GPU_grids(); + } + + // add optional widgets for OA samplers + if (OrthogonalArray *oa = dynamic_cast(m_samplers[m_sampler])) + { + // Controls for the strengths of the OA + auto change_strength = [oa, this](int strength) + { + if ((unsigned)strength != oa->strength()) { - if (OrthogonalArray *oa = - dynamic_cast(m_samplers[m_point_type_box->selected_index()])) - { - m_strength_box->set_value(oa->setStrength(v)); - } + oa->setStrength(strength); update_GPU_points(); update_GPU_grids(); - }); - - panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - m_offset_type_label = new Label(panel, "Offset type", "sans"); - m_offset_type_label->set_fixed_width(100); - m_offset_type_label->set_visible(false); - OrthogonalArray *oa = dynamic_cast(m_samplers[BOSE_OA_IP]); - m_offset_type_box = new ComboBox(panel, oa->offsetTypeNames()); - m_offset_type_box->set_visible(false); - m_offset_type_box->set_theme(thm); - m_offset_type_box->set_fixed_size(Vector2i(70, 20)); - m_offset_type_box->set_callback( - [&](int ot) + } + }; + int strength = oa->strength(); + if (ImGui::InputInt("Strength", &strength, 1)) + change_strength(std::max(2, strength)); + ImGui::SetItemTooltip("Key: T/t"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_T)) + change_strength(std::max(2, strength + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1))); + + // Controls for the offset type of the OA + auto offset_names = oa->offsetTypeNames(); + auto change_offset_type = [oa, this](int offset) + { + oa->setOffsetType(offset); + m_jitter = oa->jitter(); + update_GPU_points(); + update_GPU_grids(); + }; + if (ImGui::BeginCombo("Offset type", offset_names[oa->offsetType()].c_str())) + { + for (unsigned n = 0; n < offset_names.size(); n++) { - if (OrthogonalArray *oa = - dynamic_cast(m_samplers[m_point_type_box->selected_index()])) - { - oa->setOffsetType(ot); - } - update_GPU_points(); - update_GPU_grids(); - }); - m_offset_type_box->set_tooltip("Key: Shift+Up/Down"); + const bool is_selected = (oa->offsetType() == n); + if (ImGui::Selectable(offset_names[n].c_str(), is_selected)) + change_offset_type(n); - auto epsBtn = new Button(section, "Save as EPS", FA_SAVE); - epsBtn->set_fixed_height(22); - epsBtn->set_callback( - [&] - { - try - { - string basename = file_dialog({{"", "Base filename"}}, true); - if (!basename.size()) - return; - - ofstream fileAll(basename + "_all2D.eps"); - draw_contents_2D_EPS(fileAll); - - ofstream fileXYZ(basename + "_012.eps"); - draw_contents_EPS(fileXYZ, CAMERA_CURRENT, m_x_dimension->value(), m_y_dimension->value(), - m_z_dimension->value()); - - for (int y = 0; y < m_num_dimensions; ++y) - for (int x = 0; x < y; ++x) - { - ofstream fileXY(tfm::format("%s_%d%d.eps", basename, x, y)); - draw_contents_EPS(fileXY, CAMERA_XY, x, y, 2); - } - } - catch (const std::exception &e) - { - new MessageDialog(this, MessageDialog::Type::Warning, "Error", - "An error occurred: " + std::string(e.what())); - } - }); + // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) + if (is_selected) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + ImGui::SetItemTooltip("Key: Shift+Up/Down"); + if (accept_keys && ImGui::IsKeyDown(ImGuiMod_Shift) && + (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) + change_offset_type(mod((int)oa->offsetType() + (ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1), + (int)NUM_OFFSET_TYPES)); } + // ========================================================= + ImGui::SeparatorText("Camera/view"); + // ========================================================= + + // ImGui::RadioButton("XY", &m_view, 0); + // ImGui::SameLine(); + // ImGui::RadioButton("YZ", &m_view, 1); + // ImGui::SameLine(); + // ImGui::RadioButton("XZ", &m_view, 2); + // ImGui::SameLine(); + // ImGui::RadioButton("XYZ", &m_view, 3); + // ImGui::SameLine(); + // ImGui::RadioButton("2D", &m_view, 4); + + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, + ImVec2{ImGui::GetStyle().ItemSpacing.y, ImGui::GetStyle().ItemSpacing.y}); + + const char *items[] = {"XY", "YZ", "XZ", "XYZ", "2D"}; + bool is_selected; + + for (int i = 0; i < IM_ARRAYSIZE(items); ++i) { - auto section = createCollapsableSection(m_parameters_dialog, "Camera/view:"); - - auto panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 2)); - - m_view_btns[CAMERA_XY] = new Button(panel, "XY"); - m_view_btns[CAMERA_XY]->set_flags(Button::RadioButton); - m_view_btns[CAMERA_XY]->set_pushed(true); - m_view_btns[CAMERA_XY]->set_callback([&] { set_view(CAMERA_XY); }); - m_view_btns[CAMERA_XY]->set_tooltip("Key: 1"); - m_view_btns[CAMERA_XY]->set_fixed_size(Vector2i(30, 22)); - - m_view_btns[CAMERA_YZ] = new Button(panel, "YZ"); - m_view_btns[CAMERA_YZ]->set_flags(Button::RadioButton); - m_view_btns[CAMERA_YZ]->set_callback([&] { set_view(CAMERA_YZ); }); - m_view_btns[CAMERA_YZ]->set_tooltip("Key: 2"); - m_view_btns[CAMERA_YZ]->set_fixed_size(Vector2i(30, 22)); - - m_view_btns[CAMERA_XZ] = new Button(panel, "XZ"); - m_view_btns[CAMERA_XZ]->set_flags(Button::RadioButton); - m_view_btns[CAMERA_XZ]->set_callback([&] { set_view(CAMERA_XZ); }); - m_view_btns[CAMERA_XZ]->set_tooltip("Key: 3"); - m_view_btns[CAMERA_XZ]->set_fixed_size(Vector2i(30, 22)); - - m_view_btns[CAMERA_CURRENT] = new Button(panel, "XYZ"); - m_view_btns[CAMERA_CURRENT]->set_flags(Button::RadioButton); - m_view_btns[CAMERA_CURRENT]->set_callback([&] { set_view(CAMERA_CURRENT); }); - m_view_btns[CAMERA_CURRENT]->set_tooltip("Key: 4"); - m_view_btns[CAMERA_CURRENT]->set_fixed_size(Vector2i(35, 22)); - - m_view_btns[CAMERA_2D] = new Button(panel, "2D"); - m_view_btns[CAMERA_2D]->set_flags(Button::RadioButton); - m_view_btns[CAMERA_2D]->set_callback([&] { set_view(CAMERA_2D); }); - m_view_btns[CAMERA_2D]->set_tooltip("Key: 0"); - m_view_btns[CAMERA_2D]->set_fixed_size(Vector2i(30, 22)); + if (i > CAMERA_XY) + ImGui::SameLine(); + + is_selected = m_view == i; + if (is_selected) + ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); + + if (ImGui::Button(items[i], float2{40.f, 0.f})) + { + set_view((CameraType)i); + } + ImGui::SetItemTooltip("Key: %d", (i + 1) % IM_ARRAYSIZE(items)); + ImGui::PopStyleColor(is_selected); } - // Display options panel + ImGui::PopStyleVar(); + + if (accept_keys) { - auto displayPanel = createCollapsableSection(m_parameters_dialog, "Display options"); - - auto panel = new Widget(displayPanel); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - new Label(panel, "Radius", "sans"); - // Add a slider for the point radius - m_point_radius_slider = new Slider(panel); - m_point_radius_slider->set_value(0.5f); - m_point_radius_slider->set_fixed_width(115); - m_point_radius_slider->set_callback([&](float v) { draw_contents(); }); - - m_scale_radius_with_points = new Button(panel, "", FA_COMPRESS); - m_scale_radius_with_points->set_flags(Button::ToggleButton); - m_scale_radius_with_points->set_pushed(true); - m_scale_radius_with_points->set_fixed_size(Vector2i(19, 19)); - m_scale_radius_with_points->set_change_callback([this](bool) { draw_contents(); }); - m_scale_radius_with_points->set_tooltip("Scale radius with number of points"); - - m_show_1d_projections = new CheckBox(displayPanel, "1D projections"); - m_show_1d_projections->set_checked(false); - m_show_1d_projections->set_tooltip("Key: P"); - m_show_1d_projections->set_callback([this](bool) { draw_contents(); }); - - m_show_point_nums = new CheckBox(displayPanel, "Point indices"); - m_show_point_nums->set_checked(false); - m_show_point_nums->set_callback([this](bool) { draw_contents(); }); - - m_show_point_coords = new CheckBox(displayPanel, "Point coords"); - m_show_point_coords->set_checked(false); - m_show_point_coords->set_callback([this](bool) { draw_contents(); }); - - m_coarse_grid_checkbox = new CheckBox(displayPanel, "Coarse grid"); - m_coarse_grid_checkbox->set_checked(false); - m_coarse_grid_checkbox->set_tooltip("Key: g"); - m_coarse_grid_checkbox->set_callback([this](bool) { update_GPU_grids(); }); - - m_fine_grid_checkbox = new CheckBox(displayPanel, "Fine grid"); - m_fine_grid_checkbox->set_tooltip("Key: G"); - m_fine_grid_checkbox->set_callback([this](bool) { update_GPU_grids(); }); - - m_bbox_grid_checkbox = new CheckBox(displayPanel, "Bounding box"); - m_bbox_grid_checkbox->set_tooltip("Key: B"); - m_bbox_grid_checkbox->set_callback([this](bool) { update_GPU_grids(); }); + if (ImGui::IsKeyPressed(ImGuiKey_1)) + set_view(CAMERA_XY); + else if (ImGui::IsKeyPressed(ImGuiKey_2)) + set_view(CAMERA_YZ); + else if (ImGui::IsKeyPressed(ImGuiKey_3)) + set_view(CAMERA_XZ); + else if (ImGui::IsKeyPressed(ImGuiKey_4)) + set_view(CAMERA_CURRENT); + else if (ImGui::IsKeyPressed(ImGuiKey_0)) + set_view(CAMERA_2D); } + // ========================================================= + ImGui::SeparatorText("Display options"); + // ========================================================= + + bool pushed = m_scale_radius_with_points; + if (pushed) + ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); + + ImGui::SliderFloat("Radius", &m_radius, 0.f, 1.f, ""); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_COMPRESS)) + m_scale_radius_with_points = !m_scale_radius_with_points; + ImGui::SetItemTooltip("Scale radius with number of points"); + if (pushed) + ImGui::PopStyleColor(); + + ImGui::Checkbox("1D projections", &m_show_1d_projections); + ImGui::SetItemTooltip("Key: p"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_P)) + m_show_1d_projections = !m_show_1d_projections; + + ImGui::Checkbox("Point indices", &m_show_point_nums); + ImGui::Checkbox("Point coords", &m_show_point_coords); + + ImGui::Checkbox("Coarse grid", &m_show_coarse_grid); + ImGui::SetItemTooltip("Key: g"); + ImGui::Checkbox("Fine grid", &m_show_fine_grid); + ImGui::SetItemTooltip("Key: G"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_G)) { - auto section = createCollapsableSection(m_parameters_dialog, "Dimension mapping", true); - // new Label(displayPanel, "Dimension mapping:", "sans-bold"); + if (ImGui::IsKeyDown(ImGuiMod_Shift)) + m_show_fine_grid = !m_show_fine_grid; + else + m_show_coarse_grid = !m_show_coarse_grid; + update_GPU_grids(); + } - auto panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 5)); - auto createDimMapping = [this, panel](IntBox *&box, const string &label, int dim) - { - auto group = new Widget(panel); - group->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - new Label(group, label, "sans"); - box = new IntBox(group); - box->set_editable(true); - box->set_value(dim); - box->set_alignment(TextBox::Alignment::Right); - // box->set_fixed_width(30); - box->set_default_value(to_string(dim)); - box->set_spinnable(true); - box->set_min_value(0); - box->set_max_value(m_num_dimensions - 1); - box->set_value_increment(1); - box->set_callback([&](int v) { update_GPU_points(false); }); - }; - createDimMapping(m_x_dimension, "X:", 0); - createDimMapping(m_y_dimension, "Y:", 1); - createDimMapping(m_z_dimension, "Z:", 2); + ImGui::Checkbox("Bounding box", &m_show_bbox); + ImGui::SetItemTooltip("Key: b"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_B)) + { + m_show_bbox = !m_show_bbox; + update_GPU_grids(); } - // point subset controls + // ========================================================= + ImGui::SeparatorText("Dimension mapping"); + // ========================================================= + + if (ImGui::SliderInt3("XYZ", &m_dimension[0], 0, m_num_dimensions - 1, "%d", ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); + + // ========================================================= + ImGui::SeparatorText("Visible subset"); + // ========================================================= + + if (ImGui::Checkbox("Subset by point index", &m_subset_by_index)) + update_GPU_points(false); + if (m_subset_by_index) { - auto section = createCollapsableSection(m_parameters_dialog, "Visible subset", true); + m_subset_by_coord = false; + ImGui::SliderInt("First point", &m_first_draw_point, 0, m_point_count - 1, "%d", + ImGuiSliderFlags_AlwaysClamp); + ImGui::SliderInt("Num subset points", &m_point_draw_count, 0, m_point_count - m_first_draw_point, "%d", + ImGuiSliderFlags_AlwaysClamp); + } - m_subset_by_index = new CheckBox(section, "Subset by point index"); - m_subset_by_index->set_checked(false); - m_subset_by_index->set_callback( - [&](bool b) - { - m_first_draw_point_box->set_enabled(b); - m_point_draw_count_box->set_enabled(b); - m_point_draw_count_slider->set_enabled(b); - if (b) - m_subset_by_coord->set_checked(false); - update_GPU_points(false); - draw_contents(); - }); - - // Create an empty panel with a horizontal layout - auto panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - auto l = new Label(panel, "First point", "sans"); - l->set_fixed_width(100); - m_first_draw_point_box = new IntBox(panel); - m_first_draw_point_box->set_editable(true); - m_first_draw_point_box->set_enabled(m_subset_by_index->checked()); - m_first_draw_point_box->set_fixed_size(Vector2i(70, 20)); - m_first_draw_point_box->set_value(0); - m_first_draw_point_box->set_alignment(TextBox::Alignment::Right); - m_first_draw_point_box->set_default_value("0"); - m_first_draw_point_box->set_spinnable(true); - m_first_draw_point_box->set_min_value(0); - m_first_draw_point_box->set_max_value(m_point_count - 1); - m_first_draw_point_box->set_value_increment(1); - m_first_draw_point_box->set_callback( - [&](int v) - { - m_point_draw_count_box->set_max_value(m_point_count - m_first_draw_point_box->value()); - m_point_draw_count_box->set_value(m_point_draw_count_box->value()); - }); - - panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - l = new Label(panel, "Num points", "sans"); - l->set_fixed_width(100); - m_point_draw_count_box = new IntBox(panel); - m_point_draw_count_box->set_editable(true); - m_point_draw_count_box->set_enabled(m_subset_by_index->checked()); - m_point_draw_count_box->set_fixed_size(Vector2i(70, 20)); - m_point_draw_count_box->set_value(m_point_count - m_first_draw_point_box->value()); - m_point_draw_count_box->set_alignment(TextBox::Alignment::Right); - m_point_draw_count_box->set_default_value("0"); - m_point_draw_count_box->set_spinnable(true); - m_point_draw_count_box->set_min_value(0); - m_point_draw_count_box->set_max_value(m_point_count - m_first_draw_point_box->value()); - m_point_draw_count_box->set_value_increment(1); - - m_point_draw_count_slider = new Slider(section); - m_point_draw_count_slider->set_enabled(m_subset_by_index->checked()); - m_point_draw_count_slider->set_value(1.0f); - m_point_draw_count_slider->set_callback( - [&](float v) - { m_point_draw_count_box->set_value(round((m_point_count - m_first_draw_point_box->value()) * v)); }); - - m_subset_by_coord = new CheckBox(section, "Subset by coordinate"); - m_subset_by_coord->set_checked(false); - m_subset_by_coord->set_callback( - [&](bool b) - { - m_subset_axis->set_enabled(b); - m_num_subset_levels->set_enabled(b); - m_subset_level->set_enabled(b); - if (b) - m_subset_by_index->set_checked(false); - update_GPU_points(false); - draw_contents(); - }); - - panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - l = new Label(panel, "Subset axis", "sans"); - l->set_fixed_width(100); - m_subset_axis = new IntBox(panel); - m_subset_axis->set_editable(true); - m_subset_axis->set_enabled(m_subset_by_coord->checked()); - m_subset_axis->set_fixed_size(Vector2i(70, 20)); - m_subset_axis->set_value(0); - m_subset_axis->set_alignment(TextBox::Alignment::Right); - m_subset_axis->set_default_value("0"); - m_subset_axis->set_spinnable(true); - m_subset_axis->set_min_value(0); - m_subset_axis->set_max_value(m_num_dimensions - 1); - m_subset_axis->set_value_increment(1); - m_subset_axis->set_callback([&](int v) { update_GPU_points(false); }); - - panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - l = new Label(panel, "Num levels", "sans"); - l->set_fixed_width(100); - m_num_subset_levels = new IntBox(panel); - m_num_subset_levels->set_editable(true); - m_num_subset_levels->set_enabled(m_subset_by_coord->checked()); - m_num_subset_levels->set_fixed_size(Vector2i(70, 20)); - m_num_subset_levels->set_value(2); - m_num_subset_levels->set_alignment(TextBox::Alignment::Right); - m_num_subset_levels->set_default_value("2"); - m_num_subset_levels->set_spinnable(true); - m_num_subset_levels->set_min_value(1); - m_num_subset_levels->set_max_value(m_point_count); - m_num_subset_levels->set_value_increment(1); - m_num_subset_levels->set_callback( - [&](int v) - { - m_subset_level->set_max_value(v - 1); - update_GPU_points(false); - }); - - panel = new Widget(section); - panel->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 0, 0)); - - l = new Label(panel, "Level", "sans"); - l->set_fixed_width(100); - m_subset_level = new IntBox(panel); - m_subset_level->set_editable(true); - m_subset_level->set_enabled(m_subset_by_coord->checked()); - m_subset_level->set_fixed_size(Vector2i(70, 20)); - m_subset_level->set_value(0); - m_subset_level->set_alignment(TextBox::Alignment::Right); - m_subset_level->set_default_value("0"); - m_subset_level->set_spinnable(true); - m_subset_level->set_min_value(0); - m_subset_level->set_max_value(m_num_subset_levels->value() - 1); - m_subset_level->set_value_increment(1); - m_subset_level->set_callback([&](int v) { update_GPU_points(false); }); + if (ImGui::Checkbox("Subset by coordinates", &m_subset_by_coord)) + update_GPU_points(false); + if (m_subset_by_coord) + { + m_subset_by_index = false; + if (ImGui::SliderInt("Subset axis", &m_subset_axis, 0, m_num_dimensions - 1, "%d", + ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); + if (ImGui::SliderInt("Num levels", &m_num_subset_levels, 1, m_point_count, "%d", + ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); + if (ImGui::SliderInt("Level", &m_subset_level, 0, m_num_subset_levels - 1, "%d", + ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); } } + ImGui::End(); +} - // - // create help dialog - // +void SampleViewer::initialize_GL() +{ + try { - vector> helpStrings = { - {"h", "Toggle this help panel"}, - {"LMB", "Rotate camera"}, - {"Scroll", "Zoom camera"}, - {"1/2/3", "Axis-aligned orthographic projections"}, - {"4", "Perspective view"}, - {"0", "Grid of all 2D projections"}, - {"Left", "Decrease point count (+Shift: bigger increment)"}, - {"Right", "Increase point count (+Shift: bigger increment)"}, - {"Up/Down", "Cycle through samplers"}, - {"Shift+Up/Down", "Cycle through offset types (for OA samplers)"}, - {"d/D", "Decrease/Increase maximum dimension"}, - {"t/T", "Decrease/Increase the strength (for OA samplers)"}, - {"r/R", "Toggle/re-seed randomization"}, - {"g/G", "Toggle coarse/fine grid"}, - {"P", "Toggle 1D projections"}, - {"Space", "Toggle controls"}, - }; - - m_help_dialog = new Window(this, "Help"); - m_help_dialog->set_theme(thm); - m_help_dialog->set_visible(false); - GridLayout *layout = new GridLayout(Orientation::Horizontal, 2, Alignment::Middle, 15, 5); - layout->set_col_alignment({Alignment::Maximum, Alignment::Fill}); - layout->set_spacing(0, 10); - m_help_dialog->set_layout(layout); - - new Label(m_help_dialog, "key", "sans-bold"); - new Label(m_help_dialog, "Action", "sans-bold"); - - for (auto item : helpStrings) - { - new Label(m_help_dialog, item.first); - new Label(m_help_dialog, item.second); - } +#ifndef __EMSCRIPTEN__ + glEnable(GL_PROGRAM_POINT_SIZE); + glEnable(GL_LINE_SMOOTH); + glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); +#endif + m_point_shader = + new Shader("Point shader", pointVertexShader, pointFragmentShader, Shader::BlendMode::AlphaBlend); - m_help_dialog->center(); + m_grid_shader = new Shader("Grid shader", gridVertexShader, gridFragmentShader, Shader::BlendMode::AlphaBlend); - Button *button = new Button(m_help_dialog->button_panel(), "", FA_TIMES); - button->set_callback( - [&] - { - m_help_dialog->set_visible(false); - m_help_button->set_pushed(false); - }); + m_point_2d_shader = + new Shader("Point shader 2D", pointVertexShader, pointFragmentShader, Shader::BlendMode::AlphaBlend); + + update_GPU_points(); + update_GPU_grids(); + + HelloImGui::Log(HelloImGui::LogLevel::Info, "Successfully initialized GL!"); + } + catch (const std::exception &e) + { + HelloImGui::Log(HelloImGui::LogLevel::Error, "Shader initialization failed!:\n\t%s.", e.what()); } } @@ -828,8 +691,7 @@ void SampleViewer::update_GPU_points(bool regenerate) } catch (const std::exception &e) { - new MessageDialog(this, MessageDialog::Type::Warning, "Error", - "An error occurred: " + std::string(e.what())); + HelloImGui::Log(HelloImGui::LogLevel::Error, "An error occurred while generating points: %s.", e.what()); return; } } @@ -838,138 +700,106 @@ void SampleViewer::update_GPU_points(bool regenerate) populate_point_subset(); - m_point_shader->set_buffer("position", VariableType::Float32, {m_3d_points.size(), 3}, m_3d_points.data()); + m_point_shader->set_buffer("position", m_3d_points); // Upload 2D points to GPU // create a temporary matrix to store all the 2D projections of the points // each 2D plot actually needs 3D points, and there are num2DPlots of them - int num2DPlots = m_num_dimensions * (m_num_dimensions - 1) / 2; - vector points2D(num2DPlots * m_subset_count); - int plot_index = 0; + int num2DPlots = m_num_dimensions * (m_num_dimensions - 1) / 2; + vector points2D(num2DPlots * m_subset_count); + int plot_index = 0; for (int y = 0; y < m_num_dimensions; ++y) for (int x = 0; x < y; ++x, ++plot_index) for (int i = 0; i < m_subset_count; ++i) - points2D[plot_index * m_subset_count + i] = - Vector3f{m_subset_points(i, x), m_subset_points(i, y), 0.5f}; + points2D[plot_index * m_subset_count + i] = float3{m_subset_points(i, x), m_subset_points(i, y), 0.5f}; - m_point_2d_shader->set_buffer("position", VariableType::Float32, {points2D.size(), 3}, points2D.data()); + m_point_2d_shader->set_buffer("position", points2D); - m_point_count_box->set_value(m_point_count); - m_point_count_slider->set_value(mapCount2Slider(m_point_count)); + // m_point_count_box->set_value(m_point_count); + // m_point_count_slider->set_value(mapCount2Slider(m_point_count)); } void SampleViewer::update_GPU_grids() { - vector bboxGrid, coarseGrid, fineGrid; - PointType point_type = (PointType)m_point_type_box->selected_index(); - generate_grid(bboxGrid, 1); - generate_grid(coarseGrid, m_samplers[point_type]->coarseGridRes(m_point_count)); - generate_grid(fineGrid, m_point_count); - m_coarse_line_count = coarseGrid.size(); - m_fine_line_count = fineGrid.size(); - vector positions; - positions.reserve(bboxGrid.size() + coarseGrid.size() + fineGrid.size()); - positions.insert(positions.end(), bboxGrid.begin(), bboxGrid.end()); - positions.insert(positions.end(), coarseGrid.begin(), coarseGrid.end()); - positions.insert(positions.end(), fineGrid.begin(), fineGrid.end()); - m_grid_shader->set_buffer("position", VariableType::Float32, {positions.size(), 3}, positions.data()); + vector bbox_grid, coarse_grid, fine_grid; + generate_grid(bbox_grid, 1); + generate_grid(coarse_grid, m_samplers[m_sampler]->coarseGridRes(m_point_count)); + generate_grid(fine_grid, m_point_count); + m_coarse_line_count = coarse_grid.size(); + m_fine_line_count = fine_grid.size(); + vector positions; + positions.reserve(bbox_grid.size() + coarse_grid.size() + fine_grid.size()); + positions.insert(positions.end(), bbox_grid.begin(), bbox_grid.end()); + positions.insert(positions.end(), coarse_grid.begin(), coarse_grid.end()); + positions.insert(positions.end(), fine_grid.begin(), fine_grid.end()); + m_grid_shader->set_buffer("position", positions); } -bool SampleViewer::mouse_motion_event(const Vector2i &p, const Vector2i &rel, int button, int modifiers) +bool SampleViewer::mouse_motion_event(const int2 &p, const int2 &rel, int button, int modifiers) { - if (!Screen::mouse_motion_event(p, rel, button, modifiers)) + if (m_camera[CAMERA_NEXT].arcball.motion(p - m_viewport_pos)) { - if (m_camera[CAMERA_NEXT].arcball.motion(p)) - draw_all(); + draw(); + return true; } - return true; + + return false; } -bool SampleViewer::mouse_button_event(const Vector2i &p, int button, bool down, int modifiers) +bool SampleViewer::mouse_button_event(const int2 &p, int button, bool down, int modifiers) { - if (!Screen::mouse_button_event(p, button, down, modifiers)) + if (button == GLFW_MOUSE_BUTTON_1) { - if (button == GLFW_MOUSE_BUTTON_1) + if (down) { - if (down) - { - m_mouse_down = true; - // on mouse down we start switching to a perspective camera - // and start recording the arcball rotation in CAMERA_NEXT - set_view(CAMERA_CURRENT); - m_camera[CAMERA_NEXT].arcball.button(p, down); - m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; - } - else - { - m_mouse_down = false; - m_camera[CAMERA_NEXT].arcball.button(p, down); - // since the time between mouse down and up could be shorter - // than the animation duration, we override the previous - // camera's arcball on mouse up to complete the animation - m_camera[CAMERA_PREVIOUS].arcball = m_camera[CAMERA_NEXT].arcball; - m_camera[CAMERA_PREVIOUS].camera_type = m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; - } + m_mouse_down = true; + // on mouse down we start switching to a perspective camera + // and start recording the arcball rotation in CAMERA_NEXT + set_view(CAMERA_CURRENT); + m_camera[CAMERA_NEXT].arcball.button(p - m_viewport_pos, down); + m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; } + else + { + m_mouse_down = false; + m_camera[CAMERA_NEXT].arcball.button(p - m_viewport_pos, down); + // since the time between mouse down and up could be shorter + // than the animation duration, we override the previous + // camera's arcball on mouse up to complete the animation + m_camera[CAMERA_PREVIOUS].arcball = m_camera[CAMERA_NEXT].arcball; + m_camera[CAMERA_PREVIOUS].camera_type = m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; + } + return true; } - return true; + + return false; } -bool SampleViewer::scroll_event(const Vector2i &p, const Vector2f &rel) +bool SampleViewer::scroll_event(const int2 &p, const float2 &rel) { - if (!Screen::scroll_event(p, rel)) - { - m_camera[CAMERA_NEXT].zoom = max(0.001, m_camera[CAMERA_NEXT].zoom * pow(1.1, rel.y())); - draw_all(); - } + m_camera[CAMERA_NEXT].zoom = std::max(0.001, m_camera[CAMERA_NEXT].zoom * pow(1.1, rel.y)); + draw(); return true; } -void SampleViewer::draw_points(const Matrix4f &mvp, const Vector3f &color, bool show_point_nums, bool show_point_coords) +void SampleViewer::draw_points(const float4x4 &mvp, const float3 &color) { // Render the point set m_point_shader->set_uniform("mvp", mvp); - float radius = map_slider_to_radius(m_point_radius_slider->value()); - if (m_scale_radius_with_points->pushed()) + float radius = map_slider_to_radius(m_radius); + if (m_scale_radius_with_points) radius *= 64.0f / std::sqrt(m_point_count); m_point_shader->set_uniform("pointSize", radius); m_point_shader->set_uniform("color", color); - int start = 0, count = m_point_count; - if (m_subset_by_coord->checked()) - { - count = min(count, m_subset_count); - } - else if (m_subset_by_index->checked()) - { - start = m_first_draw_point_box->value(); - count = m_point_draw_count_box->value(); - } + int2 range = get_draw_range(); m_point_shader->begin(); - m_point_shader->draw_array(Shader::PrimitiveType::Point, start, count); + m_point_shader->draw_array(Shader::PrimitiveType::Point, range.x, range.y); m_point_shader->end(); - - if (!show_point_nums && !show_point_coords) - return; - - for (int p = start; p < start + count; ++p) - { - Vector3f point = m_3d_points[p]; - - Vector4f text_pos = mvp * Vector4f(point.x(), point.y(), point.z(), 1.0f); - Vector2f text_2d_pos((text_pos.x() / text_pos.w() + 1) / 2, (text_pos.y() / text_pos.w() + 1) / 2); - if (show_point_nums) - draw_text(Vector2i((text_2d_pos.x()) * m_size.x(), (1.f - text_2d_pos.y()) * m_size.y() - radius / 4), - tfm::format("%d", p), Color(1.0f, 1.0f, 1.0f, 0.75f), 12, 0, NVG_ALIGN_CENTER | NVG_ALIGN_BOTTOM); - if (show_point_coords) - draw_text(Vector2i((text_2d_pos.x()) * m_size.x(), (1.f - text_2d_pos.y()) * m_size.y() + radius / 4), - tfm::format("(%0.2f, %0.2f, %0.2f)", point.x() + 0.5, point.y() + 0.5, point.z() + 0.5), - Color(1.0f, 1.0f, 1.0f, 0.75f), 11, 0, NVG_ALIGN_CENTER | NVG_ALIGN_TOP); - } } -void SampleViewer::draw_grid(const Matrix4f &mvp, float alpha, uint32_t offset, uint32_t count) +void SampleViewer::draw_grid(const float4x4 &mvp, float alpha, uint32_t offset, uint32_t count) { m_grid_shader->set_uniform("alpha", alpha); @@ -977,7 +807,7 @@ void SampleViewer::draw_grid(const Matrix4f &mvp, float alpha, uint32_t offset, { if (m_camera[CAMERA_CURRENT].camera_type == axis || m_camera[CAMERA_CURRENT].camera_type == CAMERA_CURRENT) { - m_grid_shader->set_uniform("mvp", Matrix4f(mvp * m_camera[axis].arcball.matrix())); + m_grid_shader->set_uniform("mvp", mul(mvp, m_camera[axis].arcball.matrix())); m_grid_shader->begin(); m_grid_shader->draw_array(Shader::PrimitiveType::Line, offset, count); m_grid_shader->end(); @@ -985,154 +815,154 @@ void SampleViewer::draw_grid(const Matrix4f &mvp, float alpha, uint32_t offset, } } -void SampleViewer::draw_2D_points_and_grid(const Matrix4f &mvp, int dim_x, int dim_y, int plot_index) +void SampleViewer::draw_2D_points_and_grid(const float4x4 &mvp, int dim_x, int dim_y, int plot_index) { - Matrix4f pos; + float4x4 pos; layout_2d_matrix(pos, m_num_dimensions, dim_x, dim_y); // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); // Render the point set - m_point_2d_shader->set_uniform("mvp", Matrix4f(mvp * pos)); - float radius = map_slider_to_radius(m_point_radius_slider->value()) / (m_num_dimensions - 1); - if (m_scale_radius_with_points->pushed()) + m_point_2d_shader->set_uniform("mvp", mul(mvp, pos)); + float radius = map_slider_to_radius(m_radius / (m_num_dimensions - 1)); + if (m_scale_radius_with_points) radius *= 64.0f / std::sqrt(m_point_count); m_point_2d_shader->set_uniform("pointSize", radius); - m_point_2d_shader->set_uniform("color", Vector3f(0.9f, 0.55f, 0.1f)); + m_point_2d_shader->set_uniform("color", float3(0.9f, 0.55f, 0.1f)); - int start = 0, count = m_point_count; - if (m_subset_by_coord->checked()) - { - count = min(count, m_subset_count); - } - else if (m_subset_by_index->checked()) - { - start = m_first_draw_point_box->value(); - count = m_point_draw_count_box->value(); - } + int2 range = get_draw_range(); m_point_2d_shader->begin(); - m_point_2d_shader->draw_array(Shader::PrimitiveType::Point, m_subset_count * plot_index + start, count); + m_point_2d_shader->draw_array(Shader::PrimitiveType::Point, m_subset_count * plot_index + range.x, range.y); m_point_2d_shader->end(); // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); - if (m_bbox_grid_checkbox->checked()) + if (m_show_bbox) { m_grid_shader->set_uniform("alpha", 1.0f); - m_grid_shader->set_uniform("mvp", Matrix4f(mvp * pos * m_camera[CAMERA_2D].arcball.matrix())); + m_grid_shader->set_uniform("mvp", mul(mvp, mul(pos, m_camera[CAMERA_2D].arcball.matrix()))); m_grid_shader->begin(); m_grid_shader->draw_array(Shader::PrimitiveType::Line, 0, 8); m_grid_shader->end(); } - if (m_coarse_grid_checkbox->checked()) + if (m_show_coarse_grid) { m_grid_shader->set_uniform("alpha", 0.6f); - m_grid_shader->set_uniform("mvp", Matrix4f(mvp * pos * m_camera[CAMERA_2D].arcball.matrix())); + m_grid_shader->set_uniform("mvp", mul(mvp, mul(pos, m_camera[CAMERA_2D].arcball.matrix()))); m_grid_shader->begin(); m_grid_shader->draw_array(Shader::PrimitiveType::Line, 8, m_coarse_line_count); m_grid_shader->end(); } - if (m_fine_grid_checkbox->checked()) + if (m_show_fine_grid) { m_grid_shader->set_uniform("alpha", 0.2f); - m_grid_shader->set_uniform("mvp", Matrix4f(mvp * pos * m_camera[CAMERA_2D].arcball.matrix())); + m_grid_shader->set_uniform("mvp", mul(mvp, mul(pos, m_camera[CAMERA_2D].arcball.matrix()))); m_grid_shader->begin(); m_grid_shader->draw_array(Shader::PrimitiveType::Line, 8 + m_coarse_line_count, m_fine_line_count); m_grid_shader->end(); } } -void SampleViewer::draw_contents() +void SampleViewer::clear_and_setup_viewport() { - // update/move the camera - update_current_camera(); + try + { + // account for dpi factor on retina screens + float scale = pixel_ratio(); + + const float4 background_color{0.f, 0.f, 0.f, 1.f}; - Matrix4f model, lookat, view, proj, mvp; - computeCameraMatrices(model, lookat, view, proj, m_camera[CAMERA_CURRENT], float(m_size.x()) / m_size.y()); - mvp = proj * lookat * view * model; + // first clear the entire window with the background color + CHK(glViewport(0, 0, m_fbsize.x, m_fbsize.y)); + CHK(glClearColor(background_color[0], background_color[1], background_color[2], background_color[3])); + CHK(glClear(GL_COLOR_BUFFER_BIT)); - m_render_pass->resize(framebuffer_size()); - m_render_pass->begin(); + // now set up a new viewport for the rest of the drawing + CHK(glViewport(m_viewport_pos_GL.x * scale, m_viewport_pos_GL.y * scale, m_viewport_size.x * scale, + m_viewport_size.y * scale)); - if (m_view_btns[CAMERA_2D]->pushed()) + // inform the arcballs of the viewport size + for (int i = 0; i < NUM_CAMERA_TYPES; ++i) + m_camera[i].arcball.set_size(m_viewport_size); + } + catch (const std::exception &e) { - Matrix4f pos; + HelloImGui::Log(HelloImGui::LogLevel::Error, "OpenGL drawing failed:\n\t%s.", e.what()); + } +} - for (int i = 0; i < m_num_dimensions - 1; ++i) - { - layout_2d_matrix(pos, m_num_dimensions, i, m_num_dimensions - 1); - Vector4f text_pos = mvp * pos * Vector4f(0.f, -0.5f, 0.0f, 1.0f); - Vector2f text_2d_pos((text_pos.x() / text_pos.w() + 1) / 2, (text_pos.y() / text_pos.w() + 1) / 2); - draw_text(Vector2i((text_2d_pos.x()) * m_size.x(), (1.f - text_2d_pos.y()) * m_size.y() + 16), to_string(i), - Color(1.0f, 1.0f, 1.0f, 0.75f), 16, 0, NVG_ALIGN_CENTER | NVG_ALIGN_BOTTOM); +void SampleViewer::draw() +{ + clear_and_setup_viewport(); - layout_2d_matrix(pos, m_num_dimensions, 0, i + 1); - text_pos = mvp * pos * Vector4f(-0.5f, 0.f, 0.0f, 1.0f); - text_2d_pos = Vector2f((text_pos.x() / text_pos.w() + 1) / 2, (text_pos.y() / text_pos.w() + 1) / 2); - draw_text(Vector2i((text_2d_pos.x()) * m_size.x() - 4, (1.f - text_2d_pos.y()) * m_size.y()), - to_string(i + 1), Color(1.0f, 1.0f, 1.0f, 0.75f), 16, 0, NVG_ALIGN_RIGHT | NVG_ALIGN_MIDDLE); - } + // update/move the camera + update_current_camera(); + float4x4 model, lookat, view, proj, mvp; + computeCameraMatrices(model, lookat, view, proj, m_camera[CAMERA_CURRENT], + float(m_viewport_size.x) / m_viewport_size.y); + mvp = mul(proj, mul(lookat, mul(view, model))); + + if (m_view == CAMERA_2D) + { int plot_index = 0; for (int y = 0; y < m_num_dimensions; ++y) for (int x = 0; x < y; ++x, ++plot_index) - { - // cout << "drawing plot_index: " << plot_index << endl; draw_2D_points_and_grid(mvp, x, y, plot_index); - } - // cout << endl; } else { // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); - draw_points(mvp, Vector3f(0.9f, 0.55f, 0.1f), m_show_point_nums->checked(), m_show_point_coords->checked()); + draw_points(mvp, {0.9f, 0.55f, 0.1f}); - if (m_show_1d_projections->checked()) + if (m_show_1d_projections) { // smash the points against the axes and draw - Matrix4f smashX = mvp * Matrix4f::translate(Vector3f(-0.51, 0, 0)) * Matrix4f::scale(Vector3f(0, 1, 1)); - draw_points(smashX, Vector3f(0.8f, 0.3f, 0.3f)); + float4x4 smashX = + mul(mvp, mul(translation_matrix(float3{-0.51f, 0.f, 0.f}), scaling_matrix(float3{0.f, 1.f, 1.f}))); + draw_points(smashX, {0.8f, 0.3f, 0.3f}); - Matrix4f smashY = mvp * Matrix4f::translate(Vector3f(0, -0.51, 0)) * Matrix4f::scale(Vector3f(1, 0, 1)); - draw_points(smashY, Vector3f(0.3f, 0.8f, 0.3f)); + float4x4 smashY = + mul(mvp, mul(translation_matrix(float3{0.f, -0.51f, 0.f}), scaling_matrix(float3{1.f, 0.f, 1.f}))); + draw_points(smashY, {0.3f, 0.8f, 0.3f}); - Matrix4f smashZ = mvp * Matrix4f::translate(Vector3f(0, 0, -0.51)) * Matrix4f::scale(Vector3f(1, 1, 0)); - draw_points(smashZ, Vector3f(0.3f, 0.3f, 0.8f)); + float4x4 smashZ = + mul(mvp, mul(translation_matrix(float3{0.f, 0.f, -0.51f}), scaling_matrix(float3{1.f, 1.f, 0.f}))); + draw_points(smashZ, {0.3f, 0.3f, 0.8f}); } // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); - if (m_bbox_grid_checkbox->checked()) + if (m_show_bbox) draw_grid(mvp, 1.0f, 0, 8); - if (m_coarse_grid_checkbox->checked()) + if (m_show_coarse_grid) draw_grid(mvp, 0.6f, 8, m_coarse_line_count); - if (m_fine_grid_checkbox->checked()) + if (m_show_fine_grid) draw_grid(mvp, 0.2f, 8 + m_coarse_line_count, m_fine_line_count); - - for (int i = 0; i < 3; ++i) - draw_text(m_size - Vector2i(10, (2 - i) * 14 + 20), m_time_strings[i], Color(1.0f, 1.0f, 1.0f, 0.75f), 16, - 0); } - - m_render_pass->end(); } -void SampleViewer::draw_text(const Vector2i &pos, const string &text, const Color &color, int font_size, - int fixed_width, int align) const +void SampleViewer::draw_text(const int2 &pos, const string &text, const float4 &color, int font_size, int fixed_width, + int align) const { - nvgFontFace(m_nvg_context, "sans"); - nvgFontSize(m_nvg_context, (float)font_size); - nvgFillColor(m_nvg_context, color); - if (fixed_width > 0) - { - nvgTextAlign(m_nvg_context, align); - nvgTextBox(m_nvg_context, (float)pos.x(), (float)pos.y(), (float)fixed_width, text.c_str(), nullptr); - } - else - { - nvgTextAlign(m_nvg_context, align); - nvgText(m_nvg_context, (float)pos.x(), (float)pos.y(), text.c_str(), nullptr); - } + float2 apos{pos.x, pos.y}; + float2 size = ImGui::CalcTextSize(text.c_str()); + + if (align & TextAlign_LEFT) + apos.x = pos.x; + else if (align & TextAlign_CENTER) + apos.x -= 0.5f * size.x; + else if (align & TextAlign_RIGHT) + apos.x -= size.x; + + if (align & TextAlign_TOP) + apos.y = pos.y; + else if (align & TextAlign_MIDDLE) + apos.y -= 0.5f * size.y; + else if (align & TextAlign_BOTTOM) + apos.y -= size.y; + + ImGui::GetBackgroundDrawList()->AddText(apos, ImColor(color), text.c_str()); } void SampleViewer::draw_contents_EPS(ofstream &file, CameraType camera_type, int dim_x, int dim_y, int dim_z) @@ -1140,7 +970,7 @@ void SampleViewer::draw_contents_EPS(ofstream &file, CameraType camera_type, int int size = 900; int crop = 720; - int pointScale = m_samplers[m_point_type_box->selected_index()]->coarseGridRes(m_point_count); + int pointScale = m_samplers[m_sampler]->coarseGridRes(m_point_count); file << "%!PS-Adobe-3.0 EPSF-3.0\n"; file << "%%HiResBoundingBox: " << (-crop) << " " << (-crop) << " " << crop << " " << crop << "\n"; @@ -1159,13 +989,13 @@ void SampleViewer::draw_contents_EPS(ofstream &file, CameraType camera_type, int file << "/clc " << (0.8f) << " def %define variable for coarse line color\n"; file << "/flc " << (0.9f) << " def %define variable for fine line color\n"; - Matrix4f model, lookat, view, proj, mvp, mvp2; + float4x4 model, lookat, view, proj, mvp; computeCameraMatrices(model, lookat, view, proj, m_camera[camera_type], 1.0f); - mvp = proj * lookat * view * model; + mvp = mul(proj, mul(lookat, mul(view, model))); int start_axis = CAMERA_XY, end_axis = CAMERA_XZ; if (camera_type != CAMERA_CURRENT) start_axis = end_axis = camera_type; - if (m_fine_grid_checkbox->checked()) + if (m_show_fine_grid) { file << "% Draw fine grids \n"; file << "flc setgray %fill color for fine grid \n"; @@ -1173,12 +1003,12 @@ void SampleViewer::draw_contents_EPS(ofstream &file, CameraType camera_type, int for (int axis = start_axis; axis <= end_axis; ++axis) { // this extra matrix multiply is needed to properly rotate the different grids for the XYZ view - Matrix4f mvp2 = mvp * m_camera[axis].arcball.matrix(); + float4x4 mvp2 = mul(mvp, m_camera[axis].arcball.matrix()); drawEPSGrid(mvp2, m_point_count, file); } } - if (m_coarse_grid_checkbox->checked()) + if (m_show_coarse_grid) { file << "% Draw coarse grids \n"; file << "clc setgray %fill color for coarse grid \n"; @@ -1186,13 +1016,12 @@ void SampleViewer::draw_contents_EPS(ofstream &file, CameraType camera_type, int for (int axis = start_axis; axis <= end_axis; ++axis) { // this extra matrix multiply is needed to properly rotate the different grids for the XYZ view - Matrix4f mvp2 = mvp * m_camera[axis].arcball.matrix(); - PointType point_type = (PointType)m_point_type_box->selected_index(); - drawEPSGrid(mvp2, m_samplers[point_type]->coarseGridRes(m_point_count), file); + float4x4 mvp2 = mul(mvp, m_camera[axis].arcball.matrix()); + drawEPSGrid(mvp2, m_samplers[m_sampler]->coarseGridRes(m_point_count), file); } } - if (m_bbox_grid_checkbox->checked()) + if (m_show_bbox) { file << "% Draw bounding boxes \n"; file << "blc setgray %fill color for bounding box \n"; @@ -1200,7 +1029,7 @@ void SampleViewer::draw_contents_EPS(ofstream &file, CameraType camera_type, int for (int axis = start_axis; axis <= end_axis; ++axis) { // this extra matrix multiply is needed to properly rotate the different grids for the XYZ view - Matrix4f mvp2 = mvp * m_camera[axis].arcball.matrix(); + float4x4 mvp2 = mul(mvp, m_camera[axis].arcball.matrix()); drawEPSGrid(mvp2, 1, file); } } @@ -1212,15 +1041,8 @@ void SampleViewer::draw_contents_EPS(ofstream &file, CameraType camera_type, int file << "% Draw points \n"; file << "pfc setrgbcolor %fill color for points\n"; - int start = 0, count = m_point_count; - if (m_subset_by_coord->checked()) - count = min(count, m_subset_count); - else if (m_subset_by_index->checked()) - { - start = m_first_draw_point_box->value(); - count = m_point_draw_count_box->value(); - } - writeEPSPoints(m_subset_points, start, count, mvp, file, dim_x, dim_y, dim_z); + int2 range = get_draw_range(); + writeEPSPoints(m_subset_points, range.x, range.y, mvp, file, dim_x, dim_y, dim_z); } file << "grestore\n"; @@ -1251,9 +1073,9 @@ void SampleViewer::draw_contents_2D_EPS(ofstream &file) file << "/clc " << (0.5f) << " def %define variable for coarse line color\n"; file << "/flc " << (0.9f) << " def %define variable for fine line color\n"; - Matrix4f model, lookat, view, proj, mvp, mvp2; + float4x4 model, lookat, view, proj, mvp; computeCameraMatrices(model, lookat, view, proj, m_camera[CAMERA_2D], 1.0f); - mvp = proj * lookat * view * model; + mvp = mul(proj, mul(lookat, mul(view, model))); // Generate and render the point set { @@ -1263,30 +1085,29 @@ void SampleViewer::draw_contents_2D_EPS(ofstream &file) for (int y = 0; y < m_num_dimensions; ++y) for (int x = 0; x < y; ++x) { - Matrix4f pos; + float4x4 pos; layout_2d_matrix(pos, m_num_dimensions, x, y); - if (m_fine_grid_checkbox->checked()) + if (m_show_fine_grid) { file << "% Draw fine grid \n"; file << "flc setgray %fill color for fine grid \n"; file << "flw setlinewidth\n"; - drawEPSGrid(mvp * pos, m_point_count, file); + drawEPSGrid(mul(mvp, pos), m_point_count, file); } - if (m_coarse_grid_checkbox->checked()) + if (m_show_coarse_grid) { file << "% Draw coarse grids \n"; file << "clc setgray %fill color for coarse grid \n"; file << "clw setlinewidth\n"; - PointType point_type = (PointType)m_point_type_box->selected_index(); - drawEPSGrid(mvp * pos, m_samplers[point_type]->coarseGridRes(m_point_count), file); + drawEPSGrid(mul(mvp, pos), m_samplers[m_sampler]->coarseGridRes(m_point_count), file); } - if (m_bbox_grid_checkbox->checked()) + if (m_show_bbox) { file << "% Draw bounding box \n"; file << "blc setgray %fill color for bounding box \n"; file << "blw setlinewidth\n"; - drawEPSGrid(mvp * pos, 1, file); + drawEPSGrid(mul(mvp, pos), 1, file); } } @@ -1295,167 +1116,18 @@ void SampleViewer::draw_contents_2D_EPS(ofstream &file) for (int y = 0; y < m_num_dimensions; ++y) for (int x = 0; x < y; ++x) { - Matrix4f pos; + float4x4 pos; layout_2d_matrix(pos, m_num_dimensions, x, y); file << "% Draw (" << x << "," << y << ") points\n"; - int start = 0, count = m_point_count; - if (m_subset_by_coord->checked()) - count = min(count, m_subset_count); - else if (m_subset_by_index->checked()) - { - start = m_first_draw_point_box->value(); - count = m_point_draw_count_box->value(); - } + int2 range = get_draw_range(); - writeEPSPoints(m_subset_points, start, count, mvp * pos, file, x, y, 2); + writeEPSPoints(m_subset_points, range.x, range.y, mul(mvp, pos), file, x, y, 2); } } file << "grestore\n"; } - -bool SampleViewer::keyboard_event(int key, int scancode, int action, int modifiers) -{ - if (Screen::keyboard_event(key, scancode, action, modifiers)) - return true; - - if (!action) - return false; - - switch (key) - { - case GLFW_KEY_ESCAPE: - { - this->set_visible(false); - return true; - } - case ' ': m_parameters_dialog->set_visible(!m_parameters_dialog->visible()); return true; - case 'H': - m_help_dialog->center(); - m_help_dialog->set_visible(!m_help_dialog->visible()); - m_help_button->set_pushed(m_help_dialog->visible()); - return true; - case '1': set_view(CAMERA_XY); return true; - case '2': set_view(CAMERA_YZ); return true; - case '3': set_view(CAMERA_XZ); return true; - case '4': set_view(CAMERA_CURRENT); return true; - case '0': set_view(CAMERA_2D); return true; - case 'P': - m_show_1d_projections->set_checked(!m_show_1d_projections->checked()); - draw_contents(); - return true; - case 'B': - m_bbox_grid_checkbox->set_checked(!m_bbox_grid_checkbox->checked()); - update_GPU_grids(); - return true; - case 'G': - if (modifiers & GLFW_MOD_SHIFT) - m_fine_grid_checkbox->set_checked(!m_fine_grid_checkbox->checked()); - else - m_coarse_grid_checkbox->set_checked(!m_coarse_grid_checkbox->checked()); - update_GPU_grids(); - return true; - case 'R': - if (modifiers & GLFW_MOD_SHIFT) - { - // re-randomize - PointType point_type = (PointType)m_point_type_box->selected_index(); - m_randomize_checkbox->set_checked(true); - m_samplers[point_type]->setRandomized(true); - update_GPU_points(); - draw_all(); - } - else - { - m_randomize_checkbox->set_checked(!m_randomize_checkbox->checked()); - update_GPU_points(); - } - return true; - case 'D': - m_dimension_box->set_value(m_dimension_box->value() + ((modifiers & GLFW_MOD_SHIFT) ? 1 : -1)); - m_num_dimensions = m_dimension_box->value(); - m_subset_axis->set_max_value(m_num_dimensions - 1); - m_x_dimension->set_max_value(m_num_dimensions - 1); - m_y_dimension->set_max_value(m_num_dimensions - 1); - m_z_dimension->set_max_value(m_num_dimensions - 1); - m_subset_axis->set_value(min(m_subset_axis->value(), m_num_dimensions - 1)); - m_x_dimension->set_value(min(m_x_dimension->value(), m_num_dimensions - 1)); - m_y_dimension->set_value(min(m_y_dimension->value(), m_num_dimensions - 1)); - m_z_dimension->set_value(min(m_z_dimension->value(), m_num_dimensions - 1)); - update_GPU_points(); - update_GPU_grids(); - return true; - - case 'T': - { - Sampler *sampler = m_samplers[m_point_type_box->selected_index()]; - OrthogonalArray *oa = dynamic_cast(sampler); - if (oa) - { - int t = m_strength_box->value() + ((modifiers & GLFW_MOD_SHIFT) ? 1 : -1); - t = (t < 2) ? 2 : t; - m_strength_box->set_value(oa->setStrength(t)); - } - update_GPU_points(); - update_GPU_grids(); - return true; - } - - case GLFW_KEY_UP: - case GLFW_KEY_DOWN: - { - int delta = (key == GLFW_KEY_DOWN) ? 1 : -1; - if (modifiers & GLFW_MOD_SHIFT) - { - if (OrthogonalArray *oa = dynamic_cast(m_samplers[m_point_type_box->selected_index()])) - { - m_offset_type_box->set_selected_index( - mod(m_offset_type_box->selected_index() + delta, (int)NUM_OFFSET_TYPES)); - oa->setOffsetType(m_offset_type_box->selected_index()); - - update_GPU_points(); - update_GPU_grids(); - } - } - else - { - m_point_type_box->set_selected_index(mod(m_point_type_box->selected_index() + delta, (int)NUM_POINT_TYPES)); - Sampler *sampler = m_samplers[m_point_type_box->selected_index()]; - OrthogonalArray *oa = dynamic_cast(sampler); - m_strength_label->set_visible(oa); - m_strength_box->set_visible(oa); - m_strength_box->set_enabled(oa); - m_offset_type_label->set_visible(oa); - m_offset_type_box->set_visible(oa); - m_offset_type_box->set_enabled(oa); - m_jitter_slider->set_value(sampler->jitter()); - if (oa) - { - m_offset_type_box->set_selected_index(oa->offsetType()); - m_strength_box->set_value(oa->strength()); - } - perform_layout(); - update_GPU_points(); - update_GPU_grids(); - } - return true; - } - case GLFW_KEY_LEFT: - case GLFW_KEY_RIGHT: - { - float delta = (modifiers & GLFW_MOD_SHIFT) ? 1.0f / 15 : 1.0f / 60; - delta *= (key == GLFW_KEY_RIGHT) ? 1.f : -1.f; - m_target_point_count = mapSlider2Count(std::clamp(m_point_count_slider->value() + delta, 0.0f, 1.0f)); - update_GPU_points(); - update_GPU_grids(); - return true; - } - } - - return false; -} - void SampleViewer::set_view(CameraType view) { m_animate_start_time = (float)glfwGetTime(); @@ -1464,11 +1136,9 @@ void SampleViewer::set_view(CameraType view) m_camera[CAMERA_NEXT].persp_factor = (view == CAMERA_CURRENT) ? 1.0f : 0.0f; m_camera[CAMERA_NEXT].camera_type = view; m_camera[CAMERA_CURRENT].camera_type = (view == m_camera[CAMERA_CURRENT].camera_type) ? view : CAMERA_CURRENT; + m_view = view; - for (int i = CAMERA_XY; i <= CAMERA_CURRENT; ++i) - m_view_btns[i]->set_pushed(false); - m_view_btns[view]->set_pushed(true); - m_gui_refresh = true; + m_params.fpsIdling.fpsIdle = 0.f; // during animation, increase FPS } void SampleViewer::update_current_camera() @@ -1489,38 +1159,33 @@ void SampleViewer::update_current_camera() camera.persp_factor = lerp(camera0.persp_factor, camera1.persp_factor, t); if (t >= 1.0f) { - camera.camera_type = camera1.camera_type; - m_gui_refresh = false; - m_animate_start_time = 0.f; + camera.camera_type = camera1.camera_type; + m_params.fpsIdling.fpsIdle = 9.f; // animation is done, reduce FPS + m_animate_start_time = 0.f; } // if we are dragging the mouse, then just use the current arcball // rotation, otherwise, interpolate between the previous and next camera // orientations + // auto w = static_cast(m_params.backendPointers.glfwWindow); + // if (glfwGetMouseButton(w, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS) if (m_mouse_down) camera.arcball = camera1.arcball; else - camera.arcball.setState(qslerp(camera0.arcball.state(), camera1.arcball.state(), t)); + camera.arcball.set_state(qslerp(camera0.arcball.state(), camera1.arcball.state(), t)); } void SampleViewer::generate_points() { - PointType point_type = (PointType)m_point_type_box->selected_index(); - bool randomize = m_randomize_checkbox->checked(); - float time0 = (float)glfwGetTime(); - Sampler *generator = m_samplers[point_type]; - if (generator->randomized() != randomize) - generator->setRandomized(randomize); + Sampler *generator = m_samplers[m_sampler]; + if (generator->randomized() != m_randomize) + generator->setRandomized(m_randomize); generator->setDimensions(m_num_dimensions); int num_pts = generator->setNumSamples(m_target_point_count); m_point_count = num_pts > 0 ? num_pts : m_target_point_count; - m_first_draw_point_box->set_max_value(m_point_count - 1); - m_first_draw_point_box->set_value(m_first_draw_point_box->value()); - m_point_draw_count_box->set_max_value(m_point_count - m_first_draw_point_box->value()); - m_point_draw_count_box->set_value(m_point_draw_count_box->value()); float time1 = (float)glfwGetTime(); float time_diff1 = ((time1 - time0) * 1000.0f); @@ -1534,14 +1199,17 @@ void SampleViewer::generate_points() vector r(m_num_dimensions, 0.5f); generator->sample(r.data(), i); for (int j = 0; j < m_points.sizeY(); ++j) + { m_points(i, j) = r[j] - 0.5f; + // HelloImGui::Log(HelloImGui::LogLevel::Debug, "%f", m_points(i, j)); + } } float time2 = (float)glfwGetTime(); float time_diff2 = ((time2 - time1) * 1000.0f); - m_time_strings[0] = tfm::format("Reset and randomize: %3.3f ms", time_diff1); - m_time_strings[1] = tfm::format("Sampling: %3.3f ms", time_diff2); - m_time_strings[2] = tfm::format("Total generation time: %3.3f ms", time_diff1 + time_diff2); + m_time_strings[0] = fmt::format("Reset and m_randomize: {:3.3f} ms", time_diff1); + m_time_strings[1] = fmt::format("Sampling: {:3.3f} ms", time_diff2); + m_time_strings[2] = fmt::format("Total generation time: {:3.3f} ms", time_diff1 + time_diff2); } void SampleViewer::populate_point_subset() @@ -1551,7 +1219,7 @@ void SampleViewer::populate_point_subset() // m_subset_points = m_points; m_subset_count = m_point_count; - if (m_subset_by_coord->checked()) + if (m_subset_by_coord) { // cout << "only accepting points where the coordinates along the " << m_subset_axis->value() // << " axis are within: [" @@ -1560,11 +1228,10 @@ void SampleViewer::populate_point_subset() m_subset_count = 0; for (int i = 0; i < m_points.sizeX(); ++i) { - float v = m_points(i, m_subset_axis->value()); + float v = m_points(i, m_subset_axis); // cout << v << endl; v += 0.5f; - if (v >= (m_subset_level->value() + 0.0f) / m_num_subset_levels->value() && - v < (m_subset_level->value() + 1.0f) / m_num_subset_levels->value()) + if (v >= (m_subset_level + 0.0f) / m_num_subset_levels && v < (m_subset_level + 1.0f) / m_num_subset_levels) { // copy all dimensions (rows) of point i for (int j = 0; j < m_subset_points.sizeY(); ++j) @@ -1575,12 +1242,11 @@ void SampleViewer::populate_point_subset() } for (size_t i = 0; i < m_3d_points.size(); ++i) - m_3d_points[i] = - Vector3f{m_subset_points(i, m_x_dimension->value()), m_subset_points(i, m_y_dimension->value()), - m_subset_points(i, m_z_dimension->value())}; + m_3d_points[i] = float3{m_subset_points(i, m_dimension.x), m_subset_points(i, m_dimension.y), + m_subset_points(i, m_dimension.z)}; } -void SampleViewer::generate_grid(vector &positions, int grid_res) +void SampleViewer::generate_grid(vector &positions, int grid_res) { int fine_grid_res = 1; int idx = 0; @@ -1592,44 +1258,41 @@ void SampleViewer::generate_grid(vector &positions, int grid_res) { for (int j = 0; j < fine_grid_res; ++j) { - positions[idx++] = Vector3f(j * fine_scale - 0.5f, i * coarse_scale - 0.5f, z * 0.5f); - positions[idx++] = Vector3f((j + 1) * fine_scale - 0.5f, i * coarse_scale - 0.5f, z * 0.5f); - positions[idx++] = Vector3f(i * coarse_scale - 0.5f, j * fine_scale - 0.5f, z * 0.5f); - positions[idx++] = Vector3f(i * coarse_scale - 0.5f, (j + 1) * fine_scale - 0.5f, z * 0.5f); + positions[idx++] = float3(j * fine_scale - 0.5f, i * coarse_scale - 0.5f, z * 0.5f); + positions[idx++] = float3((j + 1) * fine_scale - 0.5f, i * coarse_scale - 0.5f, z * 0.5f); + positions[idx++] = float3(i * coarse_scale - 0.5f, j * fine_scale - 0.5f, z * 0.5f); + positions[idx++] = float3(i * coarse_scale - 0.5f, (j + 1) * fine_scale - 0.5f, z * 0.5f); } } } -namespace -{ - -void computeCameraMatrices(Matrix4f &model, Matrix4f &lookat, Matrix4f &view, Matrix4f &proj, const CameraParameters &c, - float window_aspect) +static void computeCameraMatrices(float4x4 &model, float4x4 &lookat, float4x4 &view, float4x4 &proj, + const CameraParameters &c, float window_aspect) { - model = Matrix4f::scale(Vector3f(c.zoom)); + model = scaling_matrix(float3(c.zoom)); if (c.camera_type == CAMERA_XY || c.camera_type == CAMERA_2D) - model = Matrix4f::scale(Vector3f(1, 1, 0)) * model; + model = mul(scaling_matrix(float3(1, 1, 0)), model); if (c.camera_type == CAMERA_XZ) - model = Matrix4f::scale(Vector3f(1, 0, 1)) * model; + model = mul(scaling_matrix(float3(1, 0, 1)), model); if (c.camera_type == CAMERA_YZ) - model = Matrix4f::scale(Vector3f(0, 1, 1)) * model; + model = mul(scaling_matrix(float3(0, 1, 1)), model); - float fH = tan(c.view_angle / 360.0f * M_PI) * c.dnear; + float fH = std::tan(c.view_angle / 360.0f * M_PI) * c.dnear; float fW = fH * window_aspect; - float oFF = c.eye.z() / c.dnear; - Matrix4f orth = Matrix4f::ortho(-fW * oFF, fW * oFF, -fH * oFF, fH * oFF, c.dnear, c.dfar); - Matrix4f frust = frustum(-fW, fW, -fH, fH, c.dnear, c.dfar); + float oFF = c.eye.z / c.dnear; + float4x4 orth = linalg::ortho_matrix(-fW * oFF, fW * oFF, -fH * oFF, fH * oFF, c.dnear, c.dfar); + float4x4 frust = linalg::frustum_matrix(-fW, fW, -fH, fH, c.dnear, c.dfar); proj = lerp(orth, frust, c.persp_factor); - lookat = Matrix4f::look_at(c.eye, c.center, c.up); + lookat = linalg::lookat_matrix(c.eye, c.center, c.up); view = c.arcball.matrix(); } -void drawEPSGrid(const Matrix4f &mvp, int grid_res, ofstream &file) +static void drawEPSGrid(const float4x4 &mvp, int grid_res, ofstream &file) { - Vector4f vA4d, vB4d; - Vector2f vA, vB; + float4 vA4d, vB4d; + float2 vA, vB; int fine_grid_res = 2; float coarse_scale = 1.f / grid_res, fine_scale = 1.f / fine_grid_res; @@ -1637,20 +1300,20 @@ void drawEPSGrid(const Matrix4f &mvp, int grid_res, ofstream &file) // draw the bounding box // if (grid_res == 1) { - Vector4f c004d = mvp * Vector4f(0.0f - 0.5f, 0.0f - 0.5f, 0.0f, 1.0f); - Vector4f c104d = mvp * Vector4f(1.0f - 0.5f, 0.0f - 0.5f, 0.0f, 1.0f); - Vector4f c114d = mvp * Vector4f(1.0f - 0.5f, 1.0f - 0.5f, 0.0f, 1.0f); - Vector4f c014d = mvp * Vector4f(0.0f - 0.5f, 1.0f - 0.5f, 0.0f, 1.0f); - Vector2f c00 = Vector2f(c004d.x() / c004d.w(), c004d.y() / c004d.w()); - Vector2f c10 = Vector2f(c104d.x() / c104d.w(), c104d.y() / c104d.w()); - Vector2f c11 = Vector2f(c114d.x() / c114d.w(), c114d.y() / c114d.w()); - Vector2f c01 = Vector2f(c014d.x() / c014d.w(), c014d.y() / c014d.w()); + float4 c004d = mul(mvp, float4{0.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); + float4 c104d = mul(mvp, float4{1.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); + float4 c114d = mul(mvp, float4{1.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); + float4 c014d = mul(mvp, float4{0.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); + float2 c00 = float2(c004d.x / c004d.w, c004d.y / c004d.w); + float2 c10 = float2(c104d.x / c104d.w, c104d.y / c104d.w); + float2 c11 = float2(c114d.x / c114d.w, c114d.y / c114d.w); + float2 c01 = float2(c014d.x / c014d.w, c014d.y / c014d.w); file << "newpath\n"; - file << c00.x() << " " << c00.y() << " moveto\n"; - file << c10.x() << " " << c10.y() << " lineto\n"; - file << c11.x() << " " << c11.y() << " lineto\n"; - file << c01.x() << " " << c01.y() << " lineto\n"; + file << c00.x << " " << c00.y << " moveto\n"; + file << c10.x << " " << c10.y << " lineto\n"; + file << c11.x << " " << c11.y << " lineto\n"; + file << c01.x << " " << c01.y << " lineto\n"; file << "closepath\n"; file << "stroke\n"; } @@ -1661,20 +1324,20 @@ void drawEPSGrid(const Matrix4f &mvp, int grid_res, ofstream &file) file << "newpath\n"; for (int j = 0; j < fine_grid_res; j++) { - vA4d = mvp * Vector4f(j * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f); - vB4d = mvp * Vector4f((j + 1) * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f); + vA4d = mul(mvp, float4{j * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f}); + vB4d = mul(mvp, float4{(j + 1) * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f}); - vA = Vector2f(vA4d.x() / vA4d.w(), vA4d.y() / vA4d.w()); - vB = Vector2f(vB4d.x() / vB4d.w(), vB4d.y() / vB4d.w()); + vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); + vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); - file << vA.x() << " " << vA.y(); + file << vA.x << " " << vA.y; if (j == 0) file << " moveto\n"; else file << " lineto\n"; - file << vB.x() << " " << vB.y(); + file << vB.x << " " << vB.y; file << " lineto\n"; } file << "stroke\n"; @@ -1683,35 +1346,40 @@ void drawEPSGrid(const Matrix4f &mvp, int grid_res, ofstream &file) file << "newpath\n"; for (int j = 0; j < fine_grid_res; j++) { - vA4d = mvp * Vector4f(i * coarse_scale - 0.5f, j * fine_scale - 0.5f, 0.0f, 1.0f); - vB4d = mvp * Vector4f(i * coarse_scale - 0.5f, (j + 1) * fine_scale - 0.5f, 0.0f, 1.0f); + vA4d = mul(mvp, float4{i * coarse_scale - 0.5f, j * fine_scale - 0.5f, 0.0f, 1.0f}); + vB4d = mul(mvp, float4{i * coarse_scale - 0.5f, (j + 1) * fine_scale - 0.5f, 0.0f, 1.0f}); - vA = Vector2f(vA4d.x() / vA4d.w(), vA4d.y() / vA4d.w()); - vB = Vector2f(vB4d.x() / vB4d.w(), vB4d.y() / vB4d.w()); + vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); + vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); - file << vA.x() << " " << vA.y(); + file << vA.x << " " << vA.y; if (j == 0) file << " moveto\n"; else file << " lineto\n"; - file << vB.x() << " " << vB.y(); + file << vB.x << " " << vB.y; file << " lineto\n"; } file << "stroke\n"; } } -void writeEPSPoints(const Array2d &points, int start, int count, const Matrix4f &mvp, ofstream &file, int dim_x, - int dim_y, int dim_z) +static void writeEPSPoints(const Array2d &points, int start, int count, const float4x4 &mvp, ofstream &file, + int dim_x, int dim_y, int dim_z) { for (int i = start; i < start + count; i++) { - Vector4f v4d = mvp * Vector4f(points(i, dim_x), points(i, dim_y), points(i, dim_z), 1.0f); - Vector2f v2d(v4d.x() / v4d.w(), v4d.y() / v4d.w()); - file << v2d.x() << " " << v2d.y() << " p\n"; + float4 v4d = mul(mvp, float4{points(i, dim_x), points(i, dim_y), points(i, dim_z), 1.0f}); + float2 v2d(v4d.x / v4d.w, v4d.y / v4d.w); + file << v2d.x << " " << v2d.y << " p\n"; } } -} // namespace +int main(int, char **) +{ + SampleViewer viewer; + viewer.run(); + return 0; +} diff --git a/gui/SampleViewer.h b/gui/SampleViewer.h index d585246..71f21dd 100644 --- a/gui/SampleViewer.h +++ b/gui/SampleViewer.h @@ -2,19 +2,43 @@ \author Wojciech Jarosz */ -#include -#include -#include -#include -#include -#include - +#include "linalg.h" +using namespace linalg::aliases; + +// define extra conversion here before including imgui, don't do it in the imconfig.h +#define IM_VEC2_CLASS_EXTRA \ + constexpr ImVec2(const float2 &f) : x(f.x), y(f.y) \ + { \ + } \ + operator float2() const \ + { \ + return float2(x, y); \ + } \ + constexpr ImVec2(const int2 &i) : x(i.x), y(i.y) \ + { \ + } \ + operator int2() const \ + { \ + return int2((int)x, (int)y); \ + } + +#define IM_VEC4_CLASS_EXTRA \ + constexpr ImVec4(const float4 &f) : x(f.x), y(f.y), z(f.z), w(f.w) \ + { \ + } \ + operator float4() const \ + { \ + return float4(x, y, z, w); \ + } + +#include "arcball.h" +#include "gui_app.h" +#include "shader.h" #include #include +#include +#include -#include "utils.h" - -using namespace nanogui; using namespace std; enum PointType @@ -51,8 +75,8 @@ enum CameraType CAMERA_XY = 0, CAMERA_YZ, CAMERA_XZ, - CAMERA_2D, CAMERA_CURRENT, + CAMERA_2D, CAMERA_PREVIOUS, CAMERA_NEXT, NUM_CAMERA_TYPES @@ -64,23 +88,44 @@ struct CameraParameters float persp_factor = 0.0f; float zoom = 1.0f, view_angle = 35.0f; float dnear = 0.05f, dfar = 1000.0f; - Vector3f eye = Vector3f(0.0f, 0.0f, 2.0f); - Vector3f center = Vector3f(0.0f, 0.0f, 0.0f); - Vector3f up = Vector3f(0.0f, 1.0f, 0.0f); + float3 eye = float3{0.0f, 0.0f, 2.0f}; + float3 center = float3{0.0f, 0.0f, 0.0f}; + float3 up = float3{0.0f, 1.0f, 0.0f}; CameraType camera_type = CAMERA_CURRENT; }; -class SampleViewer : public Screen +enum TextAlign : int +{ + // Horizontal align + TextAlign_LEFT = 1 << 0, // Default, align text horizontally to left. + TextAlign_CENTER = 1 << 1, // Align text horizontally to center. + TextAlign_RIGHT = 1 << 2, // Align text horizontally to right. + // Vertical align + TextAlign_TOP = 1 << 3, // Align text vertically to top. + TextAlign_MIDDLE = 1 << 4, // Align text vertically to middle. + TextAlign_BOTTOM = 1 << 5, // Align text vertically to bottom. +}; + +class SampleViewer : public GUIApp { public: SampleViewer(); - ~SampleViewer(); + virtual ~SampleViewer(); + + void mouse_motion_event(const float2 &pos); + + void initialize_GL() override; + void draw() override; + void draw_gui(); - bool mouse_motion_event(const Vector2i &p, const Vector2i &rel, int button, int modifiers); - bool mouse_button_event(const Vector2i &p, int button, bool down, int modifiers); - bool scroll_event(const Vector2i &p, const Vector2f &rel); - void draw_contents(); - bool keyboard_event(int key, int scancode, int action, int modifiers); + bool mouse_button_event(const int2 &p, int button, bool down, int modifiers) override; + bool mouse_motion_event(const int2 &p, const int2 &rel, int button, int modifiers) override; + bool scroll_event(const int2 &p, const float2 &rel) override; + + // bool keyboard_event(int key, int scancode, int action, int modifiers) override; + // bool resize_event(const int2 &size) override; + // bool focus_event(bool focused) override; + // bool maximize_event(bool maximized) override; private: void draw_contents_EPS(ofstream &file, CameraType camera, int dimX, int dimY, int dimZ); @@ -89,56 +134,51 @@ class SampleViewer : public Screen void update_GPU_grids(); void set_view(CameraType view); void update_current_camera(); - void initialize_GUI(); + void draw_editor(); void generate_points(); void populate_point_subset(); - void generate_grid(vector &positions, int gridRes); - void draw_text(const Vector2i &pos, const std::string &text, const Color &col = Color(1.0f, 1.0f, 1.0f, 1.0f), - int fontSize = 10, int fixedWidth = 0, int align = NVG_ALIGN_RIGHT | NVG_ALIGN_BOTTOM) const; - void draw_points(const Matrix4f &mvp, const Vector3f &color, bool showPointNums = false, - bool showPointCoords = false); - void draw_grid(const Matrix4f &mvp, float alpha, uint32_t offset, uint32_t count); - void draw_2D_points_and_grid(const Matrix4f &mvp, int dimX, int dimY, int plotIndex); - - // GUI elements - Window *m_parameters_dialog = nullptr; - Window *m_help_dialog = nullptr; - Button *m_help_button = nullptr; - Slider *m_point_count_slider, *m_point_radius_slider, *m_point_draw_count_slider, *m_jitter_slider; - IntBox *m_dimension_box, *m_x_dimension, *m_y_dimension, *m_z_dimension, *m_point_count_box, - *m_first_draw_point_box, *m_point_draw_count_box, *m_subset_axis, *m_num_subset_levels, *m_subset_level; - ComboBox *m_point_type_box; - - // Extra OA parameters - Label *m_strength_label; - IntBox *m_strength_box; - Label *m_offset_type_label; - ComboBox *m_offset_type_box; - - CheckBox *m_coarse_grid_checkbox, *m_fine_grid_checkbox, *m_bbox_grid_checkbox, *m_randomize_checkbox, - *m_subset_by_index, *m_subset_by_coord, *m_show_1d_projections, *m_show_point_nums, *m_show_point_coords; - Button *m_view_btns[CAMERA_CURRENT + 1]; - Button *m_scale_radius_with_points; - vector m_time_strings; + void generate_grid(vector &positions, int gridRes); + void draw_text(const int2 &pos, const std::string &text, const float4 &col, int fontSize, int fixedWidth, + int align = TextAlign_RIGHT | TextAlign_BOTTOM) const; + void draw_points(const float4x4 &mvp, const float3 &color); + void draw_grid(const float4x4 &mvp, float alpha, uint32_t offset, uint32_t count); + void draw_2D_points_and_grid(const float4x4 &mvp, int dimX, int dimY, int plotIndex); + void clear_and_setup_viewport(); + int2 get_draw_range() const; /// X, Y, Z, and user-defined cameras CameraParameters m_camera[NUM_CAMERA_TYPES]; + int m_view = CAMERA_XY; + + int m_num_dimensions = 3; + int3 m_dimension{0, 1, 2}; + Array2d m_points, m_subset_points; + vector m_3d_points; + int m_target_point_count = 256, m_point_count = 256; + int m_subset_count = 0, m_coarse_line_count, m_fine_line_count; + + vector m_samplers; + int m_sampler = 0; + bool m_randomize = false; + float m_jitter = 80.f; + float m_radius = 0.5f; + bool m_scale_radius_with_points = false; + bool m_show_1d_projections = false, m_show_point_nums = false, m_show_point_coords = false, + m_show_coarse_grid = false, m_show_fine_grid = false, m_show_bbox = false; + Shader *m_point_shader = nullptr, *m_grid_shader = nullptr, *m_point_2d_shader = nullptr; + + int2 m_viewport_pos, m_viewport_pos_GL, m_viewport_size; float m_animate_start_time = 0.0f; bool m_mouse_down = false; - int m_num_dimensions = 3; - - nanogui::ref m_render_pass; - nanogui::ref m_point_shader; - nanogui::ref m_grid_shader; - nanogui::ref m_point_2d_shader; - Array2d m_points, m_subset_points; - vector m_3d_points; - int m_target_point_count, m_point_count, m_subset_count = 0, m_coarse_line_count, m_fine_line_count; - vector m_samplers; + bool m_subset_by_index = false; + int m_first_draw_point = 0; + int m_point_draw_count = 1; + bool m_subset_by_coord = false; + int m_subset_axis = 0; + int m_num_subset_levels = 1; + int m_subset_level = 0; - std::thread m_gui_refresh_thread; - std::atomic m_gui_refresh = false; - std::atomic m_join_requested = false; + vector m_time_strings; }; diff --git a/gui/Well.cpp b/gui/Well.cpp deleted file mode 100644 index 0ea64b7..0000000 --- a/gui/Well.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright (C) Wojciech Jarosz. All rights reserved. -// Use of this source code is governed by a BSD-style license that can -// be found in the LICENSE.txt file. -// - -#include "Well.h" -#include - -using namespace nanogui; - -Well::Well(Widget *parent, float radius, const Color &inner, const Color &outer) : - Widget(parent), m_radius(radius), m_innerColor(inner), m_outerColor(outer) -{ -} - -void Well::draw(NVGcontext *ctx) -{ - NVGpaint paint = nvgBoxGradient(ctx, m_pos.x() + 1, m_pos.y() + 1, m_size.x() - 2, m_size.y() - 2, m_radius, - m_radius + 1, m_innerColor, m_outerColor); - nvgBeginPath(ctx); - nvgRoundedRect(ctx, m_pos.x(), m_pos.y(), m_size.x(), m_size.y(), m_radius); - nvgFillPaint(ctx, paint); - nvgFill(ctx); - - Widget::draw(ctx); -} \ No newline at end of file diff --git a/gui/Well.h b/gui/Well.h deleted file mode 100644 index 8e8f003..0000000 --- a/gui/Well.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// Copyright (C) Wojciech Jarosz. All rights reserved. -// Use of this source code is governed by a BSD-style license that can -// be found in the LICENSE.txt file. -// - -#pragma once - -#include - -/// A simple container that draws a rounded background of a specified outer and -/// inner color -NAMESPACE_BEGIN(nanogui) -class Well : public Widget -{ -public: - Well(Widget *parent, float radius = 3.0f, const Color &inner = Color(0, 32), const Color &outer = Color(0, 92)); - - /// Return the inner well color - const Color &inner_color() const - { - return m_innerColor; - } - /// Set the inner well color - void set_inner_color(const Color &innerColor) - { - m_innerColor = innerColor; - } - - /// Return the outer well color - const Color &outer_color() const - { - return m_outerColor; - } - /// Set the outer well color - void set_outer_color(const Color &outerColor) - { - m_outerColor = outerColor; - } - - void draw(NVGcontext *ctx) override; - -protected: - float m_radius; - Color m_innerColor, m_outerColor; -}; -NAMESPACE_END(nanogui) diff --git a/gui/arcball.h b/gui/arcball.h new file mode 100644 index 0000000..25f05b1 --- /dev/null +++ b/gui/arcball.h @@ -0,0 +1,143 @@ +#include "linalg.h" +#include + +namespace linalg +{ +template +linalg::mat ortho_matrix(T left, T right, T bottom, T top, T near_, T far_) +{ + T rl = 1 / (right - left), tb = 1 / (top - bottom), fn = 1 / (far_ - near_); + return {{2 * rl, 0, 0, 0}, + {0, 2 * tb, 0, 0}, + {0, 0, -2 * fn, 0}, + {-(right + left) * rl, -(top + bottom) * tb, -(far_ + near_) * fn, 1}}; +} + +} // namespace linalg + +//! Based on the arcball in nanogui 1 +struct Arcball +{ + using Quatf = linalg::vec; + using Vec2i = linalg::vec; + using Vec3f = linalg::vec; + using Mat44f = linalg::mat; + + Arcball(float speed_factor = 2.f) : + m_active(false), m_last_pos(0, 0), m_size(0, 0), m_quat(0, 0, 0, 1), m_incr(0, 0, 0, 1), + m_speed_factor(speed_factor) + { + } + + /** + * \brief The internal rotation of the Arcball. + * + * Call \ref Arcball::matrix for drawing loops, this method will not return + * any updates while \ref m_active is ``true``. + */ + Quatf &state() + { + return m_quat; + } + + /// ``const`` version of \ref Arcball::state. + const Quatf &state() const + { + return m_quat; + } + + /// Sets the rotation of this Arcball. The Arcball will be marked as **not** active. + void set_state(const Quatf &state) + { + m_active = false; + m_last_pos = {0, 0}; + m_quat = state; + m_incr = {0, 0, 0, 1}; + } + + void set_size(Vec2i size) + { + m_size = size; + } + + const Vec2i &size() const + { + return m_size; + } + + void button(Vec2i pos, bool pressed) + { + m_active = pressed; + m_last_pos = pos; + if (!m_active) + m_quat = linalg::normalize(linalg::qmul(m_incr, m_quat)); + m_incr = {0, 0, 0, 1}; + } + + bool motion(Vec2i pos) + { + if (!m_active) + return false; + + /* Based on the rotation controller from AntTweakBar */ + float inv_min_dim = 1.f / std::min(m_size.x, m_size.y); + float w = (float)m_size.x, h = (float)m_size.y; + + float ox = (m_speed_factor * (2 * m_last_pos.x - w) + w) - w - 1.f; + float tx = (m_speed_factor * (2 * pos.x - w) + w) - w - 1.f; + float oy = (m_speed_factor * (h - 2 * m_last_pos.y) + h) - h - 1.f; + float ty = (m_speed_factor * (h - 2 * pos.y) + h) - h - 1.f; + + ox *= inv_min_dim; + oy *= inv_min_dim; + tx *= inv_min_dim; + ty *= inv_min_dim; + + Vec3f v0{ox, oy, 1.f}, v1{tx, ty, 1.f}; + if (linalg::length2(v0) > 1e-4f && linalg::length2(v1) > 1e-4f) + { + v0 = linalg::normalize(v0); + v1 = linalg::normalize(v1); + Vec3f axis = linalg::cross(v0, v1); + float sa = std::sqrt(dot(axis, axis)), ca = linalg::dot(v0, v1), angle = std::atan2(sa, ca); + if (tx * tx + ty * ty > 1.f) + angle *= 1.f + 0.2f * (std::sqrt(tx * tx + ty * ty) - 1.f); + m_incr = linalg::rotation_quat(linalg::normalize(axis), angle); + if (!std::isfinite(linalg::length(m_incr))) + m_incr = {0, 0, 0, 1}; + } + return true; + } + + Mat44f matrix() const + { + auto m = linalg::qmat(linalg::qmul(m_incr, m_quat)); + return {{m.x, 0.f}, {m.y, 0.f}, {m.z, 0.f}, {0.f, 0.f, 0.f, 1.f}}; + } + +private: + /// Whether or not this Arcball is currently active. + bool m_active; + + /// The last click position (which triggered the Arcball to be active / non-active). + Vec2i m_last_pos; + + /// The size of this Arcball. + Vec2i m_size; + + /** + * The current stable state. When this Arcball is active, represents the + * state of this Arcball when \ref Arcball::button was called with + * ``down = true``. + */ + Quatf m_quat; + + /// When active, tracks the overall update to the state. Identity when non-active. + Quatf m_incr; + + /** + * The speed at which this Arcball rotates. Smaller values mean it rotates + * more slowly, higher values mean it rotates more quickly. + */ + float m_speed_factor; +}; \ No newline at end of file diff --git a/gui/gui_app.cpp b/gui/gui_app.cpp new file mode 100644 index 0000000..8c666ac --- /dev/null +++ b/gui/gui_app.cpp @@ -0,0 +1,297 @@ + +#include "gui_app.h" +#include "GLFW/glfw3.h" +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +GUIApp *GUIApp::s_instance = nullptr; + +// Calculate pixel ratio for hi-dpi devices. +static float get_pixel_ratio(GLFWwindow *window) +{ +#ifdef __EMSCRIPTEN__ + return emscripten_get_device_pixel_ratio(); +#else + float xscale, yscale; + glfwGetWindowContentScale(window, &xscale, &yscale); + return xscale; +#endif +} + +static GUIApp *get_app(GLFWwindow *w) +{ + if (auto p = glfwGetWindowUserPointer(w)) + return static_cast(glfwGetWindowUserPointer(w)); + else + throw std::runtime_error("Expected the GLFW user pointer to be set."); +} + +GUIApp::GUIApp() +{ + m_last_interaction = glfwGetTime(); + s_instance = this; + m_params.callbacks.PostInit = [this]() + { + register_callbacks(); + initialize_GL(); + }; + m_params.callbacks.CustomBackground = [this]() { draw(); }; +} + +GUIApp::~GUIApp() +{ +} + +void GUIApp::initialize_GL() +{ +} + +void GUIApp::register_callbacks() +{ + auto w = static_cast(m_params.backendPointers.glfwWindow); + + glfwGetWindowSize(w, &m_size[0], &m_size[1]); + glfwGetFramebufferSize(w, &m_fbsize[0], &m_fbsize[1]); + m_pixel_ratio = get_pixel_ratio(w); + resize_callback_event(); + + // store the GUIApp pointer so we can grab it in the callbacks + glfwSetWindowUserPointer(w, this); + + // Propagate GLFW events to the appropriate virtual functions + glfwSetCursorPosCallback(w, + [](GLFWwindow *w, double xf, double yf) + { + if (ImGui::GetIO().WantCaptureMouse) + return; + + get_app(w)->cursor_pos_event(xf, yf); + }); + + glfwSetMouseButtonCallback(w, + [](GLFWwindow *w, int button, int action, int mods) + { + if (ImGui::GetIO().WantCaptureMouse) + return; + get_app(w)->mouse_button_callback_event(button, action, mods); + }); + + glfwSetScrollCallback(w, + [](GLFWwindow *w, double xoffset, double yoffset) + { + if (ImGui::GetIO().WantCaptureMouse) + return; + + get_app(w)->scroll_callback_event(xoffset, yoffset); + }); + + glfwSetCharCallback(w, + [](GLFWwindow *w, unsigned int c) + { + if (ImGui::GetIO().WantCaptureKeyboard) + return; + + get_app(w)->char_callback_event(c); + }); + + glfwSetKeyCallback(w, + [](GLFWwindow *w, int key, int scancode, int action, int mods) + { + if (ImGui::GetIO().WantCaptureKeyboard) + return; + + get_app(w)->key_callback_event(key, scancode, action, mods); + }); + + glfwSetDropCallback(w, [](GLFWwindow *w, int nb, const char **p) { get_app(w)->drop_callback_event(nb, p); }); + + // React to framebuffer size events -- includes window size events and also catches things like dragging a window + // from a Retina-capable screen to a normal screen on Mac OS X + glfwSetFramebufferSizeCallback(w, [](GLFWwindow *w, int, int) { get_app(w)->resize_callback_event(); }); + + // notify when the screen has lost focus (e.g. application switch) + glfwSetWindowFocusCallback(w, [](GLFWwindow *w, int focused) { get_app(w)->focus_event(focused != 0); }); + + // notify when the screen was maximized or restored + glfwSetWindowMaximizeCallback(w, [](GLFWwindow *w, int maximized) { get_app(w)->maximize_event(maximized != 0); }); + + glfwSetWindowContentScaleCallback(w, + [](GLFWwindow *w, float, float) + { + auto app = get_app(w); + app->m_pixel_ratio = get_pixel_ratio(w); + app->resize_callback_event(); + }); +} + +void GUIApp::cursor_pos_event(double x, double y) +{ + int2 p{x, y}; + +#if defined(_WIN32) || defined(__linux__) || defined(EMSCRIPTEN) + p = int2(float2(p) / m_pixel_ratio); +#endif + + // m_last_interaction = glfwGetTime(); + try + { + p -= int2{1, 2}; + + bool ret = mouse_motion_event(p, p - m_mouse_pos, m_mouse_state, m_modifiers); + m_mouse_pos = p; + m_redraw |= ret; + } + catch (const std::exception &e) + { + std::cerr << "Caught exception in event handler: " << e.what() << std::endl; + } +} + +void GUIApp::mouse_button_callback_event(int button, int action, int modifiers) +{ + m_modifiers = modifiers; + m_last_interaction = glfwGetTime(); + +#if defined(__APPLE__) + if (button == GLFW_MOUSE_BUTTON_1 && modifiers == GLFW_MOD_CONTROL) + button = GLFW_MOUSE_BUTTON_2; +#endif + + try + { + if (action == GLFW_PRESS) + m_mouse_state |= 1 << button; + else + m_mouse_state &= ~(1 << button); + + m_redraw |= mouse_button_event(m_mouse_pos, button, action == GLFW_PRESS, m_modifiers); + } + catch (const std::exception &e) + { + std::cerr << "Caught exception in event handler: " << e.what() << std::endl; + } +} + +void GUIApp::scroll_callback_event(double x, double y) +{ + m_last_interaction = glfwGetTime(); + try + { + m_redraw |= scroll_event(m_mouse_pos, float2(x, y)); + } + catch (const std::exception &e) + { + std::cerr << "Caught exception in event handler: " << e.what() << std::endl; + } +} + +void GUIApp::char_callback_event(unsigned int codepoint) +{ + m_last_interaction = glfwGetTime(); + try + { + m_redraw |= keyboard_character_event(codepoint); + } + catch (const std::exception &e) + { + std::cerr << "Caught exception in event handler: " << e.what() << std::endl; + } +} + +void GUIApp::key_callback_event(int key, int scancode, int action, int mods) +{ + m_last_interaction = glfwGetTime(); + try + { + m_redraw |= keyboard_event(key, scancode, action, mods); + } + catch (const std::exception &e) + { + std::cerr << "Caught exception in event handler: " << e.what() << std::endl; + } +} + +void GUIApp::drop_callback_event(int count, const char **filenames) +{ + std::vector arg(count); + for (int i = 0; i < count; ++i) + arg[i] = filenames[i]; + m_redraw |= drop_event(arg); +} + +void GUIApp::resize_callback_event() +{ + auto window = static_cast(m_params.backendPointers.glfwWindow); +#if defined(EMSCRIPTEN) + return; +#endif + int2 fb_size, size; + glfwGetFramebufferSize(window, &fb_size[0], &fb_size[1]); + glfwGetWindowSize(window, &size[0], &size[1]); + if (fb_size == int2{0, 0} || size == int2{0, 0}) + return; + + m_fbsize = fb_size; + m_size = size; + +#if defined(_WIN32) || defined(__linux__) || defined(EMSCRIPTEN) + m_size = int2(float2(m_size) / m_pixel_ratio); +#endif + + m_last_interaction = glfwGetTime(); + +#if defined(NANOGUI_USE_METAL) + if (m_depth_stencil_texture) + m_depth_stencil_texture->resize(fb_size); +#endif + + try + { + resize_event(m_size); + } + catch (const std::exception &e) + { + std::cerr << "Caught exception in event handler: " << e.what() << std::endl; + } + // redraw(); +} + +bool GUIApp::resize_event(const int2 &size) +{ + return false; +} +bool GUIApp::maximize_event(bool maximized) +{ + return false; +} +bool GUIApp::mouse_button_event(const int2 &p, int button, bool down, int modifiers) +{ + return false; +} +bool GUIApp::mouse_motion_event(const int2 &p, const int2 &rel, int button, int modifiers) +{ + return false; +} +bool GUIApp::scroll_event(const int2 &p, const float2 &rel) +{ + return false; +} +bool GUIApp::focus_event(bool focused) +{ + return false; +} +bool GUIApp::drop_event(const std::vector &) +{ + return false; +} +bool GUIApp::keyboard_event(int key, int scancode, int action, int modifiers) +{ + return false; +} +bool GUIApp::keyboard_character_event(unsigned int codepoint) +{ + return false; +} diff --git a/gui/gui_app.h b/gui/gui_app.h new file mode 100644 index 0000000..ee3dd72 --- /dev/null +++ b/gui/gui_app.h @@ -0,0 +1,81 @@ + +#pragma once + +#include "hello_imgui/hello_imgui.h" +#include "linalg.h" +#include +using namespace linalg::aliases; + +//! Base class for all applications. +class GUIApp +{ +public: + GUIApp(); + ~GUIApp(); + + /// Singleton GUIApp instance + static GUIApp *instance() + { + return s_instance; + } + + void run() + { + HelloImGui::Run(m_params); + } + + virtual void initialize_GL(); + virtual void draw() = 0; + + /// Handle a mouse button event (default implementation: do nothing) + virtual bool mouse_button_event(const int2 &p, int button, bool down, int modifiers); + + /// Handle a mouse motion event (default implementation: do nothing) + virtual bool mouse_motion_event(const int2 &p, const int2 &rel, int button, int modifiers); + + /// Handle a mouse scroll event (default implementation: do nothing) + virtual bool scroll_event(const int2 &p, const float2 &rel); + + /// Handle a focus change event (default implementation: do nothing) + virtual bool focus_event(bool focused); + + /// Handle a file drop event (default implementation: do nothing) + virtual bool drop_event(const std::vector &filenames); + + /// Handle a keyboard event (default implementation: do nothing) + virtual bool keyboard_event(int key, int scancode, int action, int modifiers); + + /// Handle text input (UTF-32 format) (default implementation: do nothing) + virtual bool keyboard_character_event(unsigned int codepoint); + + /// Window resize event handler + virtual bool resize_event(const int2 &size); + + /// Window maximize event handler (default implementation: do nothing) + virtual bool maximize_event(bool maximized); + + /// Return the ratio between pixel and device coordinates (e.g. >= 2 on Mac Retina displays) + float pixel_ratio() const + { + return m_pixel_ratio; + } + +protected: + void cursor_pos_event(double xf, double yf); + void mouse_button_callback_event(int button, int action, int mods); + void resize_callback_event(); + void scroll_callback_event(double xoffset, double yoffset); + void char_callback_event(unsigned int c); + void key_callback_event(int key, int scancode, int action, int mods); + void drop_callback_event(int nb, const char **p); + void register_callbacks(); + + static GUIApp *s_instance; ///< pointer to the singleton GUIApp instance + HelloImGui::RunnerParams m_params; + float m_pixel_ratio; + int m_mouse_state = 0, m_modifiers = 0; + int2 m_mouse_pos{0, 0}; + int2 m_size{0, 0}, m_fbsize{0, 0}; + double m_last_interaction; + bool m_redraw = false; +}; diff --git a/gui/main.cpp b/gui/main.cpp deleted file mode 100644 index 3836a80..0000000 --- a/gui/main.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - main.cpp -- Samplin' Safari application entry point - - All rights reserved. Use of this source code is governed by a - BSD-style license that can be found in the LICENSE.txt file. -*/ - -#include "SampleViewer.h" -#include -#include -#include - -/* Force usage of discrete GPU on laptops */ -NANOGUI_FORCE_DISCRETE_GPU(); - -int nprocs = -1; - -int main(int argc, char **argv) -{ - vector args; - bool help = false; - bool error = false; - -#if defined(__APPLE__) - bool launched_from_finder = false; -#endif - - try - { - for (int i = 1; i < argc; ++i) - { - if (strcmp("--help", argv[i]) == 0 || strcmp("-h", argv[i]) == 0) - { - help = true; -#if defined(__APPLE__) - } - else if (strncmp("-psn", argv[i], 4) == 0) - { - launched_from_finder = true; -#endif - } - else - { - if (strncmp(argv[i], "-", 1) == 0) - { - cerr << "Invalid argument: \"" << argv[i] << "\"!" << endl; - help = true; - error = true; - } - args.push_back(argv[i]); - } - } - } - catch (const std::exception &e) - { - cout << "Error: " << e.what() << endl; - help = true; - error = true; - } - - if (help) - { - cout << "Syntax: " << argv[0] << endl; - cout << "Options:" << endl; - cout << " -h, --help Display this message" << endl; - return error ? EXIT_FAILURE : EXIT_SUCCESS; - } - - try - { - nanogui::init(); - -#if defined(__APPLE__) - if (launched_from_finder) - nanogui::chdir_to_bundle_parent(); -#endif - - { - nanogui::ref viewer = new SampleViewer(); - viewer->set_visible(true); - nanogui::mainloop(); - } - - nanogui::shutdown(); - } - catch (const std::runtime_error &e) - { - std::cerr << "Caught a fatal error: " << e.what() << endl; - return EXIT_FAILURE; - } - - return EXIT_SUCCESS; -} diff --git a/gui/shader.cpp b/gui/shader.cpp new file mode 100644 index 0000000..ce3ec8d --- /dev/null +++ b/gui/shader.cpp @@ -0,0 +1,637 @@ +#include "shader.h" +#include "hello_imgui/hello_imgui.h" + +#ifndef __EMSCRIPTEN__ +#include +#else +#include +#endif + +#if !defined(GL_HALF_FLOAT) +#define GL_HALF_FLOAT 0x140B +#endif + +#define CHK(cmd) \ + do \ + { \ + cmd; \ + (void)check_glerror(#cmd); \ + } while (0) + +bool check_glerror(const char *cmd) +{ + GLenum err = glGetError(); + const char *msg = nullptr; + + switch (err) + { + case GL_NO_ERROR: return false; + case GL_INVALID_ENUM: msg = "invalid enumeration"; break; + case GL_INVALID_VALUE: msg = "invalid value"; break; + case GL_INVALID_OPERATION: msg = "invalid operation"; break; + case GL_INVALID_FRAMEBUFFER_OPERATION: msg = "invalid framebuffer operation"; break; + case GL_OUT_OF_MEMORY: msg = "out of memory"; break; +#ifndef __EMSCRIPTEN__ + case GL_STACK_UNDERFLOW: msg = "stack underflow"; break; + case GL_STACK_OVERFLOW: msg = "stack overflow"; break; +#endif + default: msg = "unknown error"; break; + } + + HelloImGui::Log(HelloImGui::LogLevel::Error, "OpenGL error (%s) during operation \"%s\"!\n", msg, cmd); + return true; +} + +static GLuint compile_gl_shader(GLenum type, const std::string &name, const std::string &shader_string) +{ + if (shader_string.empty()) + return (GLuint)0; + + GLuint id = glCreateShader(type); + const char *shader_string_const = shader_string.c_str(); + CHK(glShaderSource(id, 1, &shader_string_const, nullptr)); + CHK(glCompileShader(id)); + + GLint status; + CHK(glGetShaderiv(id, GL_COMPILE_STATUS, &status)); + + if (status != GL_TRUE) + { + const char *type_str = nullptr; + if (type == GL_VERTEX_SHADER) + type_str = "vertex shader"; + else if (type == GL_FRAGMENT_SHADER) + type_str = "fragment shader"; +#ifndef __EMSCRIPTEN__ + else if (type == GL_GEOMETRY_SHADER) + type_str = "geometry shader"; +#endif + else + type_str = "unknown shader type"; + + char error_shader[4096]; + CHK(glGetShaderInfoLog(id, sizeof(error_shader), nullptr, error_shader)); + + std::string msg = + std::string("compile_gl_shader(): unable to compile ") + type_str + " \"" + name + "\":\n\n" + error_shader; + throw std::runtime_error(msg); + } + + return id; +} + +Shader::Shader(const std::string &name, const std::string &vertex_shader, const std::string &fragment_shader, + BlendMode blend_mode) : + m_name(name), + m_blend_mode(blend_mode), m_shader_handle(0) +{ + + GLuint vertex_shader_handle = compile_gl_shader(GL_VERTEX_SHADER, name, vertex_shader), + fragment_shader_handle = compile_gl_shader(GL_FRAGMENT_SHADER, name, fragment_shader); + + m_shader_handle = glCreateProgram(); + + GLint status; + CHK(glAttachShader(m_shader_handle, vertex_shader_handle)); + CHK(glAttachShader(m_shader_handle, fragment_shader_handle)); + CHK(glLinkProgram(m_shader_handle)); + CHK(glDeleteShader(vertex_shader_handle)); + CHK(glDeleteShader(fragment_shader_handle)); + CHK(glGetProgramiv(m_shader_handle, GL_LINK_STATUS, &status)); + + if (status != GL_TRUE) + { + char error_shader[4096]; + CHK(glGetProgramInfoLog(m_shader_handle, sizeof(error_shader), nullptr, error_shader)); + m_shader_handle = 0; + throw std::runtime_error("Shader::Shader(name=\"" + name + "\"): unable to link shader!\n\n" + error_shader); + } + + GLint attribute_count, uniform_count; + CHK(glGetProgramiv(m_shader_handle, GL_ACTIVE_ATTRIBUTES, &attribute_count)); + CHK(glGetProgramiv(m_shader_handle, GL_ACTIVE_UNIFORMS, &uniform_count)); + + auto register_buffer = [&](BufferType type, const std::string &name, int index, GLenum gl_type) + { + if (m_buffers.find(name) != m_buffers.end()) + throw std::runtime_error("Shader::Shader(): duplicate attribute/uniform name in shader code!"); + else if (name == "indices") + throw std::runtime_error("Shader::Shader(): argument name 'indices' is reserved!"); + + Buffer &buf = m_buffers[name]; + for (int i = 0; i < 3; ++i) + buf.shape[i] = 1; + buf.ndim = 1; + buf.index = index; + buf.type = type; + + switch (gl_type) + { + case GL_FLOAT: + buf.dtype = VariableType::Float32; + buf.ndim = 0; + break; + + case GL_FLOAT_VEC2: + buf.dtype = VariableType::Float32; + buf.shape[0] = 2; + break; + + case GL_FLOAT_VEC3: + buf.dtype = VariableType::Float32; + buf.shape[0] = 3; + break; + + case GL_FLOAT_VEC4: + buf.dtype = VariableType::Float32; + buf.shape[0] = 4; + break; + + case GL_INT: + buf.dtype = VariableType::Int32; + buf.ndim = 0; + break; + + case GL_INT_VEC2: + buf.dtype = VariableType::Int32; + buf.shape[0] = 2; + break; + + case GL_INT_VEC3: + buf.dtype = VariableType::Int32; + buf.shape[0] = 3; + break; + + case GL_INT_VEC4: + buf.dtype = VariableType::Int32; + buf.shape[0] = 4; + break; + +#if defined(NANOGUI_USE_OPENGL) + case GL_UNSIGNED_INT: + buf.dtype = VariableType::UInt32; + buf.ndim = 0; + break; + + case GL_UNSIGNED_INT_VEC2: + buf.dtype = VariableType::UInt32; + buf.shape[0] = 2; + break; + + case GL_UNSIGNED_INT_VEC3: + buf.dtype = VariableType::UInt32; + buf.shape[0] = 3; + break; + + case GL_UNSIGNED_INT_VEC4: + buf.dtype = VariableType::UInt32; + buf.shape[0] = 4; + break; +#endif + + case GL_BOOL: + buf.dtype = VariableType::Bool; + buf.ndim = 0; + break; + + case GL_BOOL_VEC2: + buf.dtype = VariableType::Bool; + buf.shape[0] = 2; + break; + + case GL_BOOL_VEC3: + buf.dtype = VariableType::Bool; + buf.shape[0] = 3; + break; + + case GL_BOOL_VEC4: + buf.dtype = VariableType::Bool; + buf.shape[0] = 4; + break; + + case GL_FLOAT_MAT2: + buf.dtype = VariableType::Float32; + buf.shape[0] = buf.shape[1] = 2; + buf.ndim = 2; + break; + + case GL_FLOAT_MAT3: + buf.dtype = VariableType::Float32; + buf.shape[0] = buf.shape[1] = 3; + buf.ndim = 2; + break; + + case GL_FLOAT_MAT4: + buf.dtype = VariableType::Float32; + buf.shape[0] = buf.shape[1] = 4; + buf.ndim = 2; + break; + + case GL_SAMPLER_2D: + buf.dtype = VariableType::Invalid; + buf.ndim = 0; + buf.type = FragmentTexture; + break; + + default: + throw std::runtime_error("Shader::Shader(): unsupported " + "uniform/attribute type!"); + }; + + if (type == VertexBuffer) + { + for (int i = (int)buf.ndim - 1; i >= 0; --i) + { + buf.shape[i + 1] = buf.shape[i]; + } + buf.shape[0] = 0; + buf.ndim++; + } + }; + + for (int i = 0; i < attribute_count; ++i) + { + char attr_name[128]; + GLenum type = 0; + GLint size = 0; + CHK(glGetActiveAttrib(m_shader_handle, i, sizeof(attr_name), nullptr, &size, &type, attr_name)); + GLint index = glGetAttribLocation(m_shader_handle, attr_name); + register_buffer(VertexBuffer, attr_name, index, type); + } + + for (int i = 0; i < uniform_count; ++i) + { + char uniform_name[128]; + GLenum type = 0; + GLint size = 0; + CHK(glGetActiveUniform(m_shader_handle, i, sizeof(uniform_name), nullptr, &size, &type, uniform_name)); + GLint index = glGetUniformLocation(m_shader_handle, uniform_name); + register_buffer(UniformBuffer, uniform_name, index, type); + } + + Buffer &buf = m_buffers["indices"]; + buf.index = -1; + buf.ndim = 1; + buf.shape[0] = 0; + buf.shape[1] = buf.shape[2] = 1; + buf.type = IndexBuffer; + buf.dtype = VariableType::UInt32; + +#if defined(NANOGUI_USE_OPENGL) + CHK(glGenVertexArrays(1, &m_vertex_array_handle)); + + m_uses_point_size = vertex_shader.find("gl_PointSize") != std::string::npos; +#endif +} + +Shader::~Shader() +{ + CHK(glDeleteProgram(m_shader_handle)); +#if defined(NANOGUI_USE_OPENGL) + CHK(glDeleteVertexArrays(1, &m_vertex_array_handle)); +#endif +} + +void Shader::set_buffer(const std::string &name, VariableType dtype, size_t ndim, const size_t *shape, const void *data) +{ + auto it = m_buffers.find(name); + if (it == m_buffers.end()) + throw std::runtime_error("Shader::set_buffer(): could not find argument named \"" + name + "\""); + + Buffer &buf = m_buffers[name]; + + bool mismatch = ndim != buf.ndim || dtype != buf.dtype; + for (size_t i = (buf.type == UniformBuffer ? 0 : 1); i < ndim; ++i) + mismatch |= shape[i] != buf.shape[i]; + + if (mismatch) + { + Buffer arg; + arg.type = buf.type; + arg.ndim = ndim; + for (size_t i = 0; i < 3; ++i) + arg.shape[i] = i < arg.ndim ? shape[i] : 1; + arg.dtype = dtype; + throw std::runtime_error("Buffer::set_buffer(\"" + name + "\"): shape/dtype mismatch: expected " + + buf.to_string() + ", got " + arg.to_string()); + } + + size_t size = type_size(dtype); + for (size_t i = 0; i < 3; ++i) + { + buf.shape[i] = i < ndim ? shape[i] : 1; + size *= buf.shape[i]; + } + + if (buf.type == UniformBuffer) + { + if (buf.buffer && buf.size != size) + { + delete[] (uint8_t *)buf.buffer; + buf.buffer = nullptr; + } + if (!buf.buffer) + buf.buffer = new uint8_t[size]; + memcpy(buf.buffer, data, size); + } + else + { + GLuint buffer_id = 0; + if (buf.buffer) + { + buffer_id = (GLuint)((uintptr_t)buf.buffer); + } + else + { + CHK(glGenBuffers(1, &buffer_id)); + buf.buffer = (void *)((uintptr_t)buffer_id); + } + GLenum buf_type = (name == "indices") ? GL_ELEMENT_ARRAY_BUFFER : GL_ARRAY_BUFFER; + CHK(glBindBuffer(buf_type, buffer_id)); + CHK(glBufferData(buf_type, size, data, GL_DYNAMIC_DRAW)); + } + + buf.dtype = dtype; + buf.ndim = ndim; + buf.size = size; + buf.dirty = true; +} + +// void Shader::set_texture(const std::string &name, Texture *texture) +// { +// auto it = m_buffers.find(name); +// if (it == m_buffers.end()) +// throw std::runtime_error("Shader::set_texture(): could not find argument named \"" + name + "\""); +// Buffer &buf = m_buffers[name]; +// if (!(buf.type == VertexTexture || buf.type == FragmentTexture)) +// throw std::runtime_error("Shader::set_texture(): argument named \"" + name + "\" is not a texture!"); + +// buf.buffer = (void *)((uintptr_t)texture->texture_handle()); +// buf.dirty = true; +// } + +void Shader::begin() +{ + int texture_unit = 0; + + CHK(glUseProgram(m_shader_handle)); + +#if defined(NANOGUI_USE_OPENGL) + CHK(glBindVertexArray(m_vertex_array_handle)); +#endif + + for (auto &[key, buf] : m_buffers) + { + bool indices = key == "indices"; + if (!buf.buffer) + { + if (!indices) + fprintf(stderr, + "Shader::begin(): shader \"%s\" has an unbound " + "argument \"%s\"!\n", + m_name.c_str(), key.c_str()); + continue; + } + + GLuint buffer_id = (GLuint)((uintptr_t)buf.buffer); + GLenum gl_type = 0; + +#if defined(NANOGUI_USE_OPENGL) + if (!buf.dirty && buf.type != VertexTexture && buf.type != FragmentTexture) + continue; +#endif + + bool uniform_error = false; + switch (buf.type) + { + case IndexBuffer: CHK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer_id)); break; + + case VertexBuffer: + CHK(glBindBuffer(GL_ARRAY_BUFFER, buffer_id)); + CHK(glEnableVertexAttribArray(buf.index)); + + switch (buf.dtype) + { + case VariableType::Int8: gl_type = GL_BYTE; break; + case VariableType::UInt8: gl_type = GL_UNSIGNED_BYTE; break; + case VariableType::Int16: gl_type = GL_SHORT; break; + case VariableType::UInt16: gl_type = GL_UNSIGNED_SHORT; break; + case VariableType::Int32: gl_type = GL_INT; break; + case VariableType::UInt32: gl_type = GL_UNSIGNED_INT; break; + case VariableType::Float16: gl_type = GL_HALF_FLOAT; break; + case VariableType::Float32: gl_type = GL_FLOAT; break; + default: throw std::runtime_error("Shader::begin(): unsupported vertex buffer type!"); + } + + if (buf.ndim != 2) + throw std::runtime_error("\"" + m_name + "\": vertex attribute \"" + key + + "\" has an invalid shapeension (expected ndim=2, got " + + std::to_string(buf.ndim) + ")"); + + CHK(glVertexAttribPointer(buf.index, (GLint)buf.shape[1], gl_type, GL_FALSE, 0, nullptr)); + break; + + case VertexTexture: + case FragmentTexture: + CHK(glActiveTexture(GL_TEXTURE0 + texture_unit)); + CHK(glBindTexture(GL_TEXTURE_2D, (GLuint)((uintptr_t)buf.buffer))); + if (buf.dirty) + CHK(glUniform1i(buf.index, texture_unit)); + texture_unit++; + break; + + case UniformBuffer: + if (buf.ndim > 2) + throw std::runtime_error("\"" + m_name + "\": uniform attribute \"" + key + + "\" has an invalid shapeension (expected ndim=0/1/2, got " + + std::to_string(buf.ndim) + ")"); + switch (buf.dtype) + { + case VariableType::Float32: + if (buf.ndim < 2) + { + const float *v = (const float *)buf.buffer; + switch (buf.shape[0]) + { + case 1: CHK(glUniform1f(buf.index, v[0])); break; + case 2: CHK(glUniform2f(buf.index, v[0], v[1])); break; + case 3: CHK(glUniform3f(buf.index, v[0], v[1], v[2])); break; + case 4: CHK(glUniform4f(buf.index, v[0], v[1], v[2], v[3])); break; + default: uniform_error = true; break; + } + } + else if (buf.ndim == 2 && buf.shape[0] == buf.shape[1]) + { + const float *v = (const float *)buf.buffer; + switch (buf.shape[0]) + { + case 2: CHK(glUniformMatrix2fv(buf.index, 1, GL_FALSE, v)); break; + case 3: CHK(glUniformMatrix3fv(buf.index, 1, GL_FALSE, v)); break; + case 4: CHK(glUniformMatrix4fv(buf.index, 1, GL_FALSE, v)); break; + default: uniform_error = true; break; + } + } + else + { + uniform_error = true; + } + break; + +#if defined(NANOGUI_USE_GLES) + case VariableType::UInt32: +#endif + case VariableType::Int32: + { + const int32_t *v = (const int32_t *)buf.buffer; + if (buf.ndim < 2) + { + switch (buf.shape[0]) + { + case 1: CHK(glUniform1i(buf.index, v[0])); break; + case 2: CHK(glUniform2i(buf.index, v[0], v[1])); break; + case 3: CHK(glUniform3i(buf.index, v[0], v[1], v[2])); break; + case 4: CHK(glUniform4i(buf.index, v[0], v[1], v[2], v[3])); break; + default: uniform_error = true; break; + } + } + else + { + uniform_error = true; + } + } + break; + +#if defined(NANOGUI_USE_OPENGL) + case VariableType::UInt32: + { + const uint32_t *v = (const uint32_t *)buf.buffer; + if (buf.ndim < 2) + { + switch (buf.shape[0]) + { + case 1: CHK(glUniform1ui(buf.index, v[0])); break; + case 2: CHK(glUniform2ui(buf.index, v[0], v[1])); break; + case 3: CHK(glUniform3ui(buf.index, v[0], v[1], v[2])); break; + case 4: CHK(glUniform4ui(buf.index, v[0], v[1], v[2], v[3])); break; + default: uniform_error = true; break; + } + } + else + { + uniform_error = true; + } + } + break; +#endif + + case VariableType::Bool: + { + const uint8_t *v = (const uint8_t *)buf.buffer; + if (buf.ndim < 2) + { + switch (buf.shape[0]) + { + case 1: CHK(glUniform1i(buf.index, v[0])); break; + case 2: CHK(glUniform2i(buf.index, v[0], v[1])); break; + case 3: CHK(glUniform3i(buf.index, v[0], v[1], v[2])); break; + case 4: CHK(glUniform4i(buf.index, v[0], v[1], v[2], v[3])); break; + default: uniform_error = true; break; + } + } + else + { + uniform_error = true; + } + } + break; + + default: uniform_error = true; break; + } + + if (uniform_error) + throw std::runtime_error("\"" + m_name + "\": uniform attribute \"" + key + + "\" has an unsupported dtype/shape configuration: " + buf.to_string()); + break; + + default: + throw std::runtime_error("\"" + m_name + "\": uniform attribute \"" + key + + "\" has an unsupported dtype/shape configuration:" + buf.to_string()); + } + + buf.dirty = false; + } + + if (m_blend_mode == BlendMode::AlphaBlend) + { + CHK(glEnable(GL_BLEND)); + CHK(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + } + +#ifndef __EMSCRIPTEN__ + if (m_uses_point_size) + CHK(glEnable(GL_PROGRAM_POINT_SIZE)); +#endif +} + +void Shader::end() +{ + if (m_blend_mode == BlendMode::AlphaBlend) + CHK(glDisable(GL_BLEND)); +#ifndef __EMSCRIPTEN__ + if (m_uses_point_size) + CHK(glDisable(GL_PROGRAM_POINT_SIZE)); + CHK(glBindVertexArray(0)); +#else + for (const auto &[key, buf] : m_buffers) + { + if (buf.type != VertexBuffer) + continue; + CHK(glDisableVertexAttribArray(buf.index)); + } +#endif + CHK(glUseProgram(0)); +} + +void Shader::draw_array(PrimitiveType primitive_type, size_t offset, size_t count, bool indexed) +{ + GLenum primitive_type_gl; + switch (primitive_type) + { + case PrimitiveType::Point: primitive_type_gl = GL_POINTS; break; + case PrimitiveType::Line: primitive_type_gl = GL_LINES; break; + case PrimitiveType::LineStrip: primitive_type_gl = GL_LINE_STRIP; break; + case PrimitiveType::Triangle: primitive_type_gl = GL_TRIANGLES; break; + case PrimitiveType::TriangleStrip: primitive_type_gl = GL_TRIANGLE_STRIP; break; + default: throw std::runtime_error("Shader::draw_array(): invalid primitive type!"); + } + + if (!indexed) + CHK(glDrawArrays(primitive_type_gl, (GLint)offset, (GLsizei)count)); + else + CHK(glDrawElements(primitive_type_gl, (GLsizei)count, GL_UNSIGNED_INT, + (const void *)(offset * sizeof(uint32_t)))); +} + +std::string Shader::Buffer::to_string() const +{ + std::string result = "Buffer[type="; + switch (type) + { + case BufferType::VertexBuffer: result += "vertex"; break; + case BufferType::FragmentBuffer: result += "fragment"; break; + case BufferType::UniformBuffer: result += "uniform"; break; + case BufferType::IndexBuffer: result += "index"; break; + default: result += "unknown"; break; + } + result += ", dtype="; + result += type_name(dtype); + result += ", shape=["; + for (size_t i = 0; i < ndim; ++i) + { + result += std::to_string(shape[i]); + if (i + 1 < ndim) + result += ", "; + } + result += "]]"; + return result; +} diff --git a/gui/shader.h b/gui/shader.h new file mode 100644 index 0000000..5971186 --- /dev/null +++ b/gui/shader.h @@ -0,0 +1,273 @@ +/* + NanoGUI was developed by Wenzel Jakob . + The widget drawing code is based on the NanoVG demo application + by Mikko Mononen. + + All rights reserved. Use of this source code is governed by a + BSD-style license that can be found in the LICENSE.txt file. +*/ + +/** + * \file nanogui/shader.h + * + * \brief Defines abstractions for shaders that work with OpenGL, + * OpenGL ES, and Metal. + */ + +#pragma once + +#define NANOGUI_USE_OPENGL + +#include "linalg.h" +#include "traits.h" +#include +#include + +class Shader +{ +public: + /// The type of geometry that should be rendered + enum class PrimitiveType + { + Point, + Line, + LineStrip, + Triangle, + TriangleStrip + }; + + /// Alpha blending mode + enum class BlendMode + { + None, + AlphaBlend // alpha * new_color + (1 - alpha) * old_color + }; + + /** + * \brief Initialize the shader using the specified source strings. + * + * \param name + * A name identifying this shader + * + * \param vertex_shader + * The source of the vertex shader as a string. + * + * \param fragment_shader + * The source of the fragment shader as a string. + */ + Shader(const std::string &name, const std::string &vertex_shader, const std::string &fragment_shader, + BlendMode blend_mode = BlendMode::None); + + /// Return the render pass associated with this shader + // RenderPass *render_pass() { return m_render_pass; } + + /// Return the name of this shader + const std::string &name() const + { + return m_name; + } + + /// Return the blending mode of this shader + BlendMode blend_mode() const + { + return m_blend_mode; + } + + /** + * \brief Upload a buffer (e.g. vertex positions) that will be associated + * with a named shader parameter. + * + * Note that this function should be used both for 'varying' and 'uniform' + * data---the implementation takes care of routing the data to the right + * endpoint. Matrices should be specified in column-major order. + * + * The buffer will be replaced if it is already present. + */ + void set_buffer(const std::string &name, VariableType type, size_t ndim, const size_t *shape, const void *data); + + void set_buffer(const std::string &name, VariableType type, std::initializer_list shape, const void *data) + { + set_buffer(name, type, shape.end() - shape.begin(), shape.begin(), data); + } + + // std::vectors + template + void set_buffer(const std::string &name, const std::vector> &mats) + { + size_t shape[3] = {mats.size(), M, N}; + set_buffer(name, get_type(), 3, shape, mats.data()); + } + + template + void set_buffer(const std::string &name, const std::vector> &vecs) + { + size_t shape[3] = {vecs.size(), M, 1}; + set_buffer(name, get_type(), 2, shape, vecs.data()); + } + + template + void set_buffer(const std::string &name, const std::vector &data) + { + size_t shape[3] = {data.size(), 1, 1}; + set_buffer(name, get_type(), 1, shape, data.data()); + } + + // set_uniform + template + void set_uniform(const std::string &name, const linalg::vec &value) + { + size_t shape[3] = {M, 1, 1}; + set_buffer(name, get_type(), 1, shape, &value); + } + + template + void set_uniform(const std::string &name, const linalg::mat &value) + { + size_t shape[3] = {M, N, 1}; + set_buffer(name, get_type(), 2, shape, &value); + } + + /** + * \brief Upload a uniform variable (e.g. a vector or matrix) that will be + * associated with a named shader parameter. + */ + template + void set_uniform(const std::string &name, const T &value) + { + size_t shape[3] = {1, 1, 1}; + size_t ndim = (size_t)-1; + const void *data; + VariableType vtype = VariableType::Invalid; + + if constexpr (std::is_scalar_v) + { + data = &value; + ndim = 0; + vtype = get_type(); + } + + if (ndim == (size_t)-1) + throw std::runtime_error("Shader::set_uniform(): invalid input array dimension!"); + + set_buffer(name, vtype, ndim, shape, data); + } + + // /** + // * \brief Associate a texture with a named shader parameter + // * + // * The association will be replaced if it is already present. + // */ + // void set_texture(const std::string &name, Texture *texture); + + /** + * \brief Begin drawing using this shader + * + * Note that any updates to 'uniform' and 'varying' shader parameters + * *must* occur prior to this method call. + * + * The Python bindings also include extra \c __enter__ and \c __exit__ + * aliases so that the shader can be activated via Pythons 'with' + * statement. + */ + void begin(); + + /// End drawing using this shader + void end(); + + /** + * \brief Render geometry arrays, either directly or + * using an index array. + * + * \param primitive_type + * What type of geometry should be rendered? + * + * \param offset + * First index to render. Must be a multiple of 2 or 3 for lines and + * triangles, respectively (unless specified using strips). + * + * \param offset + * Number of indices to render. Must be a multiple of 2 or 3 for lines + * and triangles, respectively (unless specified using strips). + * + * \param indexed + * Render indexed geometry? In this case, an + * \c uint32_t valued buffer with name \c indices + * must have been uploaded using \ref set(). + */ + void draw_array(PrimitiveType primitive_type, size_t offset, size_t count, bool indexed = false); + +#if defined(NANOGUI_USE_OPENGL) || defined(NANOGUI_USE_GLES) + uint32_t shader_handle() const + { + return m_shader_handle; + } +#elif defined(NANOGUI_USE_METAL) + void *pipeline_state() const + { + return m_pipeline_state; + } +#endif + +#if defined(NANOGUI_USE_OPENGL) + uint32_t vertex_array_handle() const + { + return m_vertex_array_handle; + } +#endif + +protected: + enum BufferType + { + Unknown = 0, + VertexBuffer, + VertexTexture, + VertexSampler, + FragmentBuffer, + FragmentTexture, + FragmentSampler, + UniformBuffer, + IndexBuffer, + }; + + struct Buffer + { + void *buffer = nullptr; + BufferType type = Unknown; + VariableType dtype = VariableType::Invalid; + int index = 0; + size_t ndim = 0; + size_t shape[3]{0, 0, 0}; + size_t size = 0; + bool dirty = false; + + std::string to_string() const; + }; + + /// Release all resources + virtual ~Shader(); + +protected: + // RenderPass* m_render_pass; + std::string m_name; + std::unordered_map m_buffers; + BlendMode m_blend_mode; + +#if defined(NANOGUI_USE_OPENGL) || defined(NANOGUI_USE_GLES) + uint32_t m_shader_handle = 0; +#if defined(NANOGUI_USE_OPENGL) + uint32_t m_vertex_array_handle = 0; + bool m_uses_point_size = false; +#endif +#elif defined(NANOGUI_USE_METAL) + void *m_pipeline_state; +#endif +}; + +#define CHK(cmd) \ + do \ + { \ + cmd; \ + (void)check_glerror(#cmd); \ + } while (0) + +bool check_glerror(const char *cmd); diff --git a/gui/traits.h b/gui/traits.h new file mode 100644 index 0000000..e4930f4 --- /dev/null +++ b/gui/traits.h @@ -0,0 +1,110 @@ +/* + NanoGUI was developed by Wenzel Jakob . + The widget drawing code is based on the NanoVG demo application + by Mikko Mononen. + + All rights reserved. Use of this source code is governed by a + BSD-style license that can be found in the LICENSE.txt file. +*/ + +#pragma once + +#include +#include + +/// Listing of various field types that can be used as variables in shaders +enum class VariableType +{ + Invalid = 0, + Int8, + UInt8, + Int16, + UInt16, + Int32, + UInt32, + Int64, + UInt64, + Float16, + Float32, + Float64, + Bool +}; + +/// Convert from a C++ type to an element of \ref VariableType +template +constexpr VariableType get_type() +{ + if constexpr (std::is_same_v) + return VariableType::Bool; + + if constexpr (std::is_integral_v) + { + if constexpr (sizeof(T) == 1) + return std::is_signed_v ? VariableType::Int8 : VariableType::UInt8; + else if constexpr (sizeof(T) == 2) + return std::is_signed_v ? VariableType::Int16 : VariableType::UInt16; + else if constexpr (sizeof(T) == 4) + return std::is_signed_v ? VariableType::Int32 : VariableType::UInt32; + else if constexpr (sizeof(T) == 8) + return std::is_signed_v ? VariableType::Int64 : VariableType::UInt64; + } + else if constexpr (std::is_floating_point_v) + { + if constexpr (sizeof(T) == 2) + return VariableType::Float16; + else if constexpr (sizeof(T) == 4) + return VariableType::Float32; + else if constexpr (sizeof(T) == 8) + return VariableType::Float64; + } + else + { + return VariableType::Invalid; + } +} + +/// Return the size in bytes associated with a specific variable type +inline size_t type_size(VariableType type) +{ + switch (type) + { + case VariableType::UInt8: + case VariableType::Int8: + case VariableType::Bool: return 1; + + case VariableType::UInt16: + case VariableType::Int16: + case VariableType::Float16: return 2; + + case VariableType::UInt32: + case VariableType::Int32: + case VariableType::Float32: return 4; + + case VariableType::UInt64: + case VariableType::Int64: + case VariableType::Float64: return 8; + + default: throw std::runtime_error("Unknown type!"); + } +} + +/// Return the name (e.g. "uint8") associated with a specific variable type +inline const char *type_name(VariableType type) +{ + switch (type) + { + case VariableType::Bool: return "bool"; + case VariableType::UInt8: return "uint8"; + case VariableType::Int8: return "int8"; + case VariableType::UInt16: return "uint16"; + case VariableType::Int16: return "int16"; + case VariableType::UInt32: return "uint32"; + case VariableType::Int32: return "int32"; + case VariableType::UInt64: return "uint64"; + case VariableType::Int64: return "int64"; + case VariableType::Float16: return "float16"; + case VariableType::Float32: return "float32"; + case VariableType::Float64: return "float64"; + default: return "invalid"; + } +} diff --git a/gui/utils.h b/gui/utils.h deleted file mode 100644 index 8c898a2..0000000 --- a/gui/utils.h +++ /dev/null @@ -1,269 +0,0 @@ -/** \file utils.h - \author Wojciech Jarosz -*/ - -#pragma once - -#include -#include - -NAMESPACE_BEGIN(nanogui) - -// -// Missing matrix and vector operations -// - -template -Array operator*(const Matrix &a, const Array &v) -{ - Array c; - for (size_t i = 0; i < 4; ++i) - { - T accum{0}; - for (size_t j = 0; j < 4; ++j) - accum += a.m[j][i] * v[j]; - c[i] = accum; - } - return c; -} - -template -Matrix operator*(const T &a, const Matrix &b) -{ - Matrix c; - for (size_t i = 0; i < Size; ++i) - for (size_t j = 0; j < Size; ++j) - c.m[j][i] = a * b.m[j][i]; - return c; -} - -template -Matrix operator*(const Matrix &a, const T &b) -{ - Matrix c; - for (size_t i = 0; i < Size; ++i) - for (size_t j = 0; j < Size; ++j) - c.m[j][i] = a.m[j][i] * b; - return c; -} - -template -Matrix operator+(const Matrix &a, const Matrix &b) -{ - Matrix c; - for (size_t i = 0; i < Size; ++i) - for (size_t j = 0; j < Size; ++j) - c.m[j][i] = a.m[j][i] + b.m[j][i]; - return c; -} - -inline Matrix4f frustum(float left, float right, float bottom, float top, float nearVal, float farVal) -{ - Matrix4f result{0.f}; - result.m[0][0] = (2.0f * nearVal) / (right - left); - result.m[1][1] = (2.0f * nearVal) / (top - bottom); - result.m[2][0] = (right + left) / (right - left); - result.m[2][1] = (top + bottom) / (top - bottom); - result.m[2][2] = -(farVal + nearVal) / (farVal - nearVal); - result.m[2][3] = -1.0f; - result.m[3][2] = -(2.0f * farVal * nearVal) / (farVal - nearVal); - return result; -} - -// -// Quaternion math -// - -template -constexpr Array qxdir(const Array &q) -{ - return {q.w() * q.w() + q.x() * q.x() - q.y() * q.y() - q.z() * q.z(), (q.x() * q.y() + q.z() * q.w()) * 2, - (q.z() * q.x() - q.y() * q.w()) * 2}; -} -template -constexpr Array qydir(const Array &q) -{ - return {(q.x() * q.y() - q.z() * q.w()) * 2, q.w() * q.w() - q.x() * q.x() + q.y() * q.y() - q.z() * q.z(), - (q.y() * q.z() + q.x() * q.w()) * 2}; -} -template -constexpr Array qzdir(const Array &q) -{ - return {(q.z() * q.x() + q.y() * q.w()) * 2, (q.y() * q.z() - q.x() * q.w()) * 2, - q.w() * q.w() - q.x() * q.x() - q.y() * q.y() + q.z() * q.z()}; -} -template -constexpr Matrix qmat(const Array &q) -{ - auto result = Matrix::scale({1, 1, 1, 1}); - Array qdir[3] = {qxdir(q), qydir(q), qzdir(q)}; - for (size_t i = 0; i < 3; ++i) - for (size_t j = 0; j < 3; ++j) - result.m[i][j] = qdir[i][j]; - return result; -} -template -constexpr Array qmul(const Array &a, const Array &b) -{ - return {a.x() * b.w() + a.w() * b.x() + a.y() * b.z() - a.z() * b.y(), - a.y() * b.w() + a.w() * b.y() + a.z() * b.x() - a.x() * b.z(), - a.z() * b.w() + a.w() * b.z() + a.x() * b.y() - a.y() * b.x(), - a.w() * b.w() - a.x() * b.x() - a.y() * b.y() - a.z() * b.z()}; -} -template -Array rotation_quat(const Array &axis, T angle) -{ - auto t = axis * std::sin(angle / 2); - return {t[0], t[1], t[2], std::cos(angle / 2)}; -} - -template -T uangle(const Array &a, const Array &b) -{ - T d = dot(a, b); - return d > 1 ? 0 : std::acos(d < -1 ? -1 : d); -} - -template -Array slerp2(const Array &a, const Array &b, T t) -{ - T th = uangle(a, b); - return th == 0 ? a : a * (std::sin(th * (1 - t)) / std::sin(th)) + b * (std::sin(th * t) / std::sin(th)); -} - -template -Array qslerp(const Array &a, const Array &b, T t) -{ - return slerp2(a, dot(a, b) < 0 ? -b : b, t); -} - -template -constexpr Array qrot(const Array &q, const Array &v) -{ - return qxdir(q) * v.x + qydir(q) * v.y + qzdir(q) * v.z; -} - -//! Based on the arcball in nanogui 1 -struct Arcball -{ - using Quaternionf = Vector4f; - - Arcball(float speedFactor = 2.0f) : - m_active(false), m_lastPos(0, 0), m_size(0, 0), m_quat(0, 0, 0, 1), m_incr(0, 0, 0, 1), - m_speedFactor(speedFactor) - { - } - - /** - * \brief The internal rotation of the Arcball. - * - * Call \ref Arcball::matrix for drawing loops, this method will not return - * any updates while \ref mActive is ``true``. - */ - Quaternionf &state() - { - return m_quat; - } - - /// ``const`` version of \ref Arcball::state. - const Quaternionf &state() const - { - return m_quat; - } - - /// Sets the rotation of this Arcball. The Arcball will be marked as **not** active. - void setState(const Quaternionf &state) - { - m_active = false; - m_lastPos = {0, 0}; - m_quat = state; - m_incr = {0, 0, 0, 1}; - } - - void setSize(Vector2i size) - { - m_size = size; - } - - const Vector2i &size() const - { - return m_size; - } - - void button(Vector2i pos, bool pressed) - { - m_active = pressed; - m_lastPos = pos; - if (!m_active) - m_quat = normalize(qmul(m_incr, m_quat)); - m_incr = {0, 0, 0, 1}; - } - - bool motion(Vector2i pos) - { - if (!m_active) - return false; - - /* Based on the rotation controller from AntTweakBar */ - float invMinDim = 1.0f / std::min(m_size.x(), m_size.y()); - float w = (float)m_size.x(), h = (float)m_size.y(); - - float ox = (m_speedFactor * (2 * m_lastPos.x() - w) + w) - w - 1.0f; - float tx = (m_speedFactor * (2 * pos.x() - w) + w) - w - 1.0f; - float oy = (m_speedFactor * (h - 2 * m_lastPos.y()) + h) - h - 1.0f; - float ty = (m_speedFactor * (h - 2 * pos.y()) + h) - h - 1.0f; - - ox *= invMinDim; - oy *= invMinDim; - tx *= invMinDim; - ty *= invMinDim; - - Vector3f v0(ox, oy, 1.0f), v1(tx, ty, 1.0f); - if (squared_norm(v0) > 1e-4f && squared_norm(v1) > 1e-4f) - { - v0 = normalize(v0); - v1 = normalize(v1); - Vector3f axis = cross(v0, v1); - float sa = std::sqrt(dot(axis, axis)), ca = dot(v0, v1), angle = std::atan2(sa, ca); - if (tx * tx + ty * ty > 1.0f) - angle *= 1.0f + 0.2f * (std::sqrt(tx * tx + ty * ty) - 1.0f); - m_incr = rotation_quat(normalize(axis), angle); - if (!std::isfinite(norm(m_incr))) - m_incr = {0, 0, 0, 1}; - } - return true; - } - - Matrix4f matrix() const - { - return qmat(qmul(m_incr, m_quat)); - } - -private: - /// Whether or not this Arcball is currently active. - bool m_active; - - /// The last click position (which triggered the Arcball to be active / non-active). - Vector2i m_lastPos; - - /// The size of this Arcball. - Vector2i m_size; - - /** - * The current stable state. When this Arcball is active, represents the - * state of this Arcball when \ref Arcball::button was called with - * ``down = true``. - */ - Quaternionf m_quat; - - /// When active, tracks the overall update to the state. Identity when non-active. - Quaternionf m_incr; - - /** - * The speed at which this Arcball rotates. Smaller values mean it rotates - * more slowly, higher values mean it rotates more quickly. - */ - float m_speedFactor; -}; - -NAMESPACE_END(nanogui) diff --git a/include/sampler/Halton.h b/include/sampler/Halton.h index e1d4ea9..a51788b 100644 --- a/include/sampler/Halton.h +++ b/include/sampler/Halton.h @@ -3,60 +3,81 @@ */ #pragma once -#include -#include -#include -#include - +#include // for pcg32 +#include // for TSamplerMinMaxDim +#include // for Halton_sampler +#include // for basic_string, string /// A Halton quasi-random number sequence. /** A wrapper for L. Gruenschloss's fast Halton sampler. */ -class Halton : public TSamplerMinMaxDim<1,256> +class Halton : public TSamplerMinMaxDim<1, 256> { public: Halton(unsigned dimensions = 2); - ~Halton() override {} + ~Halton() override + { + } void sample(float[], unsigned i) override; - unsigned dimensions() const override {return m_numDimensions;} + unsigned dimensions() const override + { + return m_numDimensions; + } void setDimensions(unsigned) override; // Init the permutation arrays using Faure-permutations. - void initFaure() {m_halton.init_faure();} + void initFaure() + { + m_halton.init_faure(); + } // Init the permutation arrays using randomized permutations. void initRandom(); /// Gets/sets whether the point set is randomized - bool randomized() const override {return m_randomized;} + bool randomized() const override + { + return m_randomized; + } void setRandomized(bool r = true) override; - std::string name() const override {return "Halton";} + std::string name() const override + { + return "Halton"; + } protected: - unsigned m_numDimensions; - bool m_randomized; - pcg32 m_rand; + unsigned m_numDimensions; + bool m_randomized; + pcg32 m_rand; Halton_sampler m_halton; }; - /// Encapsulate a Halton-Zaremba sequence quasi-random number generator. -class HaltonZaremba : public TSamplerMinMaxDim<1,(unsigned)(-1)-1> +class HaltonZaremba : public TSamplerMinMaxDim<1, (unsigned)(-1) - 1> { public: HaltonZaremba(unsigned dimensions = 2); - ~HaltonZaremba() override {} + ~HaltonZaremba() override + { + } void sample(float[], unsigned i) override; - unsigned dimensions() const override {return m_numDimensions;} + unsigned dimensions() const override + { + return m_numDimensions; + } void setDimensions(unsigned) override; - std::string name() const override {return "Halton-Zaremba";} + std::string name() const override + { + return "Halton-Zaremba"; + } + protected: unsigned m_numDimensions; }; diff --git a/include/sampler/Jittered.h b/include/sampler/Jittered.h index 954e22c..12f3b98 100644 --- a/include/sampler/Jittered.h +++ b/include/sampler/Jittered.h @@ -3,9 +3,8 @@ */ #pragma once -#include #include -#include +#include /// Encapsulate a 2D stratified or "jittered" point set. class Jittered : public TSamplerDim<2> @@ -19,13 +18,16 @@ class Jittered : public TSamplerDim<2> std::string name() const override; - int numSamples() const override {return m_resX*m_resY;} + int numSamples() const override + { + return m_resX * m_resY; + } int setNumSamples(unsigned n) override { - int sqrtVal = (n == 0) ? 1 : (int) (std::sqrt((float) n) + 0.5f); + int sqrtVal = (n == 0) ? 1 : (int)(std::sqrt((float)n) + 0.5f); m_resX = m_resY = sqrtVal; reset(); - return m_resX*m_resY; + return m_resX * m_resY; } void setNumSamples(unsigned x, unsigned y) { @@ -34,7 +36,10 @@ class Jittered : public TSamplerDim<2> reset(); } - bool randomized() const override {return m_randomize;} + bool randomized() const override + { + return m_randomize; + } void setRandomized(bool r = true) override { if ((m_randomize = r)) @@ -42,15 +47,21 @@ class Jittered : public TSamplerDim<2> } /// Gets/sets how much the points are jittered - float jitter() const override {return m_maxJit;} - float setJitter(float j = 1.0f) override {return m_maxJit = j;} + float jitter() const override + { + return m_maxJit; + } + float setJitter(float j = 1.0f) override + { + return m_maxJit = j; + } private: unsigned m_resX, m_resY; - float m_maxJit; + float m_maxJit; - float m_xScale, m_yScale; - bool m_randomize = true; - pcg32 m_rand; + float m_xScale, m_yScale; + bool m_randomize = true; + pcg32 m_rand; unsigned m_seed = 13; }; diff --git a/include/sampler/LP.h b/include/sampler/LP.h index 3a03c73..ba5a6a2 100644 --- a/include/sampler/LP.h +++ b/include/sampler/LP.h @@ -3,8 +3,9 @@ */ #pragma once -#include -#include +#include // for pcg32 +#include // for TSamplerMinMaxDim +#include // for basic_string, string /// The Larcher-Pillichshammer Gruenschloss-Keller (0,3) sequence /** @@ -23,25 +24,32 @@ in P. L'Ecuyer and A. Owen (eds.), Monte Carlo and Quasi-Monte Carlo Methods 2008, Springer-Verlag, 2009. */ -class LarcherPillichshammerGK : public TSamplerMinMaxDim<1,3> +class LarcherPillichshammerGK : public TSamplerMinMaxDim<1, 3> { public: - LarcherPillichshammerGK(unsigned dimensions = 2, - unsigned numSamples = 64, - bool randomize = false); + LarcherPillichshammerGK(unsigned dimensions = 2, unsigned numSamples = 64, bool randomize = false); ~LarcherPillichshammerGK() override; void sample(float[], unsigned i) override; - unsigned dimensions() const override {return m_numDimensions;} + unsigned dimensions() const override + { + return m_numDimensions; + } - std::string name() const override {return "LP-GK";} + std::string name() const override + { + return "LP-GK"; + } - int numSamples() const override {return m_numSamples;} + int numSamples() const override + { + return m_numSamples; + } int setNumSamples(unsigned n) override { m_numSamples = (n == 0) ? 1 : n; - m_inv = 1.0f / m_numSamples; + m_inv = 1.0f / m_numSamples; return m_numSamples; } @@ -63,7 +71,7 @@ class LarcherPillichshammerGK : public TSamplerMinMaxDim<1,3> protected: unsigned m_numSamples, m_numDimensions; - float m_inv; - pcg32 m_rand; + float m_inv; + pcg32 m_rand; unsigned m_scramble1, m_scramble2, m_scramble3; }; diff --git a/include/sampler/MultiJittered.h b/include/sampler/MultiJittered.h index 0d8ccbd..d128cda 100644 --- a/include/sampler/MultiJittered.h +++ b/include/sampler/MultiJittered.h @@ -3,10 +3,10 @@ */ #pragma once -#include -#include -#include -#include +#include // for sqrt +#include // for pcg32 +#include // for TSamplerDim, TSamplerMinMaxDim +#include // for basic_string, string /// A multi-jittered point set with both jittered and n-rooks stratification. /** @@ -27,44 +27,54 @@ class MultiJittered : public TSamplerDim<2> void reset() override; void sample(float[], unsigned i) override; - bool randomized() const override {return m_randomize;} - void setRandomized(bool r) override {m_randomize = r; reset();} - - std::string name() const override {return "Multi-Jittered";} + bool randomized() const override + { + return m_randomize; + } + void setRandomized(bool r) override + { + m_randomize = r; + reset(); + } + std::string name() const override + { + return "Multi-Jittered"; + } - int numSamples() const override {return m_numSamples;} + int numSamples() const override + { + return m_numSamples; + } int setNumSamples(unsigned n) override { if (n == m_numSamples) return m_numSamples; - int sqrtVal = (n == 0) ? 1 : (int) (std::sqrt((float) n) + 0.5f); + int sqrtVal = (n == 0) ? 1 : (int)(std::sqrt((float)n) + 0.5f); setNumSamples(sqrtVal, sqrtVal); return m_numSamples; } void setNumSamples(unsigned x, unsigned y) { - m_resX = x; - m_resY = y; + m_resX = x; + m_resY = y; m_numSamples = m_resX * m_resY; reset(); } protected: unsigned m_resX, m_resY, m_numSamples; - bool m_randomize; - float m_maxJit; + bool m_randomize; + float m_maxJit; float m_scale; - float** m_samples = nullptr; + float **m_samples = nullptr; - pcg32 m_rand; + pcg32 m_rand; unsigned m_seed = 13; }; - - /// An in-place version of multi-jittered point set with both jittered and n-rooks stratification. /** Produces standard multi-jittered points, but uses 2*sqrt(numSamples) permutation arrays @@ -80,44 +90,57 @@ class MultiJitteredInPlace : public TSamplerDim<2> void reset() override; void sample(float[], unsigned i) override; - bool randomized() const override {return m_randomize;} + bool randomized() const override + { + return m_randomize; + } void setRandomized(bool r) override; - float jitter() const override {return m_maxJit;} - float setJitter(float j = 1.0f) override {m_maxJit = j; reset(); return m_maxJit;} + float jitter() const override + { + return m_maxJit; + } + float setJitter(float j = 1.0f) override + { + m_maxJit = j; + reset(); + return m_maxJit; + } std::string name() const override; - int numSamples() const override {return m_numSamples;} + int numSamples() const override + { + return m_numSamples; + } int setNumSamples(unsigned n) override { if (n == m_numSamples) return m_numSamples; - int sqrtVal = (n == 0) ? 1 : (int) (std::sqrt((float) n) + 0.5f); + int sqrtVal = (n == 0) ? 1 : (int)(std::sqrt((float)n) + 0.5f); setNumSamples(sqrtVal, sqrtVal); return m_numSamples; } void setNumSamples(unsigned x, unsigned y) { - m_resX = x; - m_resY = y; + m_resX = x; + m_resY = y; m_numSamples = m_resX * m_resY; reset(); } protected: unsigned m_resX, m_resY, m_numSamples; - bool m_randomize; - float m_maxJit; + bool m_randomize; + float m_maxJit; float m_scale; - pcg32 m_rand; + pcg32 m_rand; unsigned m_seed = 13; unsigned m_permutation; }; - /// Correlated multi-jittered point sets /** Based on method described in the tech report: @@ -134,10 +157,12 @@ class CorrelatedMultiJittered : public MultiJittered void reset() override; - std::string name() const override {return "Correlated Multi-Jittered";} + std::string name() const override + { + return "Correlated Multi-Jittered"; + } }; - /// An in-place version of correlated multi-jittered point sets. /** Based on method described in the tech report: @@ -145,50 +170,74 @@ class CorrelatedMultiJittered : public MultiJittered > Andrew Kensler. "Correlated Multi-Jittered Sampling", > Pixar Technical Memo 13-01. */ -class CorrelatedMultiJitteredInPlace : public TSamplerMinMaxDim<1,1024> +class CorrelatedMultiJitteredInPlace : public TSamplerMinMaxDim<1, 1024> { public: - CorrelatedMultiJitteredInPlace(unsigned x, unsigned y, unsigned dimensions = 2, bool randomize = true, float jitter = 0.0f); + CorrelatedMultiJitteredInPlace(unsigned x, unsigned y, unsigned dimensions = 2, bool randomize = true, + float jitter = 0.0f); ~CorrelatedMultiJitteredInPlace() override; void sample(float[], unsigned i) override; - unsigned dimensions() const override {return m_numDimensions;} - void setDimensions(unsigned n) override {m_numDimensions = n;} + unsigned dimensions() const override + { + return m_numDimensions; + } + void setDimensions(unsigned n) override + { + m_numDimensions = n; + } - int numSamples() const override {return m_numSamples;} + int numSamples() const override + { + return m_numSamples; + } int setNumSamples(unsigned n) override { if (n == m_numSamples) return m_numSamples; - int sqrtVal = (n == 0) ? 1 : (int) (std::sqrt((float) n) + 0.5f); + int sqrtVal = (n == 0) ? 1 : (int)(std::sqrt((float)n) + 0.5f); setNumSamples(sqrtVal, sqrtVal); return m_numSamples; } void setNumSamples(unsigned x, unsigned y) { - m_resX = x; - m_resY = y; + m_resX = x; + m_resY = y; m_numSamples = m_resX * m_resY; } - bool randomized() const override {return m_randomize;} + bool randomized() const override + { + return m_randomize; + } void setRandomized(bool r) override { - m_randomize = r; + m_randomize = r; m_permutation = r ? m_rand.nextUInt() : 0; } - float jitter() const override {return m_maxJit;} - float setJitter(float j = 1.0f) override {m_maxJit = j; reset(); return m_maxJit;} + float jitter() const override + { + return m_maxJit; + } + float setJitter(float j = 1.0f) override + { + m_maxJit = j; + reset(); + return m_maxJit; + } - std::string name() const override {return "Correlated Multi-Jittered In-Place";} + std::string name() const override + { + return "Correlated Multi-Jittered In-Place"; + } protected: unsigned m_resX, m_resY, m_numSamples, m_numDimensions; - float m_maxJit; - bool m_randomize; - pcg32 m_rand; + float m_maxJit; + bool m_randomize; + pcg32 m_rand; unsigned m_seed = 13; unsigned m_permutation; }; \ No newline at end of file diff --git a/include/sampler/OA.h b/include/sampler/OA.h index cfc4d67..b1847fb 100644 --- a/include/sampler/OA.h +++ b/include/sampler/OA.h @@ -3,8 +3,9 @@ */ #pragma once -#include -#include +#include // for TSamplerMinMaxDim +#include // for basic_string, string +#include // for vector enum OffsetType : unsigned { @@ -24,26 +25,35 @@ enum OffsetType : unsigned class OrthogonalArray : public TSamplerMinMaxDim<2, (unsigned)-1> { public: - OrthogonalArray(unsigned t = 2, unsigned ot = CENTERED, - bool randomize = false, float jitter = 0.0f) - : m_t(t), m_ot(ot), m_randomize(randomize), - m_maxJit(jitter) + OrthogonalArray(unsigned t = 2, unsigned ot = CENTERED, bool randomize = false, float jitter = 0.0f) : + m_t(t), m_ot(ot), m_randomize(randomize), m_maxJit(jitter) { } - ~OrthogonalArray() override {} + ~OrthogonalArray() override + { + } - virtual unsigned strength() const { return m_t; } + virtual unsigned strength() const + { + return m_t; + } virtual unsigned setStrength(unsigned t) { return m_t = (t > 1) ? t : m_t; } - virtual unsigned offsetType() const { return m_ot; } - virtual unsigned setOffsetType(unsigned ot); + virtual unsigned offsetType() const + { + return m_ot; + } + virtual unsigned setOffsetType(unsigned ot); virtual std::vector offsetTypeNames() const; - bool randomized() const override { return m_randomize; } + bool randomized() const override + { + return m_randomize; + } void setRandomized(bool r) override { if ((m_randomize = r)) @@ -52,7 +62,10 @@ class OrthogonalArray : public TSamplerMinMaxDim<2, (unsigned)-1> m_seed = 0; } - float jitter() const override { return m_maxJit; } + float jitter() const override + { + return m_maxJit; + } float setJitter(float j = 1.0f) override { m_maxJit = j; @@ -60,12 +73,15 @@ class OrthogonalArray : public TSamplerMinMaxDim<2, (unsigned)-1> return m_maxJit; } - std::string name() const override { return "Abstract Orthogonal Array"; } + std::string name() const override + { + return "Abstract Orthogonal Array"; + } protected: - unsigned m_t; ///< strength - unsigned m_ot; ///< offset type - bool m_randomize; - unsigned m_seed; ///< randomization/permutation seed - float m_maxJit; ///< amount to jitter within each substratum + unsigned m_t; ///< strength + unsigned m_ot; ///< offset type + bool m_randomize; + unsigned m_seed; ///< randomization/permutation seed + float m_maxJit; ///< amount to jitter within each substratum }; \ No newline at end of file diff --git a/src/Halton.cpp b/src/Halton.cpp index a87fa2e..c820c7a 100644 --- a/src/Halton.cpp +++ b/src/Halton.cpp @@ -2,15 +2,12 @@ \author Wojciech Jarosz */ +#include // for nthPrime #include -#include -#include -#include -#include +#include // for foldedRadicalInverse +#include // for Halton_sampler - -Halton::Halton(unsigned dimensions) : - m_numDimensions(0), m_randomized(true) +Halton::Halton(unsigned dimensions) : m_numDimensions(0), m_randomized(true) { setDimensions(dimensions); setRandomized(true); @@ -44,10 +41,7 @@ void Halton::sample(float r[], unsigned i) r[d] = m_halton.sample(d, i); } - - -HaltonZaremba::HaltonZaremba(unsigned dimensions) : - m_numDimensions(0) +HaltonZaremba::HaltonZaremba(unsigned dimensions) : m_numDimensions(0) { setDimensions(dimensions); } @@ -63,5 +57,5 @@ void HaltonZaremba::setDimensions(unsigned n) void HaltonZaremba::sample(float r[], unsigned i) { for (unsigned d = 0; d < m_numDimensions; d++) - r[d] = foldedRadicalInverse(i, nthPrime(d+1)); + r[d] = foldedRadicalInverse(i, nthPrime(d + 1)); } diff --git a/src/Jittered.cpp b/src/Jittered.cpp index d21a977..b6942c2 100644 --- a/src/Jittered.cpp +++ b/src/Jittered.cpp @@ -3,10 +3,8 @@ */ #include -#include -Jittered::Jittered(unsigned x, unsigned y, float jitter) : - m_resX(x), m_resY(y), m_maxJit(jitter) +Jittered::Jittered(unsigned x, unsigned y, float jitter) : m_resX(x), m_resY(y), m_maxJit(jitter) { reset(); } @@ -22,20 +20,21 @@ std::string Jittered::name() const void Jittered::reset() { - if (m_resX == 0) m_resX = 1; - if (m_resY == 0) m_resY = 1; - m_xScale = 1.0f/m_resX; - m_yScale = 1.0f/m_resY; + if (m_resX == 0) + m_resX = 1; + if (m_resY == 0) + m_resY = 1; + m_xScale = 1.0f / m_resX; + m_yScale = 1.0f / m_resY; // m_rand.seed(m_seed); } - void Jittered::sample(float r[], unsigned i) { if (i == 0) m_rand.seed(m_seed); float jx = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); float jy = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[0] = ((i % m_resX) + jx) * m_xScale; - r[1] = ((i / m_resY) + jy) * m_yScale; + r[0] = ((i % m_resX) + jx) * m_xScale; + r[1] = ((i / m_resY) + jy) * m_yScale; } diff --git a/src/LP.cpp b/src/LP.cpp index 2143a5b..5d80c7c 100644 --- a/src/LP.cpp +++ b/src/LP.cpp @@ -4,30 +4,26 @@ #include #include -#include -LarcherPillichshammerGK::LarcherPillichshammerGK(unsigned dimension, - unsigned numSamples, - bool randomize) : - m_numSamples(numSamples), m_numDimensions(dimension), - m_inv(1.0f/m_numSamples) +LarcherPillichshammerGK::LarcherPillichshammerGK(unsigned dimension, unsigned numSamples, bool randomize) : + m_numSamples(numSamples), m_numDimensions(dimension), m_inv(1.0f / m_numSamples) { setRandomized(randomize); } LarcherPillichshammerGK::~LarcherPillichshammerGK() { - } -void -LarcherPillichshammerGK::sample(float r[], unsigned i) +void LarcherPillichshammerGK::sample(float r[], unsigned i) { - r[0] = randomDigitScramble(i*m_inv, m_scramble1); - if (m_numDimensions == 1) return; + r[0] = randomDigitScramble(i * m_inv, m_scramble1); + if (m_numDimensions == 1) + return; r[1] = LarcherPillichshammerRI(i, m_scramble2); - if (m_numDimensions == 2) return; + if (m_numDimensions == 2) + return; r[2] = GruenschlossKellerRI(i, m_scramble3); } diff --git a/src/Misc.cpp b/src/Misc.cpp index 87c0b04..e5af5cf 100644 --- a/src/Misc.cpp +++ b/src/Misc.cpp @@ -2,16 +2,13 @@ \author Wojciech Jarosz */ -#include -#include #include -#include -#include +#include #include +#include using namespace std; - // Compute the polynomial coefficients by taking the digits // of the sample index i expressed in the base vector iToPolyCoeffs(unsigned i, unsigned base, unsigned degree) @@ -25,34 +22,33 @@ vector iToPolyCoeffs(unsigned i, unsigned base, unsigned degree) return coeffs; } - // Evaluate the polynomial with coefficients coeffs at argument location arg -unsigned polyEval(const vector & coeffs, unsigned arg) +unsigned polyEval(const vector &coeffs, unsigned arg) { unsigned ans = 0; - for (size_t l = coeffs.size(); l--; ) - ans = (ans * arg) + coeffs.at(l); // Horner's rule + for (size_t l = coeffs.size(); l--;) + ans = (ans * arg) + coeffs.at(l); // Horner's rule return ans; } // Galois field version of above -unsigned polyEval(const Galois::Field * gf, vector & coeffs, int arg) +unsigned polyEval(const Galois::Field *gf, vector &coeffs, int arg) { Galois::Element ans(gf, 0); - for (size_t l = coeffs.size(); l--; ) // Horner's rule + for (size_t l = coeffs.size(); l--;) // Horner's rule ans = (ans * arg) + coeffs.at(l); return unsigned(ans.value()); } -unsigned polyEvalExceptOne(const vector &coeffs, int base, size_t - ignoreIdx) +unsigned polyEvalExceptOne(const vector &coeffs, int base, size_t ignoreIdx) { - size_t i = 0; + size_t i = 0; unsigned res = 0; for (size_t j = 0; j < coeffs.size(); j++) { - if (j == ignoreIdx) continue; + if (j == ignoreIdx) + continue; res += coeffs[i] * unsigned(pow(base, i)); i++; } diff --git a/src/MultiJittered.cpp b/src/MultiJittered.cpp index e536785..f9c2c1e 100644 --- a/src/MultiJittered.cpp +++ b/src/MultiJittered.cpp @@ -2,20 +2,18 @@ \author Wojciech Jarosz */ +#include // for permute #include -#include -#include -#include +#include // for swap using namespace std; MultiJittered::MultiJittered(unsigned x, unsigned y, bool randomize, float jitter) : - m_resX(x), m_resY(y), m_numSamples(m_resX*m_resY), m_randomize(randomize), m_maxJit(jitter) + m_resX(x), m_resY(y), m_numSamples(m_resX * m_resY), m_randomize(randomize), m_maxJit(jitter) { reset(); } - MultiJittered::~MultiJittered() { clear(); @@ -26,20 +24,22 @@ void MultiJittered::clear() if (m_samples) for (unsigned d = 0; d < dimensions(); d++) if (m_samples[d]) - delete [] m_samples[d]; - delete [] m_samples; + delete[] m_samples[d]; + delete[] m_samples; m_samples = nullptr; } void MultiJittered::reset() { - if (m_resX == 0) m_resX = 1; - if (m_resY == 0) m_resY = 1; + if (m_resX == 0) + m_resX = 1; + if (m_resY == 0) + m_resY = 1; m_scale = 1.0f / m_numSamples; clear(); - m_samples = new float * [dimensions()]; + m_samples = new float *[dimensions()]; for (unsigned d = 0; d < dimensions(); d++) m_samples[d] = new float[m_numSamples]; @@ -48,30 +48,28 @@ void MultiJittered::reset() for (unsigned i = 0; i < m_resX; i++) for (unsigned j = 0; j < m_resY; j++) { - float jitterx = 0.5f + jitter * (m_rand.nextFloat() - 0.5f); - float jittery = 0.5f + jitter * (m_rand.nextFloat() - 0.5f); - m_samples[0][j * m_resX + i] = i*m_resY + j + jitterx; - m_samples[1][j * m_resX + i] = j*m_resX + i + jittery; + float jitterx = 0.5f + jitter * (m_rand.nextFloat() - 0.5f); + float jittery = 0.5f + jitter * (m_rand.nextFloat() - 0.5f); + m_samples[0][j * m_resX + i] = i * m_resY + j + jitterx; + m_samples[1][j * m_resX + i] = j * m_resX + i + jittery; } if (m_randomize) { // shuffle x coordinates within each column of cells for (unsigned i = 0; i < m_resX; i++) - for (unsigned j = m_resY-1; j >= 1; j--) + for (unsigned j = m_resY - 1; j >= 1; j--) { unsigned k = m_rand.nextUInt(j); - std::swap(m_samples[0][j * m_resX + i], - m_samples[0][k * m_resX + i]); + std::swap(m_samples[0][j * m_resX + i], m_samples[0][k * m_resX + i]); } // shuffle y coordinates within each row of cells for (unsigned j = 0; j < m_resY; j++) - for (unsigned i = m_resX-1; i >= 1; i--) + for (unsigned i = m_resX - 1; i >= 1; i--) { unsigned k = m_rand.nextUInt(i); - std::swap(m_samples[1][j * m_resX + i], - m_samples[1][j * m_resX + k]); + std::swap(m_samples[1][j * m_resX + i], m_samples[1][j * m_resX + k]); } } } @@ -82,16 +80,15 @@ void MultiJittered::sample(float r[], unsigned i) i = 0; for (unsigned d = 0; d < dimensions(); d++) - r[d] = (m_samples[d][i])*m_scale; + r[d] = (m_samples[d][i]) * m_scale; } MultiJitteredInPlace::MultiJitteredInPlace(unsigned x, unsigned y, bool randomize, float jitter) : - m_resX(x), m_resY(y), m_numSamples(m_resX*m_resY), m_randomize(randomize), m_maxJit(jitter) + m_resX(x), m_resY(y), m_numSamples(m_resX * m_resY), m_randomize(randomize), m_maxJit(jitter) { reset(); } - MultiJitteredInPlace::~MultiJitteredInPlace() { clear(); @@ -99,7 +96,7 @@ MultiJitteredInPlace::~MultiJitteredInPlace() std::string MultiJitteredInPlace::name() const { - return tfm::format("MultiJittered In-Place"); + return "MultiJittered In-Place"; } void MultiJitteredInPlace::setRandomized(bool r) @@ -113,16 +110,15 @@ void MultiJitteredInPlace::setRandomized(bool r) void MultiJitteredInPlace::clear() { - } void MultiJitteredInPlace::reset() { - if (m_resX == 0) m_resX = 1; + if (m_resX == 0) + m_resX = 1; m_scale = 1.0f / m_numSamples; } - void MultiJitteredInPlace::sample(float r[], unsigned i) { i = i % m_numSamples; @@ -130,25 +126,23 @@ void MultiJitteredInPlace::sample(float r[], unsigned i) if (i == 0) m_rand.seed(m_seed); - int s = permute(i, m_numSamples, m_permutation * 0x51633e2d); - int x = s % m_resX; - int y = s / m_resX; - int sx = permute(x, m_resX, (y + m_permutation) * 0x68bc21eb); - int sy = permute(y, m_resY, (x + m_permutation) * 0x02e5be93); + int s = permute(i, m_numSamples, m_permutation * 0x51633e2d); + int x = s % m_resX; + int y = s / m_resX; + int sx = permute(x, m_resX, (y + m_permutation) * 0x68bc21eb); + int sy = permute(y, m_resY, (x + m_permutation) * 0x02e5be93); float jx = 0.5f + m_maxJit * (m_rand.nextFloat() - 0.5f); float jy = 0.5f + m_maxJit * (m_rand.nextFloat() - 0.5f); - r[0] = (x + (sy + jx) / m_resY) / m_resX; - r[1] = (y + (sx + jy) / m_resX) / m_resY; + r[0] = (x + (sy + jx) / m_resY) / m_resX; + r[1] = (y + (sx + jy) / m_resX) / m_resY; } - CorrelatedMultiJittered::CorrelatedMultiJittered(unsigned x, unsigned y, bool randomize, float jitter) : MultiJittered(x, y, randomize, jitter) { // empty } - CorrelatedMultiJittered::~CorrelatedMultiJittered() { clear(); @@ -156,13 +150,15 @@ CorrelatedMultiJittered::~CorrelatedMultiJittered() void CorrelatedMultiJittered::reset() { - if (m_resX == 0) m_resX = 1; - if (m_resY == 0) m_resY = 1; + if (m_resX == 0) + m_resX = 1; + if (m_resY == 0) + m_resY = 1; m_scale = 1.0f / m_numSamples; clear(); - m_samples = new float * [dimensions()]; + m_samples = new float *[dimensions()]; for (unsigned d = 0; d < dimensions(); d++) m_samples[d] = new float[m_numSamples]; @@ -171,47 +167,43 @@ void CorrelatedMultiJittered::reset() for (unsigned i = 0; i < m_resX; i++) for (unsigned j = 0; j < m_resY; j++) { - float jitterx = 0.5f + jitter * (m_rand.nextFloat() - 0.5f); - float jittery = 0.5f + jitter * (m_rand.nextFloat() - 0.5f); - m_samples[0][j * m_resX + i] = i*m_resY + j + jitterx; - m_samples[1][j * m_resX + i] = j*m_resX + i + jittery; + float jitterx = 0.5f + jitter * (m_rand.nextFloat() - 0.5f); + float jittery = 0.5f + jitter * (m_rand.nextFloat() - 0.5f); + m_samples[0][j * m_resX + i] = i * m_resY + j + jitterx; + m_samples[1][j * m_resX + i] = j * m_resX + i + jittery; } if (m_randomize) { // shuffle x coordinates within each column of cells - for (unsigned j = m_resY-1; j >= 1; j--) + for (unsigned j = m_resY - 1; j >= 1; j--) { unsigned k = m_rand.nextUInt(j); for (unsigned i = 0; i < m_resX; i++) - std::swap(m_samples[0][j * m_resX + i], - m_samples[0][k * m_resX + i]); + std::swap(m_samples[0][j * m_resX + i], m_samples[0][k * m_resX + i]); } // shuffle y coordinates within each row of cells - for (unsigned i = m_resX-1; i >= 1; i--) + for (unsigned i = m_resX - 1; i >= 1; i--) { unsigned k = m_rand.nextUInt(i); for (unsigned j = 0; j < m_resY; j++) - std::swap(m_samples[1][j * m_resX + i], - m_samples[1][j * m_resX + k]); + std::swap(m_samples[1][j * m_resX + i], m_samples[1][j * m_resX + k]); } } } CorrelatedMultiJitteredInPlace::CorrelatedMultiJitteredInPlace(unsigned x, unsigned y, unsigned dims, bool r, float j) : - m_resX(x), m_resY(y), m_numSamples(m_resX*m_resY), m_numDimensions(dims), m_maxJit(j), m_randomize(r) + m_resX(x), m_resY(y), m_numSamples(m_resX * m_resY), m_numDimensions(dims), m_maxJit(j), m_randomize(r) { setRandomized(r); } - CorrelatedMultiJitteredInPlace::~CorrelatedMultiJitteredInPlace() { // empty } - void CorrelatedMultiJitteredInPlace::sample(float r[], unsigned i) { if (i >= m_numSamples) @@ -220,14 +212,14 @@ void CorrelatedMultiJitteredInPlace::sample(float r[], unsigned i) if (i == 0) m_rand.seed(m_seed); - for (unsigned d = 0; d < dimensions(); d+=2) + for (unsigned d = 0; d < dimensions(); d += 2) { - int s = permute(i, m_numSamples, m_permutation * 0x51633e2d * (d+1)); - int sx = permute(s % m_resX, m_resX, m_permutation * 0x68bc21eb * (d+1)); - int sy = permute(s / m_resX, m_resY, m_permutation * 0x02e5be93 * (d+1)); + int s = permute(i, m_numSamples, m_permutation * 0x51633e2d * (d + 1)); + int sx = permute(s % m_resX, m_resX, m_permutation * 0x68bc21eb * (d + 1)); + int sy = permute(s / m_resX, m_resY, m_permutation * 0x02e5be93 * (d + 1)); float jx = 0.5f + m_maxJit * (m_rand.nextFloat() - 0.5f); float jy = 0.5f + m_maxJit * (m_rand.nextFloat() - 0.5f); - r[d] = (sx + (sy + jx) / m_resY) / m_resX; - r[d+1] = (s + jy) / m_numSamples; + r[d] = (sx + (sy + jx) / m_resY) / m_resX; + r[d + 1] = (s + jy) / m_numSamples; } } diff --git a/src/NRooks.cpp b/src/NRooks.cpp index f0f0fbe..1c504ad 100644 --- a/src/NRooks.cpp +++ b/src/NRooks.cpp @@ -2,10 +2,8 @@ \author Wojciech Jarosz */ -#include #include -#include -#include +#include using namespace std; @@ -21,14 +19,13 @@ NRooks::NRooks(unsigned dims, unsigned samples, bool randomize, float jitter) : NRooks::~NRooks() { - } -void -NRooks::reset() +void NRooks::reset() { - if (m_numSamples == 0) m_numSamples = 1; - m_scale = 1.0f/m_numSamples; + if (m_numSamples == 0) + m_numSamples = 1; + m_scale = 1.0f / m_numSamples; m_permutations.resize(dimensions()); // set up the random permutations for each dimension @@ -41,19 +38,16 @@ NRooks::reset() } } -void -NRooks::sample(float r[], unsigned i) +void NRooks::sample(float r[], unsigned i) { if (i >= m_numSamples) i = 0; float jitter = m_maxJit * m_randomize; for (unsigned d = 0; d < dimensions(); d++) - r[d] = (m_permutations[d][i] + - 0.5f + jitter * (m_rand.nextFloat() - 0.5f)) * m_scale; + r[d] = (m_permutations[d][i] + 0.5f + jitter * (m_rand.nextFloat() - 0.5f)) * m_scale; } - NRooksInPlace::NRooksInPlace(unsigned dim, unsigned n, bool r, float j) : m_numDimensions(dim), m_numSamples(n), m_maxJit(j), m_randomize(r) { @@ -61,7 +55,6 @@ NRooksInPlace::NRooksInPlace(unsigned dim, unsigned n, bool r, float j) : setRandomized(r); } - NRooksInPlace::~NRooksInPlace() { // empty @@ -76,7 +69,6 @@ void NRooksInPlace::reset() m_scrambles[d] = m_randomize ? m_rand.nextUInt() : 0; } - void NRooksInPlace::sample(float r[], unsigned i) { if (i >= m_numSamples) @@ -87,6 +79,5 @@ void NRooksInPlace::sample(float r[], unsigned i) float jitter = m_maxJit * m_randomize; for (unsigned d = 0; d < dimensions(); d++) - r[d] = (permute(i, m_numSamples, m_scrambles[d]) + - 0.5f + jitter * (m_rand.nextFloat() - 0.5f)) / m_numSamples; + r[d] = (permute(i, m_numSamples, m_scrambles[d]) + 0.5f + jitter * (m_rand.nextFloat() - 0.5f)) / m_numSamples; } diff --git a/src/OA.cpp b/src/OA.cpp index 66fb5d2..4e901ae 100644 --- a/src/OA.cpp +++ b/src/OA.cpp @@ -14,5 +14,5 @@ unsigned OrthogonalArray::setOffsetType(unsigned ot) } vector OrthogonalArray::offsetTypeNames() const { - return {{"CTR", "J", "MJ", "CMJ"}}; + return {{"Centered", "Jittered", "Multi-jittered", "Correlated Multi-jittered"}}; } \ No newline at end of file diff --git a/src/OAAddelmanKempthorne.cpp b/src/OAAddelmanKempthorne.cpp index 50d5497..79c0830 100644 --- a/src/OAAddelmanKempthorne.cpp +++ b/src/OAAddelmanKempthorne.cpp @@ -4,12 +4,10 @@ \author Wojciech Jarosz */ -#include -#include #include #include -#include -#include +#include +#include #include using namespace std; @@ -18,7 +16,7 @@ using namespace std; namespace { -int akodd(Galois::Element* kay, vector& b, vector& c, vector& k) +int akodd(Galois::Element *kay, vector &b, vector &c, vector &k) { Galois::Element num(kay->field()), den(kay->field()), four(kay->field()); @@ -43,8 +41,8 @@ int akodd(Galois::Element* kay, vector& b, vector& c, vector& k) b[0] = k[0] = c[0] = 0; for (int i = 1; i < q; i++) { - num = *kay + (p - 1); /* -1 = +(p-1) */ - den = (*kay * four) * i; + num = *kay + (p - 1); /* -1 = +(p-1) */ + den = (*kay * four) * i; b[i] = (num / den).value(); k[i] = (*kay * i).value(); c[i] = ((num * i) * i / four).value(); @@ -53,10 +51,10 @@ int akodd(Galois::Element* kay, vector& b, vector& c, vector& k) return 0; } -int akeven(Galois::Element* kay, vector& b, vector& c, vector& k) +int akeven(Galois::Element *kay, vector &b, vector &c, vector &k) { int q = kay->field()->q; - *kay = 1; + *kay = 1; if (q == 2) b[1] = c[1] = k[1] = 1; @@ -65,9 +63,9 @@ int akeven(Galois::Element* kay, vector& b, vector& c, vector& k) b[1] = c[1] = 2; b[2] = c[2] = 1; b[3] = c[3] = 3; - k[1] = 1; - k[2] = 2; - k[3] = 3; + k[1] = 1; + k[2] = 2; + k[3] = 3; } for (int i = 1; i < q; ++i) @@ -82,10 +80,9 @@ int akeven(Galois::Element* kay, vector& b, vector& c, vector& k) } // namespace -AddelmanKempthorneOAInPlace::AddelmanKempthorneOAInPlace(unsigned x, OffsetType ot, - bool randomize, float jitter, - unsigned dimensions) - : BoseGaloisOAInPlace(x, ot, randomize, jitter, dimensions) +AddelmanKempthorneOAInPlace::AddelmanKempthorneOAInPlace(unsigned x, OffsetType ot, bool randomize, float jitter, + unsigned dimensions) : + BoseGaloisOAInPlace(x, ot, randomize, jitter, dimensions) { setNumSamples(2 * x * x); reset(); @@ -98,9 +95,9 @@ string AddelmanKempthorneOAInPlace::name() const int AddelmanKempthorneOAInPlace::setNumSamples(unsigned n) { - int base = (int)round(sqrt(n * 0.5f)); - base = (base < 2) ? 2 : base; - m_s = primeGE(base); + int base = (int)round(sqrt(n * 0.5f)); + base = (base < 2) ? 2 : base; + m_s = primeGE(base); m_numSamples = 2 * m_s * m_s; m_gf.resize(m_s); reset(); @@ -119,7 +116,8 @@ void AddelmanKempthorneOAInPlace::sample(float r[], unsigned row) if (2 * row < m_numSamples) { // First q*q rows - auto Adim = [this, i, j, square](unsigned dim) { + auto Adim = [this, i, j, square](unsigned dim) + { // re-ordered the dimensions so that i is the first one // mathematically the i.value case is just a special case of the // (i+m*j) when m == 0, but putting i in the first column allows us @@ -142,13 +140,12 @@ void AddelmanKempthorneOAInPlace::sample(float r[], unsigned row) throw domain_error("Out to bounds dimension"); }; - for (unsigned dim = 0; dim < 2 * m_s + 1 && dim < dimensions(); - ++dim) + for (unsigned dim = 0; dim < 2 * m_s + 1 && dim < dimensions(); ++dim) { - int Acol = Adim(dim); - int k = (dim % 2) ? dim - 1 : (dim + 1) % (2 * m_s + 1); - int Aik = Adim(k); - int stratumJ = permute(Acol, m_s, m_seed * (dim+1)); + int Acol = Adim(dim); + int k = (dim % 2) ? dim - 1 : (dim + 1) % (2 * m_s + 1); + int Aik = Adim(k); + int stratumJ = permute(Acol, m_s, m_seed * (dim + 1)); // int sstratJ = boseLHOffset(Acol, 2*Aik, 2*m_s, // m_seed * (dim+1) * 0x68bc21eb, m_ot); LHS with 2*m_s // fine strata int sstratJ = permute(2*Aik, 2*m_s, (Acol + 1) * @@ -162,9 +159,9 @@ void AddelmanKempthorneOAInPlace::sample(float r[], unsigned row) // m_seed * (dim+1))) // sstratJ = 2*m_s - 1 - sstratJ; // antithetic mj - int sstratJ = permute(Aik, m_s, (Acol + 1) * m_seed * (dim+1) * 0x68bc21eb); + int sstratJ = permute(Aik, m_s, (Acol + 1) * m_seed * (dim + 1) * 0x68bc21eb); // randomize which quandrant the samples go into - if (permute(Aik % 2, 2, (Acol * m_s + Aik + 1) * m_seed * (dim+1))) + if (permute(Aik % 2, 2, (Acol * m_s + Aik + 1) * m_seed * (dim + 1))) sstratJ = 2 * m_s - 1 - sstratJ; // // antithetic cmj // int sstratJ = permute(Aik, m_s, m_seed * (dim+1) * @@ -172,10 +169,8 @@ void AddelmanKempthorneOAInPlace::sample(float r[], unsigned row) // // randomize whether cmj points get pushed to upper or lower half // of slice if (permute(Aik % 2, 2, m_seed * (dim+1))) // sstratJ = 2*m_s - 1 - sstratJ; - float jitterJ = 0.5f + int(m_randomize) * m_maxJit * - (m_rand.nextFloat() - 0.5f); - r[dim] = (stratumJ + (sstratJ + jitterJ) / float(2 * m_s)) / - float(m_s); + float jitterJ = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); + r[dim] = (stratumJ + (sstratJ + jitterJ) / float(2 * m_s)) / float(m_s); } } else @@ -184,9 +179,9 @@ void AddelmanKempthorneOAInPlace::sample(float r[], unsigned row) for (size_t dim = 0; dim < dimensions(); ++dim) r[dim] = 0.0f; - vector b(m_s); - vector c(m_s); - vector k(m_s); + vector b(m_s); + vector c(m_s); + vector k(m_s); Galois::Element kay(&m_gf); if (m_gf.p != 2) @@ -196,7 +191,8 @@ void AddelmanKempthorneOAInPlace::sample(float r[], unsigned row) const Galois::Element ksquare = kay * square; - auto Adim = [this, &i, &j, &ksquare, &b, &c, &k](unsigned dim) { + auto Adim = [this, &i, &j, &ksquare, &b, &c, &k](unsigned dim) + { if (dim == 0) return i.value(); if (dim == 1) @@ -215,13 +211,12 @@ void AddelmanKempthorneOAInPlace::sample(float r[], unsigned row) throw domain_error("Out to bounds dimension"); }; - for (unsigned dim = 0; dim < 2 * m_s + 1 && dim < dimensions(); - ++dim) + for (unsigned dim = 0; dim < 2 * m_s + 1 && dim < dimensions(); ++dim) { - int Acol = Adim(dim); - int k = (dim % 2) ? dim - 1 : (dim + 1) % (2 * m_s + 1); - int Aik = Adim(k); - int stratumJ = permute(Acol, m_s, m_seed * (dim+1)); + int Acol = Adim(dim); + int k = (dim % 2) ? dim - 1 : (dim + 1) % (2 * m_s + 1); + int Aik = Adim(k); + int stratumJ = permute(Acol, m_s, m_seed * (dim + 1)); // int sstratJ = boseLHOffset(Acol, 2*Aik+1, 2*m_s, // m_seed * (dim+1) * 0x63bc21eb, m_ot); LHS with 2*m_s // fine strata int sstratJ = permute(2*Aik+1, 2*m_s, (Acol + 1) * @@ -235,9 +230,9 @@ void AddelmanKempthorneOAInPlace::sample(float r[], unsigned row) // m_seed * (dim+1))) // sstratJ = 2*m_s - 1 - sstratJ; // antithetic mj - int sstratJ = permute(Aik, m_s, (Acol + 1) * m_seed * (dim+1) * 0x68bc21eb); + int sstratJ = permute(Aik, m_s, (Acol + 1) * m_seed * (dim + 1) * 0x68bc21eb); // randomize which quandrant the samples go into - if (!permute(Aik % 2, 2, (Acol * m_s + Aik + 1) * m_seed * (dim+1))) + if (!permute(Aik % 2, 2, (Acol * m_s + Aik + 1) * m_seed * (dim + 1))) sstratJ = 2 * m_s - 1 - sstratJ; // // antithetic cmj // int sstratJ = permute(Aik, m_s, m_seed * (dim+1) * @@ -246,10 +241,9 @@ void AddelmanKempthorneOAInPlace::sample(float r[], unsigned row) // of slice if (!permute(Aik % 2, 2, m_seed * (dim+1))) // sstratJ = 2*m_s - 1 - sstratJ; float jitterJ = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[dim] = (stratumJ + (sstratJ + jitterJ) / (2 * m_s)) / m_s; + r[dim] = (stratumJ + (sstratJ + jitterJ) / (2 * m_s)) / m_s; } } } - //// \ No newline at end of file diff --git a/src/OABose.cpp b/src/OABose.cpp index 4557706..8f39fd4 100644 --- a/src/OABose.cpp +++ b/src/OABose.cpp @@ -3,12 +3,11 @@ \author Wojciech Jarosz */ -#include -#include -#include #include #include -#include +#include +#include +#include using namespace std; @@ -20,24 +19,18 @@ float boseLHOffset(int sx, int sy, int s, int p, unsigned type) { switch (type) { - case CENTERED: - return s / 2.0f; - case J_STYLE: - return permute(0, s, (sy * s + sx + 1) * p); - case MJ_STYLE: - return permute(sy, s, (sx + 1) * p); + case CENTERED: return s / 2.0f; + case J_STYLE: return permute(0, s, (sy * s + sx + 1) * p); + case MJ_STYLE: return permute(sy, s, (sx + 1) * p); default: - case CMJ_STYLE: - return permute(sy, s, p); + case CMJ_STYLE: return permute(sy, s, p); } } } // namespace -BoseOA::BoseOA(unsigned x, OffsetType ot, bool randomize, float jitter, - unsigned dimensions) - : OrthogonalArray(2, ot, randomize, jitter), m_s(x), - m_numSamples(m_s * m_s), m_numDimensions(dimensions) +BoseOA::BoseOA(unsigned x, OffsetType ot, bool randomize, float jitter, unsigned dimensions) : + OrthogonalArray(2, ot, randomize, jitter), m_s(x), m_numSamples(m_s * m_s), m_numDimensions(dimensions) { reset(); } @@ -61,7 +54,7 @@ int BoseOA::setNumSamples(unsigned n) void BoseOA::setNumSamples(unsigned x, unsigned) { - m_s = primeGE(x); + m_s = primeGE(x); m_numSamples = m_s * m_s; reset(); @@ -92,7 +85,7 @@ void BoseOA::reset() clear(); - m_samples = new unsigned*[dimensions()]; + m_samples = new unsigned *[dimensions()]; for (unsigned d = 0; d < dimensions(); d++) m_samples[d] = new unsigned[m_numSamples]; @@ -120,7 +113,7 @@ void BoseOA::reset() m_samples[1][i] = (perm[1][Ai2]) * m_s; for (unsigned d = 2; d < dimensions(); ++d) { - int Aid = (Ai1 + (d - 1) * Ai2) % m_s; + int Aid = (Ai1 + (d - 1) * Ai2) % m_s; m_samples[d][i] = (perm[d][Aid]) * m_s; } } @@ -140,7 +133,7 @@ void BoseOA::reset() m_samples[1][i] = perm[1][Ai2] * m_s + Ai1; for (unsigned d = 2; d < dimensions(); ++d) { - int Aid = (Ai1 + (d - 1) * Ai2) % m_s; + int Aid = (Ai1 + (d - 1) * Ai2) % m_s; m_samples[d][i] = perm[d][Aid] * m_s + Ai2; } } @@ -170,8 +163,7 @@ void BoseOA::reset() for (unsigned j = m_s - 1; j >= 1; j--) { unsigned k = m_rand.nextUInt(j); - swap(m_samples[1][j * m_s + i], - m_samples[1][k * m_s + i]); + swap(m_samples[1][j * m_s + i], m_samples[1][k * m_s + i]); } // shuffle x coordinates within each column of cells @@ -179,8 +171,7 @@ void BoseOA::reset() for (unsigned i = m_s - 1; i >= 1; i--) { unsigned k = m_rand.nextUInt(i); - swap(m_samples[0][j * m_s + i], - m_samples[0][j * m_s + k]); + swap(m_samples[0][j * m_s + i], m_samples[0][j * m_s + k]); } // shuffle the strata in each remaining dimension d @@ -203,8 +194,7 @@ void BoseOA::reset() for (unsigned s = 0; s < m_s; s++) { for (unsigned i = pointsInStratum[s].size() - 1; i >= 1; i--) - swap(m_samples[d][pointsInStratum[s][i]], - m_samples[d][pointsInStratum[s][m_rand.nextUInt(i)]]); + swap(m_samples[d][pointsInStratum[s][i]], m_samples[d][pointsInStratum[s][m_rand.nextUInt(i)]]); } } } @@ -224,27 +214,17 @@ void BoseOA::sample(float r[], unsigned i) switch (m_ot) { case CENTERED: - case J_STYLE: - r[d] = (m_samples[d][i] / m_s + - (0.5f + jitter * (m_rand.nextFloat() - 0.5f))) / - m_s; - break; + case J_STYLE: r[d] = (m_samples[d][i] / m_s + (0.5f + jitter * (m_rand.nextFloat() - 0.5f))) / m_s; break; case MJ_STYLE: case CMJ_STYLE: - default: - r[d] = (m_samples[d][i] + - (0.5f + m_maxJit * (m_rand.nextFloat() - 0.5f))) * - m_scale; - break; + default: r[d] = (m_samples[d][i] + (0.5f + m_maxJit * (m_rand.nextFloat() - 0.5f))) * m_scale; break; } } } -BoseOAInPlace::BoseOAInPlace(unsigned x, OffsetType ot, bool randomize, - float jitter, unsigned dimensions) - : OrthogonalArray(2, ot, randomize, jitter), m_s(x), - m_numSamples(m_s * m_s), m_numDimensions(dimensions) +BoseOAInPlace::BoseOAInPlace(unsigned x, OffsetType ot, bool randomize, float jitter, unsigned dimensions) : + OrthogonalArray(2, ot, randomize, jitter), m_s(x), m_numSamples(m_s * m_s), m_numDimensions(dimensions) { reset(); } @@ -263,7 +243,7 @@ int BoseOAInPlace::setNumSamples(unsigned n) void BoseOAInPlace::setNumSamples(unsigned x, unsigned) { - m_s = primeGE(x); + m_s = primeGE(x); m_numSamples = m_s * m_s; reset(); } @@ -280,26 +260,26 @@ void BoseOAInPlace::sample(float r[], unsigned i) unsigned maxDim = min(dimensions(), m_s + 1); - int stratumX = i / m_s; - int stratumY = i % m_s; - int Ai0 = permute(stratumX, m_s, m_seed * 1); - int Ai1 = permute(stratumY, m_s, m_seed * 2); - float sstratX = boseLHOffset(Ai0, Ai1, m_s, m_seed * 1 * 0x68bc21eb, m_ot); - float sstratY = boseLHOffset(Ai1, Ai0, m_s, m_seed * 2 * 0x68bc21eb, m_ot); - float jitterX = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - float jitterY = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[0] = (stratumX + (sstratX + jitterX) / m_s) / m_s; - r[1] = (stratumY + (sstratY + jitterY) / m_s) / m_s; + int stratumX = i / m_s; + int stratumY = i % m_s; + int Ai0 = permute(stratumX, m_s, m_seed * 1); + int Ai1 = permute(stratumY, m_s, m_seed * 2); + float sstratX = boseLHOffset(Ai0, Ai1, m_s, m_seed * 1 * 0x68bc21eb, m_ot); + float sstratY = boseLHOffset(Ai1, Ai0, m_s, m_seed * 2 * 0x68bc21eb, m_ot); + float jitterX = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); + float jitterY = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); + r[0] = (stratumX + (sstratX + jitterX) / m_s) / m_s; + r[1] = (stratumY + (sstratY + jitterY) / m_s) / m_s; for (unsigned j = 2; j < maxDim; ++j) { - int Aij = (Ai0 + (j - 1) * Ai1) % m_s; - int k = (j % 2) ? j - 1 : j + 1; - int Aik = (Ai0 + (k - 1) * Ai1) % m_s; - int stratumJ = permute(Aij, m_s, m_seed * (j+1)); - float sstratJ = boseLHOffset(Aij, Aik, m_s, m_seed * (j+1) * 0x68bc21eb, m_ot); - float jitterJ = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[j] = (stratumJ + (sstratJ + jitterJ) / m_s) / m_s; + int Aij = (Ai0 + (j - 1) * Ai1) % m_s; + int k = (j % 2) ? j - 1 : j + 1; + int Aik = (Ai0 + (k - 1) * Ai1) % m_s; + int stratumJ = permute(Aij, m_s, m_seed * (j + 1)); + float sstratJ = boseLHOffset(Aij, Aik, m_s, m_seed * (j + 1) * 0x68bc21eb, m_ot); + float jitterJ = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); + r[j] = (stratumJ + (sstratJ + jitterJ) / m_s) / m_s; } for (unsigned j = maxDim; j < dimensions(); ++j) @@ -309,10 +289,8 @@ void BoseOAInPlace::sample(float r[], unsigned i) // // -BoseGaloisOAInPlace::BoseGaloisOAInPlace(unsigned x, OffsetType ot, - bool randomize, float jitter, - unsigned dimensions) - : BoseOAInPlace(x, ot, randomize, jitter, dimensions) +BoseGaloisOAInPlace::BoseGaloisOAInPlace(unsigned x, OffsetType ot, bool randomize, float jitter, unsigned dimensions) : + BoseOAInPlace(x, ot, randomize, jitter, dimensions) { setNumSamples(x * x); reset(); @@ -325,9 +303,9 @@ string BoseGaloisOAInPlace::name() const int BoseGaloisOAInPlace::setNumSamples(unsigned n) { - int base = (int)round(sqrt(n)); - base = (base < 2) ? 2 : base; - m_s = primePowerGE(base); + int base = (int)round(sqrt(n)); + base = (base < 2) ? 2 : base; + m_s = primePowerGE(base); m_numSamples = m_s * m_s; m_gf.resize(m_s); reset(); @@ -339,30 +317,29 @@ void BoseGaloisOAInPlace::sample(float r[], unsigned i) if (i == 0) m_rand.seed(m_seed); - int stratumX = i / m_s; - int stratumY = i % m_s; + int stratumX = i / m_s; + int stratumY = i % m_s; Galois::Element Ai0(&m_gf, permute(stratumX, m_s, m_seed * 1)); Galois::Element Ai1(&m_gf, permute(stratumY, m_s, m_seed * 2)); - float sstratX = boseLHOffset(Ai0.value(), Ai1.value(), m_s, m_seed * 1 * 0x68bc21eb, m_ot); - float sstratY = boseLHOffset(Ai1.value(), Ai0.value(), m_s, m_seed * 2 * 0x68bc21eb, m_ot); - float jitterX = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - float jitterY = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[0] = (stratumX + (sstratX + jitterX) / m_s) / m_s; - r[1] = (stratumY + (sstratY + jitterY) / m_s) / m_s; + float sstratX = boseLHOffset(Ai0.value(), Ai1.value(), m_s, m_seed * 1 * 0x68bc21eb, m_ot); + float sstratY = boseLHOffset(Ai1.value(), Ai0.value(), m_s, m_seed * 2 * 0x68bc21eb, m_ot); + float jitterX = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); + float jitterY = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); + r[0] = (stratumX + (sstratX + jitterX) / m_s) / m_s; + r[1] = (stratumY + (sstratY + jitterY) / m_s) / m_s; unsigned maxDim = min(dimensions(), m_s + 1); for (unsigned j = 2; j < maxDim; ++j) { - int km1 = (j % 2) ? j - 2 : j % m_s; - int Aij = (Ai0 + (j - 1) * Ai1).value(); - int Aik = (Ai0 + km1*Ai1).value(); - int stratumJ = permute(Aij, m_s, m_seed * (j+1)); - float sstratJ = boseLHOffset(Aij, Aik, m_s, m_seed * (j+1) * 0x68bc21eb, m_ot); - float jitterJ = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[j] = (stratumJ + (sstratJ + jitterJ) / m_s) / m_s; + int km1 = (j % 2) ? j - 2 : j % m_s; + int Aij = (Ai0 + (j - 1) * Ai1).value(); + int Aik = (Ai0 + km1 * Ai1).value(); + int stratumJ = permute(Aij, m_s, m_seed * (j + 1)); + float sstratJ = boseLHOffset(Aij, Aik, m_s, m_seed * (j + 1) * 0x68bc21eb, m_ot); + float jitterJ = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); + r[j] = (stratumJ + (sstratJ + jitterJ) / m_s) / m_s; } for (unsigned j = maxDim; j < dimensions(); ++j) r[j] = 0.5f; } - diff --git a/src/OABoseBush.cpp b/src/OABoseBush.cpp index 55533ea..7998c1f 100644 --- a/src/OABoseBush.cpp +++ b/src/OABoseBush.cpp @@ -4,19 +4,16 @@ \author Wojciech Jarosz */ -#include #include +#include #define GF_SIZE_DEBUG #define GF_RANGE_DEBUG #include -#include using namespace std; -BoseBushOA::BoseBushOA(unsigned x, OffsetType ot, - bool randomize, float jitter, - unsigned dimensions) - : BoseGaloisOAInPlace(x, ot, randomize, jitter, dimensions) +BoseBushOA::BoseBushOA(unsigned x, OffsetType ot, bool randomize, float jitter, unsigned dimensions) : + BoseGaloisOAInPlace(x, ot, randomize, jitter, dimensions) { setNumSamples(2 * x * x); reset(); @@ -29,7 +26,7 @@ string BoseBushOA::name() const int BoseBushOA::setNumSamples(unsigned n) { - m_s = max(2, (int)pow(2.f, ceil(log2(sqrt(n / 2))))); + m_s = max(2, (int)pow(2.f, ceil(log2(sqrt(n / 2))))); m_numSamples = 2 * m_s * m_s; m_gf.resize(2 * m_s); reset(); @@ -40,12 +37,12 @@ void BoseBushOA::reset() { BoseOAInPlace::reset(); - int q = m_gf.q; + int q = m_gf.q; unsigned s = q / 2; /* number of levels in design */ Array2d A(s, q); - m_B.resize(2 * s*s, dimensions()); + m_B.resize(2 * s * s, dimensions()); int irow = 0; for (int i = 0; i < q; i++) { @@ -54,13 +51,13 @@ void BoseBushOA::reset() { const Galois::Element mul((gi * j) % s); for (unsigned k = 0; k < s; k++) - A(k,j) = (mul + k).value(); + A(k, j) = (mul + k).value(); } for (unsigned k = 0; k < s; k++) { for (unsigned j = 0; j < dimensions() && j < 2 * s; j++) - m_B(irow,j) = A(k,j); + m_B(irow, j) = A(k, j); if (dimensions() >= 2 * s + 1) m_B(irow, 2 * s) = i % s; @@ -71,28 +68,23 @@ void BoseBushOA::reset() void BoseBushOA::sample(float r[], unsigned row) { - int q = m_gf.q; + int q = m_gf.q; unsigned s = q / 2; /* number of levels in design */ for (unsigned dim = 0; dim < dimensions() && dim < 2 * s + 1; ++dim) { - int Acol = m_B(row, dim); - int stratumJ = permute(Acol, m_s, m_seed * (dim+1)); + int Acol = m_B(row, dim); + int stratumJ = permute(Acol, m_s, m_seed * (dim + 1)); float jitterJ = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[dim] = (stratumJ + jitterJ) / m_s; + r[dim] = (stratumJ + jitterJ) / m_s; } } - //// - - -BoseBushOAInPlace::BoseBushOAInPlace(unsigned x, OffsetType ot, - bool randomize, float jitter, - unsigned dimensions) - : BoseGaloisOAInPlace(x, ot, randomize, jitter, dimensions) +BoseBushOAInPlace::BoseBushOAInPlace(unsigned x, OffsetType ot, bool randomize, float jitter, unsigned dimensions) : + BoseGaloisOAInPlace(x, ot, randomize, jitter, dimensions) { setNumSamples(2 * x * x); reset(); @@ -105,7 +97,7 @@ string BoseBushOAInPlace::name() const int BoseBushOAInPlace::setNumSamples(unsigned n) { - m_s = max(2, (int)pow(2.f, ceil(log2(sqrt(n / 2))))); + m_s = max(2, (int)pow(2.f, ceil(log2(sqrt(n / 2))))); m_numSamples = 2 * m_s * m_s; m_gf.resize(2 * m_s); reset(); @@ -114,20 +106,19 @@ int BoseBushOAInPlace::setNumSamples(unsigned n) void BoseBushOAInPlace::sample(float r[], unsigned row) { - int q = m_gf.q; + int q = m_gf.q; unsigned s = q / 2; /* number of levels in design */ - unsigned i = row / s; + unsigned i = row / s; const Galois::Element gi(&m_gf, i); for (unsigned dim = 0; dim < dimensions() && dim < 2 * s + 1; ++dim) { - int A = (dim < 2 * s) ? (((gi * dim) % s) + (row % s)).value() - : i % s; - - int stratumJ = permute(A, m_s, m_seed * (dim+1)); + int A = (dim < 2 * s) ? (((gi * dim) % s) + (row % s)).value() : i % s; + + int stratumJ = permute(A, m_s, m_seed * (dim + 1)); float jitterJ = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[dim] = (stratumJ + jitterJ) / m_s; + r[dim] = (stratumJ + jitterJ) / m_s; } } \ No newline at end of file diff --git a/src/OABush.cpp b/src/OABush.cpp index 25ba10e..017c2ab 100644 --- a/src/OABush.cpp +++ b/src/OABush.cpp @@ -3,10 +3,9 @@ \author Wojciech Jarosz */ -#include -#include -#include #include +#include +#include using namespace std; @@ -18,27 +17,22 @@ float bushLHOffset(int i, int N, int s, int numSS, int p, unsigned type) { switch (type) { - case CENTERED: - return numSS / 2.0f; - case J_STYLE: - return permute((i / s) % numSS, numSS, (i + 1) * p); - case MJ_STYLE: - return permute((i / s) % numSS, numSS, p); + case CENTERED: return numSS / 2.0f; + case J_STYLE: return permute((i / s) % numSS, numSS, (i + 1) * p); + case MJ_STYLE: return permute((i / s) % numSS, numSS, p); // the following is still a work in progress, seems to work for strength 3, // but not others. default: - case CMJ_STYLE: - return (permute((i / s) % s, s, p) + permute(i % s, s, p * 2) * (numSS / s)) % numSS; + case CMJ_STYLE: return (permute((i / s) % s, s, p) + permute(i % s, s, p * 2) * (numSS / s)) % numSS; } } } // namespace - -BushOAInPlace::BushOAInPlace(unsigned x, unsigned strength, OffsetType ot, - bool randomize, float jitter, unsigned dimensions) - : BoseOAInPlace(x, ot, randomize, jitter, dimensions) +BushOAInPlace::BushOAInPlace(unsigned x, unsigned strength, OffsetType ot, bool randomize, float jitter, + unsigned dimensions) : + BoseOAInPlace(x, ot, randomize, jitter, dimensions) { m_t = strength; } @@ -57,7 +51,7 @@ int BushOAInPlace::setNumSamples(unsigned n) void BushOAInPlace::setNumSamples(unsigned x, unsigned) { - m_s = primeGE(x); + m_s = primeGE(x); m_numSamples = pow(m_s, m_t); reset(); } @@ -71,32 +65,29 @@ void BushOAInPlace::sample(float r[], unsigned i) auto coeffs = iToPolyCoeffs(i, m_s, m_t); unsigned numSubStrata = m_numSamples / m_s; - unsigned add = m_ot == CMJ_STYLE ? 1 : 0; - unsigned maxDim = min(dimensions(), m_s - add); - unsigned s = m_s; + unsigned add = m_ot == CMJ_STYLE ? 1 : 0; + unsigned maxDim = min(dimensions(), m_s - add); + unsigned s = m_s; for (unsigned d = 0; d < maxDim; ++d) { - int phi = polyEval(coeffs, d + add); - int stratum = permute(phi % m_s, m_s, m_seed * (d+1)); + int phi = polyEval(coeffs, d + add); + int stratum = permute(phi % m_s, m_s, m_seed * (d + 1)); - float subStratum = bushLHOffset(i, m_numSamples, m_s, numSubStrata, m_seed * (d+1) * 0x02e5be93, m_ot); + float subStratum = bushLHOffset(i, m_numSamples, m_s, numSubStrata, m_seed * (d + 1) * 0x02e5be93, m_ot); float jitter = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[d] = (stratum + (subStratum + jitter) / numSubStrata) / s; + r[d] = (stratum + (subStratum + jitter) / numSubStrata) / s; } for (unsigned d = maxDim; d < dimensions(); ++d) r[d] = 0.5f; } - //// - - -BushGaloisOAInPlace::BushGaloisOAInPlace(unsigned x, unsigned strength, OffsetType ot, - bool randomize, float jitter, unsigned dimensions) - : BushOAInPlace(x, strength, ot, randomize, jitter, dimensions) +BushGaloisOAInPlace::BushGaloisOAInPlace(unsigned x, unsigned strength, OffsetType ot, bool randomize, float jitter, + unsigned dimensions) : + BushOAInPlace(x, strength, ot, randomize, jitter, dimensions) { setNumSamples(x); reset(); @@ -116,7 +107,7 @@ int BushGaloisOAInPlace::setNumSamples(unsigned n) void BushGaloisOAInPlace::setNumSamples(unsigned x, unsigned) { - m_s = primePowerGE(x); + m_s = primePowerGE(x); m_numSamples = pow(m_s, m_t); m_gf.resize(m_s); reset(); @@ -131,18 +122,18 @@ void BushGaloisOAInPlace::sample(float r[], unsigned i) auto coeffs = iToPolyCoeffs(i, m_s, m_t); unsigned numSubStrata = m_numSamples / m_s; - unsigned add = m_ot == CMJ_STYLE ? 1 : 0; - unsigned maxDim = min(dimensions(), m_s - add); - unsigned s = m_s; + unsigned add = m_ot == CMJ_STYLE ? 1 : 0; + unsigned maxDim = min(dimensions(), m_s - add); + unsigned s = m_s; for (unsigned d = 0; d < maxDim; ++d) { - int phi = polyEval(&m_gf, coeffs, d + add); - int stratum = permute(phi, m_s, m_seed * (d+1)); + int phi = polyEval(&m_gf, coeffs, d + add); + int stratum = permute(phi, m_s, m_seed * (d + 1)); - float subStratum = bushLHOffset(i, m_numSamples, m_s, numSubStrata, m_seed * (d+1) * 0x02e5be93, m_ot); + float subStratum = bushLHOffset(i, m_numSamples, m_s, numSubStrata, m_seed * (d + 1) * 0x02e5be93, m_ot); float jitter = 0.5f + int(m_randomize) * m_maxJit * (m_rand.nextFloat() - 0.5f); - r[d] = (stratum + (subStratum + jitter) / numSubStrata) / s; + r[d] = (stratum + (subStratum + jitter) / numSubStrata) / s; } for (unsigned d = maxDim; d < dimensions(); ++d) From df49a0ba550778533bade6eab644a5df297a4233 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Mon, 27 Nov 2023 13:37:00 +0100 Subject: [PATCH 02/27] adding --help option --- gui/SampleViewer.cpp | 54 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index 6208f66..7bebc89 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -1377,9 +1377,55 @@ static void writeEPSPoints(const Array2d &points, int start, int count, c } } -int main(int, char **) +int main(int argc, char **argv) { - SampleViewer viewer; - viewer.run(); - return 0; + vector args; + bool help = false; + bool error = false; + bool launched_from_finder = false; + + try + { + for (int i = 1; i < argc; ++i) + { + if (strcmp("--help", argv[i]) == 0 || strcmp("-h", argv[i]) == 0) + help = true; + else if (strncmp("-psn", argv[i], 4) == 0) + launched_from_finder = true; + else + { + if (strncmp(argv[i], "-", 1) == 0) + { + cerr << "Invalid argument: \"" << argv[i] << "\"!" << endl; + help = true; + error = true; + } + args.push_back(argv[i]); + } + } + } + catch (const std::exception &e) + { + cout << "Error: " << e.what() << endl; + help = true; + error = true; + } + if (help) + { + cout << "Syntax: " << argv[0] << endl; + cout << "Options:" << endl; + cout << " -h, --help Display this message" << endl; + return error ? EXIT_FAILURE : EXIT_SUCCESS; + } + try + { + SampleViewer viewer; + viewer.run(); + } + catch (const std::runtime_error &e) + { + cerr << "Caught a fatal error: " << e.what() << endl; + return EXIT_FAILURE; + } + return EXIT_SUCCESS; } From 844c2287d15d7938457b4322c2442adc6a9f9044 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Mon, 27 Nov 2023 13:39:40 +0100 Subject: [PATCH 03/27] Update CMakeLists.txt --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b3f1ae1..bbecc47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -225,8 +225,8 @@ set_target_properties(samplerlib PROPERTIES 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") +# elseif(WIN32) + # set(EXTRA_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/resources/icon.rc") endif() set(HELLO_IMGUI_BUNDLE_IDENTIFIER_URL_PART "com.im.SamplinSafari") From 0f259168d4947c7e422449fe0c6197f31d73fad5 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Mon, 27 Nov 2023 13:53:28 +0100 Subject: [PATCH 04/27] trying to fix build errors on windows --- gui/SampleViewer.cpp | 12 +++++++++--- gui/SampleViewer.h | 4 +++- gui/gui_app.cpp | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index 7bebc89..a273fa4 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -10,6 +10,12 @@ namespace fs = std::filesystem; using namespace linalg::ostream_overloads; +using std::cerr; +using std::cout; +using std::endl; +using std::ofstream; +using std::to_string; + #include "hello_imgui/hello_imgui.h" #include "imgui.h" #include "imgui_internal.h" @@ -272,7 +278,7 @@ int2 SampleViewer::get_draw_range() const { int start = 0, count = m_point_count; if (m_subset_by_coord) - count = min(count, m_subset_count); + count = std::min(count, m_subset_count); else if (m_subset_by_index) { start = m_first_draw_point; @@ -422,8 +428,8 @@ void SampleViewer::draw_editor() if (accept_keys && (ImGui::IsKeyPressed(ImGuiKey_LeftArrow) || ImGui::IsKeyPressed(ImGuiKey_RightArrow))) { m_target_point_count = - max(1u, ImGui::IsKeyPressed(ImGuiKey_RightArrow) ? roundUpPow2(m_target_point_count + 1) - : roundDownPow2(m_target_point_count - 1)); + std::max(1u, ImGui::IsKeyPressed(ImGuiKey_RightArrow) ? roundUpPow2(m_target_point_count + 1) + : roundDownPow2(m_target_point_count - 1)); update_GPU_points(); update_GPU_grids(); } diff --git a/gui/SampleViewer.h b/gui/SampleViewer.h index 71f21dd..e8daca2 100644 --- a/gui/SampleViewer.h +++ b/gui/SampleViewer.h @@ -39,7 +39,9 @@ using namespace linalg::aliases; #include #include -using namespace std; +using std::ofstream; +using std::string; +using std::vector; enum PointType { diff --git a/gui/gui_app.cpp b/gui/gui_app.cpp index 8c666ac..253b9ed 100644 --- a/gui/gui_app.cpp +++ b/gui/gui_app.cpp @@ -129,7 +129,7 @@ void GUIApp::register_callbacks() void GUIApp::cursor_pos_event(double x, double y) { - int2 p{x, y}; + int2 p{int(x), int(y)}; #if defined(_WIN32) || defined(__linux__) || defined(EMSCRIPTEN) p = int2(float2(p) / m_pixel_ratio); From 0a88f2bd258a35e1ae461f6dc285286110e56c5c Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Mon, 27 Nov 2023 14:00:49 +0100 Subject: [PATCH 05/27] trying to fix windows build2 --- gui/SampleViewer.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index a273fa4..2b69657 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -3,6 +3,8 @@ */ #define _USE_MATH_DEFINES +#define NOMINMAX + #include "SampleViewer.h" #include @@ -296,11 +298,11 @@ void SampleViewer::draw_gui() if (auto id = m_params.dockingParams.dockSpaceIdFromName("MainDockSpace")) { auto central_node = ImGui::DockBuilderGetCentralNode(*id); - m_viewport_size = int2{central_node->Size.x, central_node->Size.y}; - m_viewport_pos = int2{central_node->Pos.x, central_node->Pos.y}; + m_viewport_size = int2{int(central_node->Size.x), int(central_node->Size.y)}; + m_viewport_pos = int2{int(central_node->Pos.x), int(central_node->Pos.y)}; // flip y coordinates between ImGui and OpenGL screen coordinates - m_viewport_pos_GL = - int2{central_node->Pos.x, (ImGui::GetIO().DisplaySize.y - (central_node->Pos.y + central_node->Size.y))}; + m_viewport_pos_GL = int2{int(central_node->Pos.x), + int(ImGui::GetIO().DisplaySize.y - (central_node->Pos.y + central_node->Size.y))}; } float radius = map_slider_to_radius(m_radius); From b031d13b40f0ad3cd6a891032b018939777f2394 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Mon, 27 Nov 2023 14:20:58 +0100 Subject: [PATCH 06/27] Update SampleViewer.cpp --- gui/SampleViewer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index 2b69657..c239b3b 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -953,7 +953,7 @@ void SampleViewer::draw() void SampleViewer::draw_text(const int2 &pos, const string &text, const float4 &color, int font_size, int fixed_width, int align) const { - float2 apos{pos.x, pos.y}; + float2 apos{pos}; float2 size = ImGui::CalcTextSize(text.c_str()); if (align & TextAlign_LEFT) From 4bb9cf6a07a67952414e023faa1c1a7e2263ee1f Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Tue, 28 Nov 2023 13:15:07 +0100 Subject: [PATCH 07/27] fixing macos bundles in hello imgui --- CMakeLists.txt | 60 ++-- gui/SampleViewer.cpp | 536 ++++++++++++++-------------- gui/SampleViewer.h | 2 +- macos/Info.plist | 29 ++ macos/icon.icns | Bin 0 -> 680697 bytes resources/MacOSXBundleInfo.plist.in | 252 ------------- 6 files changed, 319 insertions(+), 560 deletions(-) create mode 100644 macos/Info.plist create mode 100644 macos/icon.icns delete mode 100644 resources/MacOSXBundleInfo.plist.in diff --git a/CMakeLists.txt b/CMakeLists.txt index bbecc47..357ef33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,15 +9,14 @@ 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 1.1.0 + LANGUAGES C CXX + ) if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(SAMPLINSAFARI_VERSION "${SAMPLINSAFARI_VERSION} (64 bit)") + set(APP_BITS_VERSION "64 bit") elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) - set(SAMPLINSAFARI_VERSION "${SAMPLINSAFARI_VERSION} (32 bit)") + set(APP_BITS_VERSION "32 bit") endif() include(sanitizers) @@ -145,10 +144,12 @@ endif() cpmaddpackage( NAME hello_imgui GITHUB_REPOSITORY wkjarosz/hello_imgui - GIT_TAG "c5121ed50314596c575ec613df93b73b39711292" + GIT_TAG "873fec179d5ccc090f166f9cddc5caeca92dfa14" OPTIONS "HELLOIMGUI_WITH_GLFW ON" - "HELLOIMGUI_WITH_TEST_ENGINE OFF") + "HELLOIMGUI_WITH_TEST_ENGINE OFF" + # "HELLOIMGUI_MACOS_NO_BUNDLE ON" + ) # ============================================================================ @@ -220,52 +221,37 @@ set_target_properties(samplerlib PROPERTIES CXX_STANDARD 17) # Now build the Samplin' Safari viewer app +string(TIMESTAMP YEAR "%Y") -# 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() - +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 "Samplin' Safari") -set(HELLO_IMGUI_BUNDLE_NAME "Samplin' Safari") -set(HELLO_IMGUI_BUNDLE_COPYRIGHT "© Wojciech Jarosz") -set(HELLO_IMGUI_BUNDLE_EXECUTABLE ${app_name}) -set(HELLO_IMGUI_BUNDLE_VERSION ${SAMPLINSAFARI_VERSION}) +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 ${APP_BITS_VERSION}) +set(HELLO_IMGUI_BUNDLE_SHORT_VERSION ${PROJECT_VERSION}) set(HELLO_IMGUI_BUNDLE_ICON_FILE icon.icns) hello_imgui_add_app(SamplinSafari gui/SampleViewer.cpp gui/shader.cpp gui/gui_app.cpp - ${EXTRA_SOURCE}) + ) set_target_properties(SamplinSafari PROPERTIES - OUTPUT_NAME "SamplinSafari" - CXX_STANDARD 17) + OUTPUT_NAME ${output_name} + CXX_STANDARD 17 + ) target_link_libraries( SamplinSafari PRIVATE samplerlib linalg fmt::fmt - portable_file_dialogs) - -if (APPLE) - # Build an application bundle on OSX - set_target_properties(SamplinSafari PROPERTIES - MACOSX_BUNDLE TRUE - MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/resources/MacOSXBundleInfo.plist.in) - 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() - + portable_file_dialogs + ) if (UNIX AND NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG) add_custom_command(TARGET SamplinSafari POST_BUILD COMMAND strip $) diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index c239b3b..188149e 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -7,9 +7,6 @@ #include "SampleViewer.h" -#include - -namespace fs = std::filesystem; using namespace linalg::ostream_overloads; using std::cerr; @@ -198,29 +195,37 @@ SampleViewer::SampleViewer() : GUIApp() // Dockable windows // the parameter editor - HelloImGui::DockableWindow winEditor; - winEditor.label = "Editor"; - winEditor.dockSpaceName = "EditorDock"; - winEditor.canBeClosed = true; - winEditor.callBeginEnd = false; - winEditor.GuiFunction = [this] { draw_editor(); }; - - // A Log window named "Logs" will be placed in "MiscSpace". It uses the HelloImGui logger gui - HelloImGui::DockableWindow logsWindow; - logsWindow.label = "Logs"; - logsWindow.dockSpaceName = "MiscSpace"; - logsWindow.GuiFunction = [] { HelloImGui::LogGui(); }; - - m_params.dockingParams.dockableWindows = {winEditor, logsWindow}; + HelloImGui::DockableWindow editorWindow; + editorWindow.label = "Sample parameters"; + editorWindow.dockSpaceName = "EditorSpace"; + editorWindow.canBeClosed = false; + editorWindow.GuiFunction = [this] { draw_editor(); }; + + // A console window named "Console" will be placed in "ConsoleSpace". It uses the HelloImGui logger gui + HelloImGui::DockableWindow consoleWindow; + consoleWindow.label = "Console"; + consoleWindow.dockSpaceName = "ConsoleSpace"; + consoleWindow.isVisible = false; + consoleWindow.rememberIsVisible = true; + consoleWindow.GuiFunction = [] { HelloImGui::LogGui(); }; + + m_params.dockingParams.dockableWindows = {editorWindow, consoleWindow}; // Docking Splits { - HelloImGui::DockingSplit split; - split.initialDock = "MainDockSpace"; - split.newDock = "EditorDock"; - split.direction = ImGuiDir_Right; - split.ratio = 0.25f; - m_params.dockingParams.dockingSplits = {split}; + HelloImGui::DockingSplit splitEditorMain; + splitEditorMain.initialDock = "MainDockSpace"; + splitEditorMain.newDock = "EditorSpace"; + splitEditorMain.direction = ImGuiDir_Left; + splitEditorMain.ratio = 0.2f; + + HelloImGui::DockingSplit splitMainConsole; + splitMainConsole.initialDock = "MainDockSpace"; + splitMainConsole.newDock = "ConsoleSpace"; + splitMainConsole.direction = ImGuiDir_Down; + splitMainConsole.ratio = 0.25f; + + m_params.dockingParams.dockingSplits = {splitEditorMain, splitMainConsole}; } m_params.callbacks.LoadAdditionalFonts = []() @@ -291,8 +296,6 @@ int2 SampleViewer::get_draw_range() const void SampleViewer::draw_gui() { - HelloImGui::Log(HelloImGui::LogLevel::Info, "Current working directory: %s.", fs::current_path().c_str()); - m_viewport_pos_GL = m_viewport_pos = {0, 0}; m_viewport_size = m_fbsize; if (auto id = m_params.dockingParams.dockSpaceIdFromName("MainDockSpace")) @@ -338,7 +341,7 @@ void SampleViewer::draw_gui() else { for (int i = 0; i < 3; ++i) - draw_text(m_viewport_pos + m_viewport_size - int2(200, (2 - i) * 14 + 20), m_time_strings[i], + draw_text(m_viewport_pos + m_viewport_size - int2(20, (2 - i) * 14 + 20), m_time_strings[i], float4(1.0f, 1.0f, 1.0f, 0.75f), 16, 0); int2 range = get_draw_range(); @@ -373,291 +376,284 @@ void SampleViewer::draw_editor() return; } - ImGui::Begin("Sample parameters"); - { - // ========================================================= - ImGui::SeparatorText("Point set"); - // ========================================================= + // ========================================================= + ImGui::SeparatorText("Point set"); + // ========================================================= - if (ImGui::BeginCombo("##", m_samplers[m_sampler]->name().c_str())) + if (ImGui::BeginCombo("##", m_samplers[m_sampler]->name().c_str())) + { + for (int n = 0; n < NUM_POINT_TYPES; n++) { - for (int n = 0; n < NUM_POINT_TYPES; n++) + Sampler *sampler = m_samplers[n]; + const bool is_selected = (m_sampler == n); + if (ImGui::Selectable(sampler->name().c_str(), is_selected)) { - Sampler *sampler = m_samplers[n]; - const bool is_selected = (m_sampler == n); - if (ImGui::Selectable(sampler->name().c_str(), is_selected)) - { - m_sampler = n; - sampler->setJitter(m_jitter * 0.01f); - sampler->setRandomized(m_randomize); - update_GPU_points(); - update_GPU_grids(); - HelloImGui::Log(HelloImGui::LogLevel::Debug, "Switching to sampler %d: %s.", m_sampler, - sampler->name().c_str()); - } - - // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) - if (is_selected) - ImGui::SetItemDefaultFocus(); + m_sampler = n; + sampler->setJitter(m_jitter * 0.01f); + sampler->setRandomized(m_randomize); + update_GPU_points(); + update_GPU_grids(); + HelloImGui::Log(HelloImGui::LogLevel::Debug, "Switching to sampler %d: %s.", m_sampler, + sampler->name().c_str()); } - ImGui::EndCombo(); - } - ImGui::SetItemTooltip("Key: Up/Down"); - if (accept_keys && !ImGui::IsKeyDown(ImGuiMod_Shift) && - (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) - { - int delta = ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1; - m_sampler = mod(m_sampler + delta, (int)NUM_POINT_TYPES); - Sampler *sampler = m_samplers[m_sampler]; - sampler->setJitter(m_jitter * 0.01f); - sampler->setRandomized(m_randomize); - update_GPU_points(); - update_GPU_grids(); - } - if (ImGui::SliderInt("Num points", &m_target_point_count, 1, 1 << 17, "%d", - ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_AlwaysClamp)) - { - HelloImGui::Log(HelloImGui::LogLevel::Debug, "Setting target point count to %d.", m_target_point_count); - update_GPU_points(); - update_GPU_grids(); - HelloImGui::Log(HelloImGui::LogLevel::Debug, "Regenerated %d points.", m_point_count); - } - // now that the user has finished editing, sync the GUI value - if (ImGui::IsItemDeactivatedAfterEdit()) - m_target_point_count = m_point_count; - ImGui::SetItemTooltip("Key: Left/Right"); - if (accept_keys && (ImGui::IsKeyPressed(ImGuiKey_LeftArrow) || ImGui::IsKeyPressed(ImGuiKey_RightArrow))) - { - m_target_point_count = - std::max(1u, ImGui::IsKeyPressed(ImGuiKey_RightArrow) ? roundUpPow2(m_target_point_count + 1) - : roundDownPow2(m_target_point_count - 1)); - update_GPU_points(); - update_GPU_grids(); + // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) + if (is_selected) + ImGui::SetItemDefaultFocus(); } + ImGui::EndCombo(); + } + ImGui::SetItemTooltip("Key: Up/Down"); + if (accept_keys && !ImGui::IsKeyDown(ImGuiMod_Shift) && + (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) + { + int delta = ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1; + m_sampler = mod(m_sampler + delta, (int)NUM_POINT_TYPES); + Sampler *sampler = m_samplers[m_sampler]; + sampler->setJitter(m_jitter * 0.01f); + sampler->setRandomized(m_randomize); + update_GPU_points(); + update_GPU_grids(); + } - if (ImGui::SliderInt("Dimensions", &m_num_dimensions, 2, 10, "%d", ImGuiSliderFlags_AlwaysClamp)) - { - update_GPU_points(); - update_GPU_grids(); - } - ImGui::SetItemTooltip("Key: D/d"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_D)) + if (ImGui::SliderInt("Num points", &m_target_point_count, 1, 1 << 17, "%d", + ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_AlwaysClamp)) + { + HelloImGui::Log(HelloImGui::LogLevel::Debug, "Setting target point count to %d.", m_target_point_count); + update_GPU_points(); + update_GPU_grids(); + HelloImGui::Log(HelloImGui::LogLevel::Debug, "Regenerated %d points.", m_point_count); + } + // now that the user has finished editing, sync the GUI value + if (ImGui::IsItemDeactivatedAfterEdit()) + m_target_point_count = m_point_count; + ImGui::SetItemTooltip("Key: Left/Right"); + if (accept_keys && (ImGui::IsKeyPressed(ImGuiKey_LeftArrow) || ImGui::IsKeyPressed(ImGuiKey_RightArrow))) + { + m_target_point_count = + std::max(1u, ImGui::IsKeyPressed(ImGuiKey_RightArrow) ? roundUpPow2(m_target_point_count + 1) + : roundDownPow2(m_target_point_count - 1)); + update_GPU_points(); + update_GPU_grids(); + } + + if (ImGui::SliderInt("Dimensions", &m_num_dimensions, 2, 10, "%d", ImGuiSliderFlags_AlwaysClamp)) + { + update_GPU_points(); + update_GPU_grids(); + } + ImGui::SetItemTooltip("Key: D/d"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_D)) + { + m_num_dimensions = std::clamp(m_num_dimensions + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1), 2, 10); + update_GPU_points(); + update_GPU_grids(); + } + + if (ImGui::Checkbox("Randomize", &m_randomize)) + update_GPU_points(); + ImGui::SetItemTooltip("Key: R/r"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_R)) + { + if (ImGui::IsKeyDown(ImGuiMod_Shift)) { - m_num_dimensions = std::clamp(m_num_dimensions + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1), 2, 10); - update_GPU_points(); - update_GPU_grids(); + m_randomize = true; + m_samplers[m_sampler]->setRandomized(true); } + else + m_randomize = !m_randomize; + update_GPU_points(); + } - if (ImGui::Checkbox("Randomize", &m_randomize)) - update_GPU_points(); - ImGui::SetItemTooltip("Key: R/r"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_R)) + if (ImGui::SliderFloat("Jitter", &m_jitter, 0.f, 100.f, "%3.1f%%")) + { + m_samplers[m_sampler]->setJitter(m_jitter * 0.01f); + update_GPU_points(); + update_GPU_grids(); + } + + // add optional widgets for OA samplers + if (OrthogonalArray *oa = dynamic_cast(m_samplers[m_sampler])) + { + // Controls for the strengths of the OA + auto change_strength = [oa, this](int strength) { - if (ImGui::IsKeyDown(ImGuiMod_Shift)) + if ((unsigned)strength != oa->strength()) { - m_randomize = true; - m_samplers[m_sampler]->setRandomized(true); + oa->setStrength(strength); + update_GPU_points(); + update_GPU_grids(); } - else - m_randomize = !m_randomize; - update_GPU_points(); - } - - if (ImGui::SliderFloat("Jitter", &m_jitter, 0.f, 100.f, "%3.1f%%")) + }; + int strength = oa->strength(); + if (ImGui::InputInt("Strength", &strength, 1)) + change_strength(std::max(2, strength)); + ImGui::SetItemTooltip("Key: T/t"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_T)) + change_strength(std::max(2, strength + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1))); + + // Controls for the offset type of the OA + auto offset_names = oa->offsetTypeNames(); + auto change_offset_type = [oa, this](int offset) { - m_samplers[m_sampler]->setJitter(m_jitter * 0.01f); + oa->setOffsetType(offset); + m_jitter = oa->jitter(); update_GPU_points(); update_GPU_grids(); - } - - // add optional widgets for OA samplers - if (OrthogonalArray *oa = dynamic_cast(m_samplers[m_sampler])) + }; + if (ImGui::BeginCombo("Offset type", offset_names[oa->offsetType()].c_str())) { - // Controls for the strengths of the OA - auto change_strength = [oa, this](int strength) - { - if ((unsigned)strength != oa->strength()) - { - oa->setStrength(strength); - update_GPU_points(); - update_GPU_grids(); - } - }; - int strength = oa->strength(); - if (ImGui::InputInt("Strength", &strength, 1)) - change_strength(std::max(2, strength)); - ImGui::SetItemTooltip("Key: T/t"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_T)) - change_strength(std::max(2, strength + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1))); - - // Controls for the offset type of the OA - auto offset_names = oa->offsetTypeNames(); - auto change_offset_type = [oa, this](int offset) + for (unsigned n = 0; n < offset_names.size(); n++) { - oa->setOffsetType(offset); - m_jitter = oa->jitter(); - update_GPU_points(); - update_GPU_grids(); - }; - if (ImGui::BeginCombo("Offset type", offset_names[oa->offsetType()].c_str())) - { - for (unsigned n = 0; n < offset_names.size(); n++) - { - const bool is_selected = (oa->offsetType() == n); - if (ImGui::Selectable(offset_names[n].c_str(), is_selected)) - change_offset_type(n); + const bool is_selected = (oa->offsetType() == n); + if (ImGui::Selectable(offset_names[n].c_str(), is_selected)) + change_offset_type(n); - // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) - if (is_selected) - ImGui::SetItemDefaultFocus(); - } - ImGui::EndCombo(); + // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) + if (is_selected) + ImGui::SetItemDefaultFocus(); } - ImGui::SetItemTooltip("Key: Shift+Up/Down"); - if (accept_keys && ImGui::IsKeyDown(ImGuiMod_Shift) && - (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) - change_offset_type(mod((int)oa->offsetType() + (ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1), - (int)NUM_OFFSET_TYPES)); + ImGui::EndCombo(); } + ImGui::SetItemTooltip("Key: Shift+Up/Down"); + if (accept_keys && ImGui::IsKeyDown(ImGuiMod_Shift) && + (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) + change_offset_type( + mod((int)oa->offsetType() + (ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1), (int)NUM_OFFSET_TYPES)); + } - // ========================================================= - ImGui::SeparatorText("Camera/view"); - // ========================================================= - - // ImGui::RadioButton("XY", &m_view, 0); - // ImGui::SameLine(); - // ImGui::RadioButton("YZ", &m_view, 1); - // ImGui::SameLine(); - // ImGui::RadioButton("XZ", &m_view, 2); - // ImGui::SameLine(); - // ImGui::RadioButton("XYZ", &m_view, 3); - // ImGui::SameLine(); - // ImGui::RadioButton("2D", &m_view, 4); - - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, - ImVec2{ImGui::GetStyle().ItemSpacing.y, ImGui::GetStyle().ItemSpacing.y}); + // ========================================================= + ImGui::SeparatorText("Camera/view"); + // ========================================================= - const char *items[] = {"XY", "YZ", "XZ", "XYZ", "2D"}; - bool is_selected; + // ImGui::RadioButton("XY", &m_view, 0); + // ImGui::SameLine(); + // ImGui::RadioButton("YZ", &m_view, 1); + // ImGui::SameLine(); + // ImGui::RadioButton("XZ", &m_view, 2); + // ImGui::SameLine(); + // ImGui::RadioButton("XYZ", &m_view, 3); + // ImGui::SameLine(); + // ImGui::RadioButton("2D", &m_view, 4); - for (int i = 0; i < IM_ARRAYSIZE(items); ++i) - { - if (i > CAMERA_XY) - ImGui::SameLine(); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, + ImVec2{ImGui::GetStyle().ItemSpacing.y, ImGui::GetStyle().ItemSpacing.y}); - is_selected = m_view == i; - if (is_selected) - ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); + const char *items[] = {"XY", "YZ", "XZ", "XYZ", "2D"}; + bool is_selected; - if (ImGui::Button(items[i], float2{40.f, 0.f})) - { - set_view((CameraType)i); - } - ImGui::SetItemTooltip("Key: %d", (i + 1) % IM_ARRAYSIZE(items)); - ImGui::PopStyleColor(is_selected); - } + for (int i = 0; i < IM_ARRAYSIZE(items); ++i) + { + if (i > CAMERA_XY) + ImGui::SameLine(); - ImGui::PopStyleVar(); + is_selected = m_view == i; + if (is_selected) + ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); - if (accept_keys) + if (ImGui::Button(items[i], float2{40.f, 0.f})) { - if (ImGui::IsKeyPressed(ImGuiKey_1)) - set_view(CAMERA_XY); - else if (ImGui::IsKeyPressed(ImGuiKey_2)) - set_view(CAMERA_YZ); - else if (ImGui::IsKeyPressed(ImGuiKey_3)) - set_view(CAMERA_XZ); - else if (ImGui::IsKeyPressed(ImGuiKey_4)) - set_view(CAMERA_CURRENT); - else if (ImGui::IsKeyPressed(ImGuiKey_0)) - set_view(CAMERA_2D); + set_view((CameraType)i); } + ImGui::SetItemTooltip("Key: %d", (i + 1) % IM_ARRAYSIZE(items)); + ImGui::PopStyleColor(is_selected); + } - // ========================================================= - ImGui::SeparatorText("Display options"); - // ========================================================= + ImGui::PopStyleVar(); - bool pushed = m_scale_radius_with_points; - if (pushed) - ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); + if (accept_keys) + { + if (ImGui::IsKeyPressed(ImGuiKey_1)) + set_view(CAMERA_XY); + else if (ImGui::IsKeyPressed(ImGuiKey_2)) + set_view(CAMERA_YZ); + else if (ImGui::IsKeyPressed(ImGuiKey_3)) + set_view(CAMERA_XZ); + else if (ImGui::IsKeyPressed(ImGuiKey_4)) + set_view(CAMERA_CURRENT); + else if (ImGui::IsKeyPressed(ImGuiKey_0)) + set_view(CAMERA_2D); + } - ImGui::SliderFloat("Radius", &m_radius, 0.f, 1.f, ""); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_COMPRESS)) - m_scale_radius_with_points = !m_scale_radius_with_points; - ImGui::SetItemTooltip("Scale radius with number of points"); - if (pushed) - ImGui::PopStyleColor(); - - ImGui::Checkbox("1D projections", &m_show_1d_projections); - ImGui::SetItemTooltip("Key: p"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_P)) - m_show_1d_projections = !m_show_1d_projections; - - ImGui::Checkbox("Point indices", &m_show_point_nums); - ImGui::Checkbox("Point coords", &m_show_point_coords); - - ImGui::Checkbox("Coarse grid", &m_show_coarse_grid); - ImGui::SetItemTooltip("Key: g"); - ImGui::Checkbox("Fine grid", &m_show_fine_grid); - ImGui::SetItemTooltip("Key: G"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_G)) - { - if (ImGui::IsKeyDown(ImGuiMod_Shift)) - m_show_fine_grid = !m_show_fine_grid; - else - m_show_coarse_grid = !m_show_coarse_grid; - update_GPU_grids(); - } + // ========================================================= + ImGui::SeparatorText("Display options"); + // ========================================================= + + bool pushed = m_scale_radius_with_points; + if (pushed) + ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); + + ImGui::SliderFloat("Radius", &m_radius, 0.f, 1.f, ""); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_COMPRESS)) + m_scale_radius_with_points = !m_scale_radius_with_points; + ImGui::SetItemTooltip("Scale radius with number of points"); + if (pushed) + ImGui::PopStyleColor(); + + ImGui::Checkbox("1D projections", &m_show_1d_projections); + ImGui::SetItemTooltip("Key: p"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_P)) + m_show_1d_projections = !m_show_1d_projections; + + ImGui::Checkbox("Point indices", &m_show_point_nums); + ImGui::Checkbox("Point coords", &m_show_point_coords); + + ImGui::Checkbox("Coarse grid", &m_show_coarse_grid); + ImGui::SetItemTooltip("Key: g"); + ImGui::Checkbox("Fine grid", &m_show_fine_grid); + ImGui::SetItemTooltip("Key: G"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_G)) + { + if (ImGui::IsKeyDown(ImGuiMod_Shift)) + m_show_fine_grid = !m_show_fine_grid; + else + m_show_coarse_grid = !m_show_coarse_grid; + update_GPU_grids(); + } - ImGui::Checkbox("Bounding box", &m_show_bbox); - ImGui::SetItemTooltip("Key: b"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_B)) - { - m_show_bbox = !m_show_bbox; - update_GPU_grids(); - } + ImGui::Checkbox("Bounding box", &m_show_bbox); + ImGui::SetItemTooltip("Key: b"); + if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_B)) + { + m_show_bbox = !m_show_bbox; + update_GPU_grids(); + } - // ========================================================= - ImGui::SeparatorText("Dimension mapping"); - // ========================================================= + // ========================================================= + ImGui::SeparatorText("Dimension mapping"); + // ========================================================= - if (ImGui::SliderInt3("XYZ", &m_dimension[0], 0, m_num_dimensions - 1, "%d", ImGuiSliderFlags_AlwaysClamp)) - update_GPU_points(false); + if (ImGui::SliderInt3("XYZ", &m_dimension[0], 0, m_num_dimensions - 1, "%d", ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); - // ========================================================= - ImGui::SeparatorText("Visible subset"); - // ========================================================= + // ========================================================= + ImGui::SeparatorText("Visible subset"); + // ========================================================= - if (ImGui::Checkbox("Subset by point index", &m_subset_by_index)) - update_GPU_points(false); - if (m_subset_by_index) - { - m_subset_by_coord = false; - ImGui::SliderInt("First point", &m_first_draw_point, 0, m_point_count - 1, "%d", - ImGuiSliderFlags_AlwaysClamp); - ImGui::SliderInt("Num subset points", &m_point_draw_count, 0, m_point_count - m_first_draw_point, "%d", - ImGuiSliderFlags_AlwaysClamp); - } + if (ImGui::Checkbox("Subset by point index", &m_subset_by_index)) + update_GPU_points(false); + if (m_subset_by_index) + { + m_subset_by_coord = false; + ImGui::SliderInt("First point", &m_first_draw_point, 0, m_point_count - 1, "%d", ImGuiSliderFlags_AlwaysClamp); + ImGui::SliderInt("Num subset points", &m_point_draw_count, 0, m_point_count - m_first_draw_point, "%d", + ImGuiSliderFlags_AlwaysClamp); + } - if (ImGui::Checkbox("Subset by coordinates", &m_subset_by_coord)) + if (ImGui::Checkbox("Subset by coordinates", &m_subset_by_coord)) + update_GPU_points(false); + if (m_subset_by_coord) + { + m_subset_by_index = false; + if (ImGui::SliderInt("Subset axis", &m_subset_axis, 0, m_num_dimensions - 1, "%d", + ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); + if (ImGui::SliderInt("Num levels", &m_num_subset_levels, 1, m_point_count, "%d", ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); + if (ImGui::SliderInt("Level", &m_subset_level, 0, m_num_subset_levels - 1, "%d", ImGuiSliderFlags_AlwaysClamp)) update_GPU_points(false); - if (m_subset_by_coord) - { - m_subset_by_index = false; - if (ImGui::SliderInt("Subset axis", &m_subset_axis, 0, m_num_dimensions - 1, "%d", - ImGuiSliderFlags_AlwaysClamp)) - update_GPU_points(false); - if (ImGui::SliderInt("Num levels", &m_num_subset_levels, 1, m_point_count, "%d", - ImGuiSliderFlags_AlwaysClamp)) - update_GPU_points(false); - if (ImGui::SliderInt("Level", &m_subset_level, 0, m_num_subset_levels - 1, "%d", - ImGuiSliderFlags_AlwaysClamp)) - update_GPU_points(false); - } } - ImGui::End(); } void SampleViewer::initialize_GL() diff --git a/gui/SampleViewer.h b/gui/SampleViewer.h index e8daca2..8344f3f 100644 --- a/gui/SampleViewer.h +++ b/gui/SampleViewer.h @@ -164,7 +164,7 @@ class SampleViewer : public GUIApp bool m_randomize = false; float m_jitter = 80.f; float m_radius = 0.5f; - bool m_scale_radius_with_points = false; + bool m_scale_radius_with_points = true; bool m_show_1d_projections = false, m_show_point_nums = false, m_show_point_coords = false, m_show_coarse_grid = false, m_show_fine_grid = false, m_show_bbox = false; diff --git a/macos/Info.plist b/macos/Info.plist new file mode 100644 index 0000000..82a5d22 --- /dev/null +++ b/macos/Info.plist @@ -0,0 +1,29 @@ + + + + + CFBundleIdentifier + ${HELLO_IMGUI_BUNDLE_IDENTIFIER} + + CFBundleName + ${HELLO_IMGUI_BUNDLE_NAME} + + CFBundleDisplayName + ${HELLO_IMGUI_ICON_DISPLAY_NAME} + + CFBundleExecutable + ${HELLO_IMGUI_BUNDLE_EXECUTABLE} + + CFBundleShortVersionString + ${HELLO_IMGUI_BUNDLE_SHORT_VERSION} + + CFBundleVersion + ${HELLO_IMGUI_BUNDLE_VERSION} + + NSHumanReadableCopyright + ${HELLO_IMGUI_BUNDLE_COPYRIGHT} + + CFBundleIconFile + ${HELLO_IMGUI_BUNDLE_ICON_FILE} + + diff --git a/macos/icon.icns b/macos/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..fd6b5536fb8bc6a7b5fa1dbe50ac02b978b7dedf GIT binary patch literal 680697 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

lTX3PwISq%9LYZt%nVHX7dTaE$p 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 z

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

-0BudqR*rbBt{K~ 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%0A? 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 - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${MACOSX_BUNDLE_EXECUTABLE_NAME} - CFBundleGetInfoString - ${MACOSX_BUNDLE_INFO_STRING} - CFBundleIconFile - ${MACOSX_BUNDLE_ICON_FILE} - CFBundleIdentifier - ${MACOSX_BUNDLE_GUI_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleLongVersionString - ${MACOSX_BUNDLE_LONG_VERSION_STRING} - CFBundleName - ${MACOSX_BUNDLE_BUNDLE_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - ${MACOSX_BUNDLE_SHORT_VERSION_STRING} - CFBundleSignature - ???? - CFBundleVersion - ${MACOSX_BUNDLE_BUNDLE_VERSION} - NSHumanReadableCopyright - ${MACOSX_BUNDLE_COPYRIGHT} - NSHighResolutionCapable - True - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - EXR - exr - - CFBundleTypeIconFile - Document-EXR - CFBundleTypeMIMETypes - - image/exr - - CFBundleTypeOSTypes - - exr - EXR - - CFBundleTypeRole - Viewer - LSItemContentTypes - - com.ilm.openexr-image - - - - CFBundleTypeExtensions - - bmp - BMP - - CFBundleTypeIconFile - Document-BMP - CFBundleTypeMIMETypes - - image/bmp - image/x-bmp - image/x-windows-bmp - image/ms-bmp - image/x-ms-bmp - application/bmp - - CFBundleTypeOSTypes - - BMP - BMPf - - CFBundleTypeRole - Viewer - LSItemContentTypes - - com.microsoft.bmp - - - - CFBundleTypeExtensions - - gif - GIF - - CFBundleTypeIconFile - Document-GIF - CFBundleTypeMIMETypes - - image/gif - - CFBundleTypeOSTypes - - GIFf - - CFBundleTypeRole - Viewer - LSItemContentTypes - - com.compuserve.gif - - - - CFBundleTypeExtensions - - jpg - JPG - jpeg - JPEG - jpe - JPE - thm - THM - - CFBundleTypeIconFile - Document-JPG - CFBundleTypeMIMETypes - - image/jpeg - image/jpg - image/pjpeg - - CFBundleTypeOSTypes - - JPEG - ???? - - CFBundleTypeRole - Viewer - LSItemContentTypes - - public.jpeg - - - - CFBundleTypeExtensions - - pic - PIC - hdr - HDR - - CFBundleTypeIconFile - Document-PIC - CFBundleTypeRole - Viewer - LSItemContentTypes - - public.radiance - - - - CFBundleTypeExtensions - - pfm - PFM - pnm - PNM - - CFBundleTypeIconFile - Document-PFM - CFBundleTypeRole - Viewer - LSItemContentTypes - - public.pfm - - - - CFBundleTypeExtensions - - png - PNG - - CFBundleTypeIconFile - Document-PNG - CFBundleTypeMIMETypes - - image/png - application/png - application/x-png - - CFBundleTypeOSTypes - - PNGf - - CFBundleTypeRole - Viewer - LSItemContentTypes - - public.png - - - - CFBundleTypeExtensions - - tga - TGA - - CFBundleTypeIconFile - Document-TGA - CFBundleTypeOSTypes - - TPIC - - CFBundleTypeRole - Viewer - LSItemContentTypes - - com.truevision.tga-image - - - - CFBundleTypeExtensions - - psd - PSD - - CFBundleTypeIconFile - Document-PSD - CFBundleTypeMIMETypes - - image/photoshop - image/x-photoshop - image/psd - application/photoshop - application/psd - - CFBundleTypeOSTypes - - 8BPS - - CFBundleTypeRole - Viewer - LSItemContentTypes - - com.adobe.photoshop-image - - - - NSSupportsAutomaticGraphicsSwitching - - - From bf7063f99afc8e481ac590d5276298ea4e259e18 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Tue, 28 Nov 2023 13:38:19 +0100 Subject: [PATCH 08/27] trying to fix CI --- .github/workflows/ci-linux.yml | 4 ++-- .github/workflows/ci-mac.yml | 6 +++--- .github/workflows/ci-windows.yml | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml index c3395bb..4a9ba52 100644 --- a/.github/workflows/ci-linux.yml +++ b/.github/workflows/ci-linux.yml @@ -59,9 +59,9 @@ jobs: - name: Build run: cmake --build ${{github.workspace}}/build/${{ matrix.buildtype }} --parallel 4 --config ${{ matrix.buildtype }} - - name: Checking that SamplinSafari runs + - name: Checking that Samplin Safari runs run: | - ${{github.workspace}}/build/${{ matrix.buildtype }}/SamplinSafari --help + ${{github.workspace}}/build/${{ matrix.buildtype }}/Samplin\ Safari --help - name: Archive build artifacts uses: actions/upload-artifact@v3 diff --git a/.github/workflows/ci-mac.yml b/.github/workflows/ci-mac.yml index 3771ded..5ded126 100644 --- a/.github/workflows/ci-mac.yml +++ b/.github/workflows/ci-mac.yml @@ -81,17 +81,17 @@ jobs: - name: Build run: cmake --build ${{github.workspace}}/build --parallel 4 --config ${{ matrix.buildtype }} - - name: Checking that SamplinSafari runs + - name: Checking that Samplin Safari runs if: runner.os != 'Windows' run: | - ${{github.workspace}}/build/${{ runner.os == 'macOS' && 'SamplinSafari.app/Contents/MacOS/SamplinSafari' || 'SamplinSafari' }} --help + ${{github.workspace}}/build/${{ runner.os == 'macOS' && 'Samplin\ Safari.app/Contents/MacOS/Samplin\ Safari' || 'Samplin\ Safari' }} --help - name: Creating dmg (macOS) if: runner.os == 'macOS' run: | RESULT="${{github.workspace}}/build/SamplinSafari${{ matrix.config.suffix }}.dmg" test -f $RESULT && rm $RESULT - create-dmg --window-size 500 300 --icon-size 96 --volname "SamplinSafari Installer" --app-drop-link 360 105 --icon SamplinSafari.app 130 105 $RESULT ${{github.workspace}}/build/SamplinSafari.app + create-dmg --window-size 500 300 --icon-size 96 --volname "Samplin Safari Installer" --app-drop-link 360 105 --icon Samplin\ Safari.app 130 105 $RESULT ${{github.workspace}}/build/Samplin\ Safari.app - name: Archive dmg (macOS) if: runner.os == 'macOS' diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index ff74c61..3d2ac8a 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -49,13 +49,13 @@ jobs: - name: Build run: cmake --build ${{github.workspace}}/build --parallel --config ${{ matrix.buildtype }} --verbose - - name: Checking that SamplinSafari runs + - name: Checking that Samplin Safari runs run: | - ${{github.workspace}}/build/${{ matrix.buildtype }}/SamplinSafari.exe --help + "${{github.workspace}}/build/${{ matrix.buildtype }}/Samplin Safari.exe" --help - name: Archive build artifacts uses: actions/upload-artifact@v3 with: - name: SamplinSafari + name: Samplin Safari path: | - ${{github.workspace}}/build/${{ matrix.buildtype }}/SamplinSafari.exe + "${{github.workspace}}/build/${{ matrix.buildtype }}/Samplin Safari.exe" From bbec65d80479770aae69f96c8020563d877eaf5f Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Tue, 28 Nov 2023 13:46:06 +0100 Subject: [PATCH 09/27] Update ci-windows.yml --- .github/workflows/ci-windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index 3d2ac8a..6d14f7d 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -51,7 +51,7 @@ jobs: - name: Checking that Samplin Safari runs run: | - "${{github.workspace}}/build/${{ matrix.buildtype }}/Samplin Safari.exe" --help + "${{github.workspace}}/build/${{ matrix.buildtype }}/Samplin Safari.exe --help" - name: Archive build artifacts uses: actions/upload-artifact@v3 From b12a59e20078e833aa1e3862c8b582288eab4db3 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Thu, 30 Nov 2023 00:11:42 +0100 Subject: [PATCH 10/27] gui improvements --- gui/SampleViewer.cpp | 625 ++++++++++++++++++++++++------------------- gui/SampleViewer.h | 10 +- gui/gui_app.cpp | 3 +- gui/shader.h | 1 + 4 files changed, 359 insertions(+), 280 deletions(-) diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index 188149e..9606de5 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -50,6 +50,24 @@ using std::to_string; #include "GLFW/glfw3.h" +namespace ImGui +{ + +bool ToggleButton(const char *label, bool *active) +{ + ImGui::PushStyleColor(ImGuiCol_Button, *active ? GetColorU32(ImGuiCol_ButtonActive) : GetColorU32(ImGuiCol_Button)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, GetColorU32(ImGuiCol_FrameBgHovered)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, GetColorU32(ImGuiCol_FrameBgActive)); + + bool ret; + if ((ret = ImGui::Button(label))) + *active = !*active; + ImGui::PopStyleColor(3); + return ret; +} + +} // namespace ImGui + // clang-format off #ifdef __EMSCRIPTEN__ #define VERT_SHADER_HEADER "#version 100\n#define in attribute\n#define out varying\nprecision mediump float;\n" @@ -133,8 +151,6 @@ static void layout_2d_matrix(float4x4 &position, int numDims, int dim_x, int dim SampleViewer::SampleViewer() : GUIApp() { - m_time_strings.resize(3); - m_samplers.resize(NUM_POINT_TYPES, nullptr); m_samplers[RANDOM] = new Random(m_num_dimensions); m_samplers[JITTERED] = new Jittered(1, 1, m_jitter * 0.01f); @@ -196,10 +212,10 @@ SampleViewer::SampleViewer() : GUIApp() // Dockable windows // the parameter editor HelloImGui::DockableWindow editorWindow; - editorWindow.label = "Sample parameters"; + editorWindow.label = "Settings"; editorWindow.dockSpaceName = "EditorSpace"; - editorWindow.canBeClosed = false; - editorWindow.GuiFunction = [this] { draw_editor(); }; + // editorWindow.canBeClosed = false; + editorWindow.GuiFunction = [this] { draw_editor(); }; // A console window named "Console" will be placed in "ConsoleSpace". It uses the HelloImGui logger gui HelloImGui::DockableWindow consoleWindow; @@ -209,34 +225,36 @@ SampleViewer::SampleViewer() : GUIApp() consoleWindow.rememberIsVisible = true; consoleWindow.GuiFunction = [] { HelloImGui::LogGui(); }; - m_params.dockingParams.dockableWindows = {editorWindow, consoleWindow}; - - // Docking Splits + // docking layouts { - HelloImGui::DockingSplit splitEditorMain; - splitEditorMain.initialDock = "MainDockSpace"; - splitEditorMain.newDock = "EditorSpace"; - splitEditorMain.direction = ImGuiDir_Left; - splitEditorMain.ratio = 0.2f; - - HelloImGui::DockingSplit splitMainConsole; - splitMainConsole.initialDock = "MainDockSpace"; - splitMainConsole.newDock = "ConsoleSpace"; - splitMainConsole.direction = ImGuiDir_Down; - splitMainConsole.ratio = 0.25f; + m_params.dockingParams.layoutName = "Settings on left"; + m_params.dockingParams.dockableWindows = {editorWindow, consoleWindow}; + + HelloImGui::DockingSplit splitEditorMain{"MainDockSpace", "EditorSpace", ImGuiDir_Left, 0.2f}; + + HelloImGui::DockingSplit splitMainConsole{"MainDockSpace", "ConsoleSpace", ImGuiDir_Down, 0.25f}; m_params.dockingParams.dockingSplits = {splitEditorMain, splitMainConsole}; + + HelloImGui::DockingParams alternativeLayout; + alternativeLayout.layoutName = "Settings on right"; + alternativeLayout.dockableWindows = {editorWindow, consoleWindow}; + splitEditorMain.direction = ImGuiDir_Right; + alternativeLayout.dockingSplits = {splitEditorMain, splitMainConsole}; + m_params.alternativeDockingLayouts = {alternativeLayout}; } - m_params.callbacks.LoadAdditionalFonts = []() + m_params.callbacks.LoadAdditionalFonts = [this]() { - std::string fontFilename = "fonts/Roboto/Roboto-Regular.ttf"; - // std::string fontFilename = "fonts/DroidSans.ttf"; - if (HelloImGui::AssetExists(fontFilename)) + std::string roboto_r = "fonts/Roboto/Roboto-Regular.ttf"; + std::string roboto_b = "fonts/Roboto/Roboto-Bold.ttf"; + if (!HelloImGui::AssetExists(roboto_r) || !HelloImGui::AssetExists(roboto_b)) + return; + + for (auto font_size : {14.f, 8.f, 9.f, 10.f, 11.f, 12.f, 13.f, 15.f, 16.f, 17.f, 18.f}) { - float fontSize = 14.f; - ImFont *font = HelloImGui::LoadFontTTF_WithFontAwesomeIcons(fontFilename, fontSize, false); - (void)font; + m_regular[(int)font_size] = HelloImGui::LoadFontTTF_WithFontAwesomeIcons(roboto_r, font_size); + m_bold[(int)font_size] = HelloImGui::LoadFontTTF_WithFontAwesomeIcons(roboto_b, font_size); } }; @@ -272,6 +290,17 @@ SampleViewer::SampleViewer() : GUIApp() } }; + m_params.callbacks.ShowStatus = [this]() + { + ImGui::SetCursorPosY(ImGui::GetCursorPosY() - ImGui::GetFontSize() * 0.15f); + ImGui::Text("Reset + randomize: %3.3f ms | Sampling: %3.3f ms | Total: %3.3f ms (%3.0f pps)", m_time1, + m_time2, m_time1 + m_time2, m_point_count / (m_time1 + m_time2)); + // ImGui::SameLine(); + ImGui::SameLine(ImGui::GetIO().DisplaySize.x - 16.f * ImGui::GetFontSize()); + ImGui::SetCursorPosY(ImGui::GetCursorPosY() - ImGui::GetFontSize() * 0.15f); + ImGui::ToggleButton(ICON_FA_TERMINAL, &m_params.dockingParams.dockableWindows[1].isVisible); + }; + m_params.callbacks.ShowGui = [this]() { draw_gui(); }; } @@ -289,7 +318,7 @@ int2 SampleViewer::get_draw_range() const else if (m_subset_by_index) { start = m_first_draw_point; - count = m_point_draw_count; + count = std::min(m_point_draw_count, m_point_count - m_first_draw_point); } return {start, count}; } @@ -328,22 +357,20 @@ void SampleViewer::draw_gui() float2 text_2d_pos((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); draw_text(m_viewport_pos + int2((text_2d_pos.x) * m_viewport_size.x, (1.f - text_2d_pos.y) * m_viewport_size.y + 16), - to_string(i), float4(1.0f, 1.0f, 1.0f, 0.75f), 16, 0, TextAlign_CENTER | TextAlign_BOTTOM); + to_string(i), float4(1.0f, 1.0f, 1.0f, 0.75f), m_regular[16], + TextAlign_CENTER | TextAlign_BOTTOM); layout_2d_matrix(pos, m_num_dimensions, 0, i + 1); text_pos = mul(mvp, mul(pos, float4{-0.5f, 0.f, 0.0f, 1.0f})); text_2d_pos = float2((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); draw_text(m_viewport_pos + int2((text_2d_pos.x) * m_viewport_size.x - 4, (1.f - text_2d_pos.y) * m_viewport_size.y), - to_string(i + 1), float4(1.0f, 1.0f, 1.0f, 0.75f), 16, 0, TextAlign_RIGHT | TextAlign_MIDDLE); + to_string(i + 1), float4(1.0f, 1.0f, 1.0f, 0.75f), m_regular[16], + TextAlign_RIGHT | TextAlign_MIDDLE); } } else { - for (int i = 0; i < 3; ++i) - draw_text(m_viewport_pos + m_viewport_size - int2(20, (2 - i) * 14 + 20), m_time_strings[i], - float4(1.0f, 1.0f, 1.0f, 0.75f), 16, 0); - int2 range = get_draw_range(); if (m_show_point_nums || m_show_point_coords) @@ -356,56 +383,286 @@ void SampleViewer::draw_gui() if (m_show_point_nums) draw_text(m_viewport_pos + int2((text_2d_pos.x) * m_viewport_size.x, (1.f - text_2d_pos.y) * m_viewport_size.y - radius / 4), - fmt::format("{:d}", p), float4(1.0f, 1.0f, 1.0f, 0.75f), 12, 0, + fmt::format("{:d}", p), float4(1.0f, 1.0f, 1.0f, 0.75f), m_regular[12], TextAlign_CENTER | TextAlign_BOTTOM); if (m_show_point_coords) draw_text(m_viewport_pos + int2((text_2d_pos.x) * m_viewport_size.x, (1.f - text_2d_pos.y) * m_viewport_size.y + radius / 4), fmt::format("({:0.2f}, {:0.2f}, {:0.2f})", point.x + 0.5, point.y + 0.5, point.z + 0.5), - float4(1.0f, 1.0f, 1.0f, 0.75f), 11, 0, TextAlign_CENTER | TextAlign_TOP); + float4(1.0f, 1.0f, 1.0f, 0.75f), m_regular[11], TextAlign_CENTER | TextAlign_TOP); } } + + process_hotkeys(); } void SampleViewer::draw_editor() { - bool accept_keys = !ImGui::GetIO().WantCaptureKeyboard; - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_Escape)) + auto big_header = [this](const char *label, ImGuiTreeNodeFlags flags = 0) { - m_params.appShallExit = true; - return; - } + ImGui::PushFont(m_bold[16.f]); + bool ret = ImGui::CollapsingHeader(label, flags | ImGuiTreeNodeFlags_DefaultOpen); + ImGui::PopFont(); + return ret; + }; + + auto tooltip = [](const char *text, float wrap_width = 400.f) + { + if (ImGui::BeginItemTooltip()) + { + ImGui::PushTextWrapPos(wrap_width); + ImGui::TextWrapped("%s", text); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + }; // ========================================================= - ImGui::SeparatorText("Point set"); + if (big_header(ICON_FA_SLIDERS_H " Sampler settings")) // ========================================================= - - if (ImGui::BeginCombo("##", m_samplers[m_sampler]->name().c_str())) { - for (int n = 0; n < NUM_POINT_TYPES; n++) + if (ImGui::BeginCombo("##", m_samplers[m_sampler]->name().c_str())) + { + for (int n = 0; n < NUM_POINT_TYPES; n++) + { + Sampler *sampler = m_samplers[n]; + const bool is_selected = (m_sampler == n); + if (ImGui::Selectable(sampler->name().c_str(), is_selected)) + { + m_sampler = n; + sampler->setJitter(m_jitter * 0.01f); + sampler->setRandomized(m_randomize); + update_GPU_points(); + update_GPU_grids(); + HelloImGui::Log(HelloImGui::LogLevel::Debug, "Switching to sampler %d: %s.", m_sampler, + sampler->name().c_str()); + } + + // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) + if (is_selected) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + tooltip("Set the sampler used to generate the points (Key: Up/Down)"); + + if (ImGui::SliderInt("Num points", &m_target_point_count, 1, 1 << 17, "%d", + ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_AlwaysClamp)) + { + HelloImGui::Log(HelloImGui::LogLevel::Debug, "Setting target point count to %d.", m_target_point_count); + update_GPU_points(); + update_GPU_grids(); + HelloImGui::Log(HelloImGui::LogLevel::Debug, "Regenerated %d points.", m_point_count); + } + // now that the user has finished editing, sync the GUI value + if (ImGui::IsItemDeactivatedAfterEdit()) + m_target_point_count = m_point_count; + + tooltip( + "Set the target number of points to generate. For samplers that only support certain numbers of points " + "(e.g. powers of 2) this target value will be snapped to the nearest admissable value (Key: Left/Right)."); + + if (ImGui::SliderInt("Dimensions", &m_num_dimensions, 2, 10, "%d", ImGuiSliderFlags_AlwaysClamp)) + { + update_GPU_points(); + update_GPU_grids(); + } + tooltip("The number of dimensions to generate for each point (Key: D/d)."); + + if (ImGui::Checkbox("Randomize", &m_randomize)) + update_GPU_points(); + tooltip("Whether to randomize the points, or show the deterministic configuration (Key: r/R)."); + + if (ImGui::SliderFloat("Jitter", &m_jitter, 0.f, 100.f, "%3.1f%%")) { - Sampler *sampler = m_samplers[n]; - const bool is_selected = (m_sampler == n); - if (ImGui::Selectable(sampler->name().c_str(), is_selected)) + m_samplers[m_sampler]->setJitter(m_jitter * 0.01f); + update_GPU_points(); + update_GPU_grids(); + } + tooltip("How much the points should be jittered within their strata (Key: j/J)."); + + // add optional widgets for OA samplers + if (OrthogonalArray *oa = dynamic_cast(m_samplers[m_sampler])) + { + // Controls for the strengths of the OA + auto change_strength = [oa, this](int strength) + { + if ((unsigned)strength != oa->strength()) + { + oa->setStrength(strength); + update_GPU_points(); + update_GPU_grids(); + } + }; + int strength = oa->strength(); + if (ImGui::InputInt("Strength", &strength, 1)) + change_strength(std::max(2, strength)); + ImGui::SetItemTooltip("Key: T/t"); + + // Controls for the offset type of the OA + auto offset_names = oa->offsetTypeNames(); + auto change_offset_type = [oa, this](int offset) { - m_sampler = n; - sampler->setJitter(m_jitter * 0.01f); - sampler->setRandomized(m_randomize); + oa->setOffsetType(offset); + m_jitter = oa->jitter(); update_GPU_points(); update_GPU_grids(); - HelloImGui::Log(HelloImGui::LogLevel::Debug, "Switching to sampler %d: %s.", m_sampler, - sampler->name().c_str()); + }; + if (ImGui::BeginCombo("Offset type", offset_names[oa->offsetType()].c_str())) + { + for (unsigned n = 0; n < offset_names.size(); n++) + { + const bool is_selected = (oa->offsetType() == n); + if (ImGui::Selectable(offset_names[n].c_str(), is_selected)) + change_offset_type(n); + + // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) + if (is_selected) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); } + tooltip("Choose the type of offset witin each stratum (Key: Shift+Up/Down)."); + } + ImGui::Dummy({0, HelloImGui::EmSize(0.25f)}); + } + // ========================================================= + if (big_header(ICON_FA_CAMERA " Camera/view")) + // ========================================================= + { + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, + ImVec2{ImGui::GetStyle().ItemSpacing.y, ImGui::GetStyle().ItemSpacing.y}); + const char *items[] = {"XY", "YZ", "XZ", "XYZ", "2D"}; + bool is_selected; + for (int i = 0; i < IM_ARRAYSIZE(items); ++i) + { + if (i > CAMERA_XY) + ImGui::SameLine(); - // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) + is_selected = m_view == i; if (is_selected) - ImGui::SetItemDefaultFocus(); + ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); + + if (ImGui::Button(items[i], float2{40.f, 0.f})) + { + set_view((CameraType)i); + } + tooltip(fmt::format("(Key: {:d}).", (i + 1) % IM_ARRAYSIZE(items)).c_str()); + ImGui::PopStyleColor(is_selected); } - ImGui::EndCombo(); + ImGui::PopStyleVar(); + ImGui::Dummy({0, HelloImGui::EmSize(0.25f)}); } - ImGui::SetItemTooltip("Key: Up/Down"); - if (accept_keys && !ImGui::IsKeyDown(ImGuiMod_Shift) && - (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) + + // ========================================================= + if (big_header(ICON_FA_EYE " Display/visibility")) + // ========================================================= + { + ImGui::ColorEdit3("Color", (float *)&m_point_color); + ImGui::SliderFloat("Radius", &m_radius, 0.f, 1.f, ""); + ImGui::SameLine(); + { + ImGui::ToggleButton(ICON_FA_COMPRESS, &m_scale_radius_with_points); + ImGui::SetItemTooltip("Scale radius with number of points"); + } + + ImGui::Checkbox("1D projections", &m_show_1d_projections); + tooltip("Also show the X-, Y-, and Z-axis projections of the 3D points (Key: p)?"); + ImGui::Checkbox("Point indices", &m_show_point_nums); + tooltip("Show the index above each point?"); + ImGui::Checkbox("Point coords", &m_show_point_coords); + tooltip("Show the XYZ coordinates below each point?"); + ImGui::Checkbox("Coarse grid", &m_show_coarse_grid); + tooltip("Show a coarse grid (Key: g)?"); + ImGui::Checkbox("Fine grid", &m_show_fine_grid); + tooltip("Show a fine grid (Key: G)?"); + ImGui::Checkbox("Bounding box", &m_show_bbox); + tooltip("Show the XY, YZ, and XZ bounding boxes (Key: b)?"); + + ImGui::Dummy({0, HelloImGui::EmSize(0.25f)}); + } + + // ========================================================= + if (big_header(ICON_FA_RANDOM " Dimension mapping")) + // ========================================================= + { + if (ImGui::SliderInt3("XYZ", &m_dimension[0], 0, m_num_dimensions - 1, "%d", ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); + tooltip("Set which dimensions should be used for the XYZ dimensions of the displayed 3D points."); + + ImGui::Dummy({0, HelloImGui::EmSize(0.25f)}); + } + + // ========================================================= + if (big_header(ICON_FA_FILTER " Filter points")) + // ========================================================= + { + if (ImGui::Checkbox("Filter by point index", &m_subset_by_index)) + update_GPU_points(false); + tooltip("Choose which points to show based on each point's index."); + + if (m_subset_by_index) + { + m_subset_by_coord = false; + ImGui::SliderInt("First point", &m_first_draw_point, 0, m_point_count - 1, "%d", + ImGuiSliderFlags_AlwaysClamp); + tooltip("Display points starting at this index."); + + ImGui::SliderInt("Num points##2", &m_point_draw_count, 1, m_point_count - m_first_draw_point, "%d", + ImGuiSliderFlags_AlwaysClamp); + tooltip("Display this many points from the first index."); + } + + if (ImGui::Checkbox("Filter by coordinates", &m_subset_by_coord)) + update_GPU_points(false); + tooltip("Show only points that fall within an interval along one of its dimensions."); + if (m_subset_by_coord) + { + m_subset_by_index = false; + if (ImGui::SliderInt("Axis", &m_subset_axis, 0, m_num_dimensions - 1, "%d", ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); + tooltip("Filter points based on this axis."); + + if (ImGui::SliderInt("Num levels", &m_num_subset_levels, 1, m_point_count, "%d", + ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); + tooltip("Split the unit interval along the chosen axis into this many consecutive levels (or bins)."); + + if (ImGui::SliderInt("Level", &m_subset_level, 0, m_num_subset_levels - 1, "%d", + ImGuiSliderFlags_AlwaysClamp)) + update_GPU_points(false); + tooltip("Show only points within this bin along the filtered axis."); + } + + ImGui::Dummy({0, HelloImGui::EmSize(0.25f)}); + } +} + +void SampleViewer::process_hotkeys() +{ + if (ImGui::GetIO().WantCaptureKeyboard) + return; + + OrthogonalArray *oa = dynamic_cast(m_samplers[m_sampler]); + auto change_strength = [oa, this](int strength) + { + if ((unsigned)strength != oa->strength()) + { + oa->setStrength(strength); + update_GPU_points(); + update_GPU_grids(); + } + }; + auto change_offset_type = [oa, this](int offset) + { + oa->setOffsetType(offset); + m_jitter = oa->jitter(); + update_GPU_points(); + update_GPU_grids(); + }; + + if ((ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow)) && + !ImGui::IsKeyDown(ImGuiMod_Shift)) { int delta = ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1; m_sampler = mod(m_sampler + delta, (int)NUM_POINT_TYPES); @@ -415,20 +672,7 @@ void SampleViewer::draw_editor() update_GPU_points(); update_GPU_grids(); } - - if (ImGui::SliderInt("Num points", &m_target_point_count, 1, 1 << 17, "%d", - ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_AlwaysClamp)) - { - HelloImGui::Log(HelloImGui::LogLevel::Debug, "Setting target point count to %d.", m_target_point_count); - update_GPU_points(); - update_GPU_grids(); - HelloImGui::Log(HelloImGui::LogLevel::Debug, "Regenerated %d points.", m_point_count); - } - // now that the user has finished editing, sync the GUI value - if (ImGui::IsItemDeactivatedAfterEdit()) - m_target_point_count = m_point_count; - ImGui::SetItemTooltip("Key: Left/Right"); - if (accept_keys && (ImGui::IsKeyPressed(ImGuiKey_LeftArrow) || ImGui::IsKeyPressed(ImGuiKey_RightArrow))) + else if (ImGui::IsKeyPressed(ImGuiKey_LeftArrow) || ImGui::IsKeyPressed(ImGuiKey_RightArrow)) { m_target_point_count = std::max(1u, ImGui::IsKeyPressed(ImGuiKey_RightArrow) ? roundUpPow2(m_target_point_count + 1) @@ -436,24 +680,13 @@ void SampleViewer::draw_editor() update_GPU_points(); update_GPU_grids(); } - - if (ImGui::SliderInt("Dimensions", &m_num_dimensions, 2, 10, "%d", ImGuiSliderFlags_AlwaysClamp)) - { - update_GPU_points(); - update_GPU_grids(); - } - ImGui::SetItemTooltip("Key: D/d"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_D)) + else if (ImGui::IsKeyPressed(ImGuiKey_D)) { m_num_dimensions = std::clamp(m_num_dimensions + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1), 2, 10); update_GPU_points(); update_GPU_grids(); } - - if (ImGui::Checkbox("Randomize", &m_randomize)) - update_GPU_points(); - ImGui::SetItemTooltip("Key: R/r"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_R)) + else if (ImGui::IsKeyPressed(ImGuiKey_R)) { if (ImGui::IsKeyDown(ImGuiMod_Shift)) { @@ -464,146 +697,30 @@ void SampleViewer::draw_editor() m_randomize = !m_randomize; update_GPU_points(); } - - if (ImGui::SliderFloat("Jitter", &m_jitter, 0.f, 100.f, "%3.1f%%")) + else if (ImGui::IsKeyPressed(ImGuiKey_J)) { - m_samplers[m_sampler]->setJitter(m_jitter * 0.01f); + m_jitter = std::clamp(m_jitter + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 10.f : -10.f), 0.f, 100.f); update_GPU_points(); - update_GPU_grids(); } - - // add optional widgets for OA samplers - if (OrthogonalArray *oa = dynamic_cast(m_samplers[m_sampler])) - { - // Controls for the strengths of the OA - auto change_strength = [oa, this](int strength) - { - if ((unsigned)strength != oa->strength()) - { - oa->setStrength(strength); - update_GPU_points(); - update_GPU_grids(); - } - }; - int strength = oa->strength(); - if (ImGui::InputInt("Strength", &strength, 1)) - change_strength(std::max(2, strength)); - ImGui::SetItemTooltip("Key: T/t"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_T)) - change_strength(std::max(2, strength + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1))); - - // Controls for the offset type of the OA - auto offset_names = oa->offsetTypeNames(); - auto change_offset_type = [oa, this](int offset) - { - oa->setOffsetType(offset); - m_jitter = oa->jitter(); - update_GPU_points(); - update_GPU_grids(); - }; - if (ImGui::BeginCombo("Offset type", offset_names[oa->offsetType()].c_str())) - { - for (unsigned n = 0; n < offset_names.size(); n++) - { - const bool is_selected = (oa->offsetType() == n); - if (ImGui::Selectable(offset_names[n].c_str(), is_selected)) - change_offset_type(n); - - // Set the initial focus when opening the combo (scrolling + keyboard navigation focus) - if (is_selected) - ImGui::SetItemDefaultFocus(); - } - ImGui::EndCombo(); - } - ImGui::SetItemTooltip("Key: Shift+Up/Down"); - if (accept_keys && ImGui::IsKeyDown(ImGuiMod_Shift) && - (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) - change_offset_type( - mod((int)oa->offsetType() + (ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1), (int)NUM_OFFSET_TYPES)); - } - - // ========================================================= - ImGui::SeparatorText("Camera/view"); - // ========================================================= - - // ImGui::RadioButton("XY", &m_view, 0); - // ImGui::SameLine(); - // ImGui::RadioButton("YZ", &m_view, 1); - // ImGui::SameLine(); - // ImGui::RadioButton("XZ", &m_view, 2); - // ImGui::SameLine(); - // ImGui::RadioButton("XYZ", &m_view, 3); - // ImGui::SameLine(); - // ImGui::RadioButton("2D", &m_view, 4); - - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, - ImVec2{ImGui::GetStyle().ItemSpacing.y, ImGui::GetStyle().ItemSpacing.y}); - - const char *items[] = {"XY", "YZ", "XZ", "XYZ", "2D"}; - bool is_selected; - - for (int i = 0; i < IM_ARRAYSIZE(items); ++i) - { - if (i > CAMERA_XY) - ImGui::SameLine(); - - is_selected = m_view == i; - if (is_selected) - ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); - - if (ImGui::Button(items[i], float2{40.f, 0.f})) - { - set_view((CameraType)i); - } - ImGui::SetItemTooltip("Key: %d", (i + 1) % IM_ARRAYSIZE(items)); - ImGui::PopStyleColor(is_selected); - } - - ImGui::PopStyleVar(); - - if (accept_keys) - { - if (ImGui::IsKeyPressed(ImGuiKey_1)) - set_view(CAMERA_XY); - else if (ImGui::IsKeyPressed(ImGuiKey_2)) - set_view(CAMERA_YZ); - else if (ImGui::IsKeyPressed(ImGuiKey_3)) - set_view(CAMERA_XZ); - else if (ImGui::IsKeyPressed(ImGuiKey_4)) - set_view(CAMERA_CURRENT); - else if (ImGui::IsKeyPressed(ImGuiKey_0)) - set_view(CAMERA_2D); - } - - // ========================================================= - ImGui::SeparatorText("Display options"); - // ========================================================= - - bool pushed = m_scale_radius_with_points; - if (pushed) - ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); - - ImGui::SliderFloat("Radius", &m_radius, 0.f, 1.f, ""); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_COMPRESS)) - m_scale_radius_with_points = !m_scale_radius_with_points; - ImGui::SetItemTooltip("Scale radius with number of points"); - if (pushed) - ImGui::PopStyleColor(); - - ImGui::Checkbox("1D projections", &m_show_1d_projections); - ImGui::SetItemTooltip("Key: p"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_P)) + else if (oa && ImGui::IsKeyPressed(ImGuiKey_T)) + change_strength(std::max(2u, oa->strength() + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1))); + else if (oa && ImGui::IsKeyDown(ImGuiMod_Shift) && + (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) + change_offset_type( + mod((int)oa->offsetType() + (ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1), (int)NUM_OFFSET_TYPES)); + else if (ImGui::IsKeyPressed(ImGuiKey_1)) + set_view(CAMERA_XY); + else if (ImGui::IsKeyPressed(ImGuiKey_2)) + set_view(CAMERA_YZ); + else if (ImGui::IsKeyPressed(ImGuiKey_3)) + set_view(CAMERA_XZ); + else if (ImGui::IsKeyPressed(ImGuiKey_4)) + set_view(CAMERA_CURRENT); + else if (ImGui::IsKeyPressed(ImGuiKey_0)) + set_view(CAMERA_2D); + else if (ImGui::IsKeyPressed(ImGuiKey_P)) m_show_1d_projections = !m_show_1d_projections; - - ImGui::Checkbox("Point indices", &m_show_point_nums); - ImGui::Checkbox("Point coords", &m_show_point_coords); - - ImGui::Checkbox("Coarse grid", &m_show_coarse_grid); - ImGui::SetItemTooltip("Key: g"); - ImGui::Checkbox("Fine grid", &m_show_fine_grid); - ImGui::SetItemTooltip("Key: G"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_G)) + else if (ImGui::IsKeyPressed(ImGuiKey_G)) { if (ImGui::IsKeyDown(ImGuiMod_Shift)) m_show_fine_grid = !m_show_fine_grid; @@ -611,49 +728,11 @@ void SampleViewer::draw_editor() m_show_coarse_grid = !m_show_coarse_grid; update_GPU_grids(); } - - ImGui::Checkbox("Bounding box", &m_show_bbox); - ImGui::SetItemTooltip("Key: b"); - if (accept_keys && ImGui::IsKeyPressed(ImGuiKey_B)) + else if (ImGui::IsKeyPressed(ImGuiKey_B)) { m_show_bbox = !m_show_bbox; update_GPU_grids(); } - - // ========================================================= - ImGui::SeparatorText("Dimension mapping"); - // ========================================================= - - if (ImGui::SliderInt3("XYZ", &m_dimension[0], 0, m_num_dimensions - 1, "%d", ImGuiSliderFlags_AlwaysClamp)) - update_GPU_points(false); - - // ========================================================= - ImGui::SeparatorText("Visible subset"); - // ========================================================= - - if (ImGui::Checkbox("Subset by point index", &m_subset_by_index)) - update_GPU_points(false); - if (m_subset_by_index) - { - m_subset_by_coord = false; - ImGui::SliderInt("First point", &m_first_draw_point, 0, m_point_count - 1, "%d", ImGuiSliderFlags_AlwaysClamp); - ImGui::SliderInt("Num subset points", &m_point_draw_count, 0, m_point_count - m_first_draw_point, "%d", - ImGuiSliderFlags_AlwaysClamp); - } - - if (ImGui::Checkbox("Subset by coordinates", &m_subset_by_coord)) - update_GPU_points(false); - if (m_subset_by_coord) - { - m_subset_by_index = false; - if (ImGui::SliderInt("Subset axis", &m_subset_axis, 0, m_num_dimensions - 1, "%d", - ImGuiSliderFlags_AlwaysClamp)) - update_GPU_points(false); - if (ImGui::SliderInt("Num levels", &m_num_subset_levels, 1, m_point_count, "%d", ImGuiSliderFlags_AlwaysClamp)) - update_GPU_points(false); - if (ImGui::SliderInt("Level", &m_subset_level, 0, m_num_subset_levels - 1, "%d", ImGuiSliderFlags_AlwaysClamp)) - update_GPU_points(false); - } } void SampleViewer::initialize_GL() @@ -916,7 +995,7 @@ void SampleViewer::draw() else { // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); - draw_points(mvp, {0.9f, 0.55f, 0.1f}); + draw_points(mvp, m_point_color); if (m_show_1d_projections) { @@ -946,9 +1025,9 @@ void SampleViewer::draw() } } -void SampleViewer::draw_text(const int2 &pos, const string &text, const float4 &color, int font_size, int fixed_width, - int align) const +void SampleViewer::draw_text(const int2 &pos, const string &text, const float4 &color, ImFont *font, int align) const { + ImGui::PushFont(font); float2 apos{pos}; float2 size = ImGui::CalcTextSize(text.c_str()); @@ -967,6 +1046,7 @@ void SampleViewer::draw_text(const int2 &pos, const string &text, const float4 & apos.y -= size.y; ImGui::GetBackgroundDrawList()->AddText(apos, ImColor(color), text.c_str()); + ImGui::PopFont(); } void SampleViewer::draw_contents_EPS(ofstream &file, CameraType camera_type, int dim_x, int dim_y, int dim_z) @@ -1191,8 +1271,8 @@ void SampleViewer::generate_points() int num_pts = generator->setNumSamples(m_target_point_count); m_point_count = num_pts > 0 ? num_pts : m_target_point_count; - float time1 = (float)glfwGetTime(); - float time_diff1 = ((time1 - time0) * 1000.0f); + float time1 = (float)glfwGetTime(); + m_time1 = ((time1 - time0) * 1000.0f); m_points.resize(m_point_count, m_num_dimensions); m_3d_points.resize(m_point_count); @@ -1208,12 +1288,8 @@ void SampleViewer::generate_points() // HelloImGui::Log(HelloImGui::LogLevel::Debug, "%f", m_points(i, j)); } } - float time2 = (float)glfwGetTime(); - float time_diff2 = ((time2 - time1) * 1000.0f); - - m_time_strings[0] = fmt::format("Reset and m_randomize: {:3.3f} ms", time_diff1); - m_time_strings[1] = fmt::format("Sampling: {:3.3f} ms", time_diff2); - m_time_strings[2] = fmt::format("Total generation time: {:3.3f} ms", time_diff1 + time_diff2); + float time2 = (float)glfwGetTime(); + m_time2 = ((time2 - time1) * 1000.0f); } void SampleViewer::populate_point_subset() @@ -1225,15 +1301,10 @@ void SampleViewer::populate_point_subset() m_subset_count = m_point_count; if (m_subset_by_coord) { - // cout << "only accepting points where the coordinates along the " << m_subset_axis->value() - // << " axis are within: [" - // << ((m_subset_level->value() + 0.0f)/m_num_subset_levels->value()) << ", " - // << ((m_subset_level->value()+1.0f)/m_num_subset_levels->value()) << ")." << endl; m_subset_count = 0; for (int i = 0; i < m_points.sizeX(); ++i) { - float v = m_points(i, m_subset_axis); - // cout << v << endl; + float v = m_points(i, std::clamp(m_subset_axis, 0, m_num_dimensions - 1)); v += 0.5f; if (v >= (m_subset_level + 0.0f) / m_num_subset_levels && v < (m_subset_level + 1.0f) / m_num_subset_levels) { diff --git a/gui/SampleViewer.h b/gui/SampleViewer.h index 8344f3f..f680f69 100644 --- a/gui/SampleViewer.h +++ b/gui/SampleViewer.h @@ -35,10 +35,12 @@ using namespace linalg::aliases; #include "gui_app.h" #include "shader.h" #include +#include #include #include #include +using std::map; using std::ofstream; using std::string; using std::vector; @@ -137,10 +139,11 @@ class SampleViewer : public GUIApp void set_view(CameraType view); void update_current_camera(); void draw_editor(); + void process_hotkeys(); void generate_points(); void populate_point_subset(); void generate_grid(vector &positions, int gridRes); - void draw_text(const int2 &pos, const std::string &text, const float4 &col, int fontSize, int fixedWidth, + void draw_text(const int2 &pos, const std::string &text, const float4 &col, ImFont *font = nullptr, int align = TextAlign_RIGHT | TextAlign_BOTTOM) const; void draw_points(const float4x4 &mvp, const float3 &color); void draw_grid(const float4x4 &mvp, float alpha, uint32_t offset, uint32_t count); @@ -182,5 +185,8 @@ class SampleViewer : public GUIApp int m_num_subset_levels = 1; int m_subset_level = 0; - vector m_time_strings; + map m_regular, m_bold; // regular and bold fonts at various sizes + + float m_time1 = 0.f, m_time2 = 0.f; + float3 m_point_color = {0.9f, 0.55f, 0.1f}; }; diff --git a/gui/gui_app.cpp b/gui/gui_app.cpp index 253b9ed..747f289 100644 --- a/gui/gui_app.cpp +++ b/gui/gui_app.cpp @@ -4,7 +4,8 @@ #include #ifdef __EMSCRIPTEN__ -#include +#include +#include #endif GUIApp *GUIApp::s_instance = nullptr; diff --git a/gui/shader.h b/gui/shader.h index 5971186..16464a7 100644 --- a/gui/shader.h +++ b/gui/shader.h @@ -17,6 +17,7 @@ #pragma once #define NANOGUI_USE_OPENGL +// #define NANOGUI_USE_GLES #include "linalg.h" #include "traits.h" From e72704aa9f78e4d7d466bff0e830bcd4f6ecb90a Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Thu, 30 Nov 2023 20:29:24 +0100 Subject: [PATCH 11/27] refactoring eps export, adding svg export --- CMakeLists.txt | 3 +- gui/SampleViewer.cpp | 449 ++++++++++++++----------------------------- gui/SampleViewer.h | 39 +--- gui/arcball.h | 4 + gui/export.cpp | 282 +++++++++++++++++++++++++++ gui/export.h | 22 +++ 6 files changed, 466 insertions(+), 333 deletions(-) create mode 100644 gui/export.cpp create mode 100644 gui/export.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 357ef33..b8bbe0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -144,7 +144,7 @@ endif() cpmaddpackage( NAME hello_imgui GITHUB_REPOSITORY wkjarosz/hello_imgui - GIT_TAG "873fec179d5ccc090f166f9cddc5caeca92dfa14" + GIT_TAG "90ddefdeadcfef7569b94ea3d9c506841e9eb5ee" OPTIONS "HELLOIMGUI_WITH_GLFW ON" "HELLOIMGUI_WITH_TEST_ENGINE OFF" @@ -238,6 +238,7 @@ hello_imgui_add_app(SamplinSafari gui/SampleViewer.cpp gui/shader.cpp gui/gui_app.cpp + gui/export.cpp ) set_target_properties(SamplinSafari PROPERTIES diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index 9606de5..4bd39a4 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -18,6 +18,7 @@ using std::to_string; #include "hello_imgui/hello_imgui.h" #include "imgui.h" #include "imgui_internal.h" +#include "portable-file-dialogs.h" #include #include @@ -34,14 +35,14 @@ using std::to_string; #include #include +#include "export.h" + #include #include #include #include #include -#include "portable-file-dialogs.h" - #ifndef __EMSCRIPTEN__ #include #else @@ -126,18 +127,12 @@ void main() } )"; -static void computeCameraMatrices(float4x4 &model, float4x4 &lookat, float4x4 &view, float4x4 &proj, - const CameraParameters &c, float window_aspect); -static void drawEPSGrid(const float4x4 &mvp, int grid_res, ofstream &file); -static void writeEPSPoints(const Array2d &points, int start, int count, const float4x4 &mvp, ofstream &file, - int dim_x, int dim_y, int dim_z); - static float map_slider_to_radius(float sliderValue) { return sliderValue * sliderValue * 32.0f + 2.0f; } -static void layout_2d_matrix(float4x4 &position, int numDims, int dim_x, int dim_y) +static float4x4 layout_2d_matrix(int numDims, int dim_x, int dim_y) { float cellSpacing = 1.f / (numDims - 1); float cellSize = 0.96f / (numDims - 1); @@ -145,38 +140,33 @@ static void layout_2d_matrix(float4x4 &position, int numDims, int dim_x, int dim float xOffset = dim_x - (numDims - 2) / 2.0f; float yOffset = -(dim_y - 1 - (numDims - 2) / 2.0f); - position = mul(translation_matrix(float3{cellSpacing * xOffset, cellSpacing * yOffset, 1}), - scaling_matrix(float3{cellSize, cellSize, 1})); + return mul(translation_matrix(float3{cellSpacing * xOffset, cellSpacing * yOffset, 1}), + scaling_matrix(float3{cellSize, cellSize, 1})); } SampleViewer::SampleViewer() : GUIApp() { - m_samplers.resize(NUM_POINT_TYPES, nullptr); - m_samplers[RANDOM] = new Random(m_num_dimensions); - m_samplers[JITTERED] = new Jittered(1, 1, m_jitter * 0.01f); - // m_samplers[MULTI_JITTERED] = new MultiJittered(1, 1, false, 0.0f); - m_samplers[MULTI_JITTERED_IP] = new MultiJitteredInPlace(1, 1, false, m_jitter * 0.01f); - // m_samplers[CORRELATED_MULTI_JITTERED] = new CorrelatedMultiJittered(1, 1, false, 0.0f); - m_samplers[CORRELATED_MULTI_JITTERED_IP] = - new CorrelatedMultiJitteredInPlace(1, 1, m_num_dimensions, false, m_jitter * 0.01f); - m_samplers[CMJND] = new CMJNDInPlace(1, 3, MJ_STYLE, false, m_jitter * 0.01f); - m_samplers[BOSE_OA_IP] = new BoseOAInPlace(1, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); - m_samplers[BOSE_GALOIS_OA_IP] = new BoseGaloisOAInPlace(1, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); - m_samplers[BUSH_OA_IP] = new BushOAInPlace(1, 3, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); - m_samplers[BUSH_GALOIS_OA_IP] = new BushGaloisOAInPlace(1, 3, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); - m_samplers[ADDEL_KEMP_OA_IP] = - new AddelmanKempthorneOAInPlace(2, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); - m_samplers[BOSE_BUSH_OA] = new BoseBushOA(2, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); - m_samplers[BOSE_BUSH_OA_IP] = new BoseBushOAInPlace(2, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions); - m_samplers[N_ROOKS_IP] = new NRooksInPlace(m_num_dimensions, 1, false, m_jitter * 0.01f); - m_samplers[SOBOL] = new Sobol(m_num_dimensions); - m_samplers[ZERO_TWO] = new ZeroTwo(1, m_num_dimensions, false); - m_samplers[ZERO_TWO_SHUFFLED] = new ZeroTwo(1, m_num_dimensions, true); - m_samplers[HALTON] = new Halton(m_num_dimensions); - m_samplers[HALTON_ZAREMBA] = new HaltonZaremba(m_num_dimensions); - m_samplers[HAMMERSLEY] = new Hammersley(m_num_dimensions, 1); - m_samplers[HAMMERSLEY_ZAREMBA] = new Hammersley(m_num_dimensions, 1); - m_samplers[LARCHER_PILLICHSHAMMER] = new LarcherPillichshammerGK(3, 1, false); + m_samplers.push_back(new Random(m_num_dimensions)); + m_samplers.push_back(new Jittered(1, 1, m_jitter * 0.01f)); + m_samplers.push_back(new MultiJitteredInPlace(1, 1, false, m_jitter * 0.01f)); + m_samplers.push_back(new CorrelatedMultiJitteredInPlace(1, 1, m_num_dimensions, false, m_jitter * 0.01f)); + m_samplers.push_back(new CMJNDInPlace(1, 3, MJ_STYLE, false, m_jitter * 0.01f)); + m_samplers.push_back(new BoseOAInPlace(1, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions)); + m_samplers.push_back(new BoseGaloisOAInPlace(1, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions)); + m_samplers.push_back(new BushOAInPlace(1, 3, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions)); + m_samplers.push_back(new BushGaloisOAInPlace(1, 3, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions)); + m_samplers.push_back(new AddelmanKempthorneOAInPlace(2, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions)); + m_samplers.push_back(new BoseBushOA(2, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions)); + m_samplers.push_back(new BoseBushOAInPlace(2, MJ_STYLE, false, m_jitter * 0.01f, m_num_dimensions)); + m_samplers.push_back(new NRooksInPlace(m_num_dimensions, 1, false, m_jitter * 0.01f)); + m_samplers.push_back(new Sobol(m_num_dimensions)); + m_samplers.push_back(new ZeroTwo(1, m_num_dimensions, false)); + m_samplers.push_back(new ZeroTwo(1, m_num_dimensions, true)); + m_samplers.push_back(new Halton(m_num_dimensions)); + m_samplers.push_back(new HaltonZaremba(m_num_dimensions)); + m_samplers.push_back(new Hammersley(m_num_dimensions, 1)); + m_samplers.push_back(new Hammersley(m_num_dimensions, 1)); + m_samplers.push_back(new LarcherPillichshammerGK(3, 1, false)); m_camera[CAMERA_XY].arcball.set_state({0, 0, 0, 1}); m_camera[CAMERA_XY].persp_factor = 0.0f; @@ -214,8 +204,7 @@ SampleViewer::SampleViewer() : GUIApp() HelloImGui::DockableWindow editorWindow; editorWindow.label = "Settings"; editorWindow.dockSpaceName = "EditorSpace"; - // editorWindow.canBeClosed = false; - editorWindow.GuiFunction = [this] { draw_editor(); }; + editorWindow.GuiFunction = [this] { draw_editor(); }; // A console window named "Console" will be placed in "ConsoleSpace". It uses the HelloImGui logger gui HelloImGui::DockableWindow consoleWindow; @@ -260,7 +249,7 @@ SampleViewer::SampleViewer() : GUIApp() m_params.callbacks.ShowAppMenuItems = [this]() { - if (ImGui::MenuItem(ICON_FA_SAVE " Save as EPS")) + if (ImGui::MenuItem(ICON_FA_SAVE " Export as EPS")) { try { @@ -271,16 +260,45 @@ SampleViewer::SampleViewer() : GUIApp() HelloImGui::Log(HelloImGui::LogLevel::Info, "Saving to base filename: %s.", basename.c_str()); ofstream fileAll(basename + "_all2D.eps"); - draw_contents_2D_EPS(fileAll); + fileAll << export_all_points_2d("eps"); ofstream fileXYZ(basename + "_012.eps"); - draw_contents_EPS(fileXYZ, CAMERA_CURRENT, m_dimension.x, m_dimension.y, m_dimension.z); + fileXYZ << export_XYZ_points("eps"); for (int y = 0; y < m_num_dimensions; ++y) for (int x = 0; x < y; ++x) { ofstream fileXY(fmt::format("{:s}_{:d}{:d}.eps", basename, x, y)); - draw_contents_EPS(fileXY, CAMERA_XY, x, y, 2); + fileXY << export_points_2d("eps", CAMERA_XY, {x, y, 2}); + } + } + catch (const std::exception &e) + { + HelloImGui::Log(HelloImGui::LogLevel::Error, "An error occurred: %s.", e.what()); + } + } + + if (ImGui::MenuItem(ICON_FA_SAVE " Export as SVG")) + { + try + { + auto basename = pfd::save_file("Base filename").result(); + if (basename.empty()) + return; + + HelloImGui::Log(HelloImGui::LogLevel::Info, "Saving to base filename: %s.", basename.c_str()); + + ofstream fileAll(basename + "_all2D.svg"); + fileAll << export_all_points_2d("svg"); + + ofstream fileXYZ(basename + "_012.svg"); + fileXYZ << export_XYZ_points("svg"); + + for (int y = 0; y < m_num_dimensions; ++y) + for (int x = 0; x < y; ++x) + { + ofstream fileXY(fmt::format("{:s}_{:d}{:d}.svg", basename, x, y)); + fileXY << export_points_2d("svg", CAMERA_XY, {x, y, 2}); } } catch (const std::exception &e) @@ -341,26 +359,21 @@ void SampleViewer::draw_gui() if (m_scale_radius_with_points) radius *= 64.0f / std::sqrt(m_point_count); - float4x4 model, lookat, view, proj, mvp; - computeCameraMatrices(model, lookat, view, proj, m_camera[CAMERA_CURRENT], - float(m_viewport_size.x) / m_viewport_size.y); - mvp = mul(proj, mul(lookat, mul(view, model))); + float4x4 mvp = m_camera[CAMERA_CURRENT].matrix(float(m_viewport_size.x) / m_viewport_size.y); if (m_view == CAMERA_2D) { - float4x4 pos; - for (int i = 0; i < m_num_dimensions - 1; ++i) { - layout_2d_matrix(pos, m_num_dimensions, i, m_num_dimensions - 1); - float4 text_pos = mul(mvp, mul(pos, float4{0.f, -0.5f, 0.0f, 1.0f})); - float2 text_2d_pos((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); + float4x4 pos = layout_2d_matrix(m_num_dimensions, i, m_num_dimensions - 1); + float4 text_pos = mul(mvp, mul(pos, float4{0.f, -0.5f, 0.0f, 1.0f})); + float2 text_2d_pos((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); draw_text(m_viewport_pos + int2((text_2d_pos.x) * m_viewport_size.x, (1.f - text_2d_pos.y) * m_viewport_size.y + 16), to_string(i), float4(1.0f, 1.0f, 1.0f, 0.75f), m_regular[16], TextAlign_CENTER | TextAlign_BOTTOM); - layout_2d_matrix(pos, m_num_dimensions, 0, i + 1); + pos = layout_2d_matrix(m_num_dimensions, 0, i + 1); text_pos = mul(mvp, mul(pos, float4{-0.5f, 0.f, 0.0f, 1.0f})); text_2d_pos = float2((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); draw_text(m_viewport_pos + @@ -423,7 +436,7 @@ void SampleViewer::draw_editor() { if (ImGui::BeginCombo("##", m_samplers[m_sampler]->name().c_str())) { - for (int n = 0; n < NUM_POINT_TYPES; n++) + for (int n = 0; n < (int)m_samplers.size(); n++) { Sampler *sampler = m_samplers[n]; const bool is_selected = (m_sampler == n); @@ -665,7 +678,7 @@ void SampleViewer::process_hotkeys() !ImGui::IsKeyDown(ImGuiMod_Shift)) { int delta = ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1; - m_sampler = mod(m_sampler + delta, (int)NUM_POINT_TYPES); + m_sampler = mod(m_sampler + delta, (int)m_samplers.size()); Sampler *sampler = m_samplers[m_sampler]; sampler->setJitter(m_jitter * 0.01f); sampler->setRandomized(m_randomize); @@ -900,8 +913,7 @@ void SampleViewer::draw_grid(const float4x4 &mvp, float alpha, uint32_t offset, void SampleViewer::draw_2D_points_and_grid(const float4x4 &mvp, int dim_x, int dim_y, int plot_index) { - float4x4 pos; - layout_2d_matrix(pos, m_num_dimensions, dim_x, dim_y); + float4x4 pos = layout_2d_matrix(m_num_dimensions, dim_x, dim_y); // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); // Render the point set @@ -980,10 +992,7 @@ void SampleViewer::draw() // update/move the camera update_current_camera(); - float4x4 model, lookat, view, proj, mvp; - computeCameraMatrices(model, lookat, view, proj, m_camera[CAMERA_CURRENT], - float(m_viewport_size.x) / m_viewport_size.y); - mvp = mul(proj, mul(lookat, mul(view, model))); + float4x4 mvp = m_camera[CAMERA_CURRENT].matrix(float(m_viewport_size.x) / m_viewport_size.y); if (m_view == CAMERA_2D) { @@ -1049,168 +1058,95 @@ void SampleViewer::draw_text(const int2 &pos, const string &text, const float4 & ImGui::PopFont(); } -void SampleViewer::draw_contents_EPS(ofstream &file, CameraType camera_type, int dim_x, int dim_y, int dim_z) +string SampleViewer::export_XYZ_points(const string &format) { int size = 900; int crop = 720; - int pointScale = m_samplers[m_sampler]->coarseGridRes(m_point_count); - - file << "%!PS-Adobe-3.0 EPSF-3.0\n"; - file << "%%HiResBoundingBox: " << (-crop) << " " << (-crop) << " " << crop << " " << crop << "\n"; - file << "%%BoundingBox: " << (-crop) << " " << (-crop) << " " << crop << " " << crop << "\n"; - file << "%%CropBox: " << (-crop) << " " << (-crop) << " " << crop << " " << crop << "\n"; - file << "gsave " << size << " " << size << " scale\n"; - file << "/radius { " << (0.5f / pointScale) << " } def %define variable for point radius\n"; - file << "/p { radius 0 360 arc closepath fill } def %define point command\n"; - file << "/blw " << (0.01f) << " def %define variable for bounding box linewidth\n"; - file << "/clw " << (0.003f) << " def %define variable for coarse linewidth\n"; - file << "/flw " << (0.0004f) << " def %define variable for fine linewidth\n"; - file << "/pfc " - << "{0.9 0.55 0.1}" - << " def %define variable for point fill color\n"; - file << "/blc " << (0.0f) << " def %define variable for bounding box color\n"; - file << "/clc " << (0.8f) << " def %define variable for coarse line color\n"; - file << "/flc " << (0.9f) << " def %define variable for fine line color\n"; - - float4x4 model, lookat, view, proj, mvp; - computeCameraMatrices(model, lookat, view, proj, m_camera[camera_type], 1.0f); - mvp = mul(proj, mul(lookat, mul(view, model))); - int start_axis = CAMERA_XY, end_axis = CAMERA_XZ; - if (camera_type != CAMERA_CURRENT) - start_axis = end_axis = camera_type; - if (m_show_fine_grid) - { - file << "% Draw fine grids \n"; - file << "flc setgray %fill color for fine grid \n"; - file << "flw setlinewidth\n"; - for (int axis = start_axis; axis <= end_axis; ++axis) - { - // this extra matrix multiply is needed to properly rotate the different grids for the XYZ view - float4x4 mvp2 = mul(mvp, m_camera[axis].arcball.matrix()); - drawEPSGrid(mvp2, m_point_count, file); - } - } + string out = + (format == "eps") ? header_eps(size, crop, 1.f, m_point_color) : header_svg(size, crop, 1.f, m_point_color); - if (m_show_coarse_grid) + float4x4 mvp = m_camera[CAMERA_CURRENT].matrix(1.0f); + + for (int axis = CAMERA_XY; axis <= CAMERA_XZ; ++axis) { - file << "% Draw coarse grids \n"; - file << "clc setgray %fill color for coarse grid \n"; - file << "clw setlinewidth\n"; - for (int axis = start_axis; axis <= end_axis; ++axis) - { - // this extra matrix multiply is needed to properly rotate the different grids for the XYZ view - float4x4 mvp2 = mul(mvp, m_camera[axis].arcball.matrix()); - drawEPSGrid(mvp2, m_samplers[m_sampler]->coarseGridRes(m_point_count), file); - } + if (format == "eps") + out += draw_grids_eps(mul(mvp, m_camera[axis].arcball.matrix()), m_point_count, + m_samplers[m_sampler]->coarseGridRes(m_point_count), m_show_fine_grid, + m_show_coarse_grid, m_show_bbox); + else + out += draw_grids_svg(mul(mvp, m_camera[axis].arcball.matrix()), m_point_count, + m_samplers[m_sampler]->coarseGridRes(m_point_count), m_show_fine_grid, + m_show_coarse_grid, m_show_bbox); } - if (m_show_bbox) + out += (format == "eps") ? draw_points_eps(mvp, m_dimension, m_subset_points, get_draw_range()) + : draw_points_svg(mvp, m_dimension, m_subset_points, get_draw_range()); + + out += (format == "eps") ? footer_eps() : footer_svg(); + return out; +} + +string SampleViewer::export_points_2d(const string &format, CameraType camera_type, int3 dim) +{ + int size = 900; + int crop = 720; + + string out = + (format == "eps") ? header_eps(size, crop, 1.f, m_point_color) : header_svg(size, crop, 1.f, m_point_color); + + float4x4 mvp = m_camera[camera_type].matrix(1.0f); + + if (format == "eps") { - file << "% Draw bounding boxes \n"; - file << "blc setgray %fill color for bounding box \n"; - file << "blw setlinewidth\n"; - for (int axis = start_axis; axis <= end_axis; ++axis) - { - // this extra matrix multiply is needed to properly rotate the different grids for the XYZ view - float4x4 mvp2 = mul(mvp, m_camera[axis].arcball.matrix()); - drawEPSGrid(mvp2, 1, file); - } + out += draw_grids_eps(mvp, m_point_count, m_samplers[m_sampler]->coarseGridRes(m_point_count), m_show_fine_grid, + m_show_coarse_grid, m_show_bbox); + out += draw_points_eps(mvp, dim, m_subset_points, get_draw_range()); } - - // Generate and render the point set + else { - generate_points(); - populate_point_subset(); - file << "% Draw points \n"; - file << "pfc setrgbcolor %fill color for points\n"; - - int2 range = get_draw_range(); - writeEPSPoints(m_subset_points, range.x, range.y, mvp, file, dim_x, dim_y, dim_z); + out += draw_grids_svg(mvp, m_point_count, m_samplers[m_sampler]->coarseGridRes(m_point_count), m_show_fine_grid, + m_show_coarse_grid, m_show_bbox); + out += draw_points_svg(mvp, dim, m_subset_points, get_draw_range()); } - file << "grestore\n"; + out += (format == "eps") ? footer_eps() : footer_svg(); + return out; } -void SampleViewer::draw_contents_2D_EPS(ofstream &file) +string SampleViewer::export_all_points_2d(const string &format) { int size = 900 * 108.0f / 720.0f; int crop = 108; // 720; float scale = 1.0f / (m_num_dimensions - 1); - // int pointScale = m_samplers[m_point_type_box->selected_index()]->coarseGridRes(m_point_count); - - file << "%!PS-Adobe-3.0 EPSF-3.0\n"; - file << "%%HiResBoundingBox: " << (-crop) << " " << (-crop) << " " << crop << " " << crop << "\n"; - file << "%%BoundingBox: " << (-crop) << " " << (-crop) << " " << crop << " " << crop << "\n"; - file << "%%CropBox: " << (-crop) << " " << (-crop) << " " << crop << " " << crop << "\n"; - file << "gsave " << size << " " << size << " scale\n"; - // file << "/radius { " << (0.5f/pointScale*scale) << " } def %define variable for point radius\n"; - file << "/radius { " << (0.02 * scale) << " } def %define variable for point radius\n"; - file << "/p { radius 0 360 arc closepath fill } def %define point command\n"; - file << "/blw " << (0.020f * scale) << " def %define variable for bounding box linewidth\n"; - file << "/clw " << (0.01f * scale) << " def %define variable for coarse linewidth\n"; - file << "/flw " << (0.005f * scale) << " def %define variable for fine linewidth\n"; - file << "/pfc " - << "{0.9 0.55 0.1}" - << " def %define variable for point fill color\n"; - file << "/blc " << (0.0f) << " def %define variable for bounding box color\n"; - file << "/clc " << (0.5f) << " def %define variable for coarse line color\n"; - file << "/flc " << (0.9f) << " def %define variable for fine line color\n"; - - float4x4 model, lookat, view, proj, mvp; - computeCameraMatrices(model, lookat, view, proj, m_camera[CAMERA_2D], 1.0f); - mvp = mul(proj, mul(lookat, mul(view, model))); - - // Generate and render the point set - { - generate_points(); - populate_point_subset(); - for (int y = 0; y < m_num_dimensions; ++y) - for (int x = 0; x < y; ++x) - { - float4x4 pos; - layout_2d_matrix(pos, m_num_dimensions, x, y); - - if (m_show_fine_grid) - { - file << "% Draw fine grid \n"; - file << "flc setgray %fill color for fine grid \n"; - file << "flw setlinewidth\n"; - drawEPSGrid(mul(mvp, pos), m_point_count, file); - } - if (m_show_coarse_grid) - { - file << "% Draw coarse grids \n"; - file << "clc setgray %fill color for coarse grid \n"; - file << "clw setlinewidth\n"; - drawEPSGrid(mul(mvp, pos), m_samplers[m_sampler]->coarseGridRes(m_point_count), file); - } - if (m_show_bbox) - { - file << "% Draw bounding box \n"; - file << "blc setgray %fill color for bounding box \n"; - file << "blw setlinewidth\n"; - drawEPSGrid(mul(mvp, pos), 1, file); - } - } + string out = + (format == "eps") ? header_eps(size, crop, scale, m_point_color) : header_svg(size, crop, scale, m_point_color); - file << "% Draw points \n"; - file << "pfc setrgbcolor %fill color for points\n"; - for (int y = 0; y < m_num_dimensions; ++y) - for (int x = 0; x < y; ++x) - { - float4x4 pos; - layout_2d_matrix(pos, m_num_dimensions, x, y); - file << "% Draw (" << x << "," << y << ") points\n"; + float4x4 mvp = m_camera[CAMERA_2D].matrix(1.0f); - int2 range = get_draw_range(); + for (int y = 0; y < m_num_dimensions; ++y) + for (int x = 0; x < y; ++x) + { + float4x4 pos = layout_2d_matrix(m_num_dimensions, x, y); - writeEPSPoints(m_subset_points, range.x, range.y, mul(mvp, pos), file, x, y, 2); + if (format == "eps") + { + out += draw_grids_eps(mul(mvp, pos), m_point_count, m_samplers[m_sampler]->coarseGridRes(m_point_count), + m_show_fine_grid, m_show_coarse_grid, m_show_bbox); + out += draw_points_eps(mul(mvp, pos), {x, y, 2}, m_subset_points, get_draw_range()); } - } + else + { + out += draw_grids_svg(mul(mvp, pos), m_point_count, m_samplers[m_sampler]->coarseGridRes(m_point_count), + m_show_fine_grid, m_show_coarse_grid, m_show_bbox); + out += draw_points_svg(mul(mvp, pos), {x, y, 2}, m_subset_points, get_draw_range()); + } + } + + out += (format == "eps") ? footer_eps() : footer_svg(); - file << "grestore\n"; + return out; } void SampleViewer::set_view(CameraType view) { @@ -1251,8 +1187,6 @@ void SampleViewer::update_current_camera() // if we are dragging the mouse, then just use the current arcball // rotation, otherwise, interpolate between the previous and next camera // orientations - // auto w = static_cast(m_params.backendPointers.glfwWindow); - // if (glfwGetMouseButton(w, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS) if (m_mouse_down) camera.arcball = camera1.arcball; else @@ -1341,115 +1275,27 @@ void SampleViewer::generate_grid(vector &positions, int grid_res) } } -static void computeCameraMatrices(float4x4 &model, float4x4 &lookat, float4x4 &view, float4x4 &proj, - const CameraParameters &c, float window_aspect) +float4x4 CameraParameters::matrix(float window_aspect) const { - model = scaling_matrix(float3(c.zoom)); - if (c.camera_type == CAMERA_XY || c.camera_type == CAMERA_2D) + float4x4 model = scaling_matrix(float3(zoom)); + if (camera_type == CAMERA_XY || camera_type == CAMERA_2D) model = mul(scaling_matrix(float3(1, 1, 0)), model); - if (c.camera_type == CAMERA_XZ) + if (camera_type == CAMERA_XZ) model = mul(scaling_matrix(float3(1, 0, 1)), model); - if (c.camera_type == CAMERA_YZ) + if (camera_type == CAMERA_YZ) model = mul(scaling_matrix(float3(0, 1, 1)), model); - float fH = std::tan(c.view_angle / 360.0f * M_PI) * c.dnear; + float fH = std::tan(view_angle / 360.0f * M_PI) * dnear; float fW = fH * window_aspect; - float oFF = c.eye.z / c.dnear; - float4x4 orth = linalg::ortho_matrix(-fW * oFF, fW * oFF, -fH * oFF, fH * oFF, c.dnear, c.dfar); - float4x4 frust = linalg::frustum_matrix(-fW, fW, -fH, fH, c.dnear, c.dfar); - - proj = lerp(orth, frust, c.persp_factor); - lookat = linalg::lookat_matrix(c.eye, c.center, c.up); - view = c.arcball.matrix(); -} - -static void drawEPSGrid(const float4x4 &mvp, int grid_res, ofstream &file) -{ - float4 vA4d, vB4d; - float2 vA, vB; - - int fine_grid_res = 2; - float coarse_scale = 1.f / grid_res, fine_scale = 1.f / fine_grid_res; - - // draw the bounding box - // if (grid_res == 1) - { - float4 c004d = mul(mvp, float4{0.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); - float4 c104d = mul(mvp, float4{1.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); - float4 c114d = mul(mvp, float4{1.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); - float4 c014d = mul(mvp, float4{0.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); - float2 c00 = float2(c004d.x / c004d.w, c004d.y / c004d.w); - float2 c10 = float2(c104d.x / c104d.w, c104d.y / c104d.w); - float2 c11 = float2(c114d.x / c114d.w, c114d.y / c114d.w); - float2 c01 = float2(c014d.x / c014d.w, c014d.y / c014d.w); - - file << "newpath\n"; - file << c00.x << " " << c00.y << " moveto\n"; - file << c10.x << " " << c10.y << " lineto\n"; - file << c11.x << " " << c11.y << " lineto\n"; - file << c01.x << " " << c01.y << " lineto\n"; - file << "closepath\n"; - file << "stroke\n"; - } - - for (int i = 1; i <= grid_res - 1; i++) - { - // draw horizontal lines - file << "newpath\n"; - for (int j = 0; j < fine_grid_res; j++) - { - vA4d = mul(mvp, float4{j * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f}); - vB4d = mul(mvp, float4{(j + 1) * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f}); - - vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); - vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); - - file << vA.x << " " << vA.y; - - if (j == 0) - file << " moveto\n"; - else - file << " lineto\n"; - - file << vB.x << " " << vB.y; - file << " lineto\n"; - } - file << "stroke\n"; + float oFF = eye.z / dnear; + float4x4 orth = linalg::ortho_matrix(-fW * oFF, fW * oFF, -fH * oFF, fH * oFF, dnear, dfar); + float4x4 frust = linalg::frustum_matrix(-fW, fW, -fH, fH, dnear, dfar); - // draw vertical lines - file << "newpath\n"; - for (int j = 0; j < fine_grid_res; j++) - { - vA4d = mul(mvp, float4{i * coarse_scale - 0.5f, j * fine_scale - 0.5f, 0.0f, 1.0f}); - vB4d = mul(mvp, float4{i * coarse_scale - 0.5f, (j + 1) * fine_scale - 0.5f, 0.0f, 1.0f}); - - vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); - vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); - - file << vA.x << " " << vA.y; - - if (j == 0) - file << " moveto\n"; - else - file << " lineto\n"; - - file << vB.x << " " << vB.y; - file << " lineto\n"; - } - file << "stroke\n"; - } -} - -static void writeEPSPoints(const Array2d &points, int start, int count, const float4x4 &mvp, ofstream &file, - int dim_x, int dim_y, int dim_z) -{ - for (int i = start; i < start + count; i++) - { - float4 v4d = mul(mvp, float4{points(i, dim_x), points(i, dim_y), points(i, dim_z), 1.0f}); - float2 v2d(v4d.x / v4d.w, v4d.y / v4d.w); - file << v2d.x << " " << v2d.y << " p\n"; - } + float4x4 proj = lerp(orth, frust, persp_factor); + float4x4 lookat = linalg::lookat_matrix(eye, center, up); + float4x4 view = arcball.matrix(); + return mul(proj, mul(lookat, mul(view, model))); } int main(int argc, char **argv) @@ -1478,6 +1324,7 @@ int main(int argc, char **argv) args.push_back(argv[i]); } } + (void)launched_from_finder; } catch (const std::exception &e) { diff --git a/gui/SampleViewer.h b/gui/SampleViewer.h index f680f69..e31ebdc 100644 --- a/gui/SampleViewer.h +++ b/gui/SampleViewer.h @@ -2,6 +2,8 @@ \author Wojciech Jarosz */ +#pragma once + #include "linalg.h" using namespace linalg::aliases; @@ -45,35 +47,6 @@ using std::ofstream; using std::string; using std::vector; -enum PointType -{ - RANDOM = 0, - JITTERED, - // MULTI_JITTERED, - MULTI_JITTERED_IP, - // CORRELATED_MULTI_JITTERED, - // CORRELATED_MULTI_JITTERED_3D, - CORRELATED_MULTI_JITTERED_IP, - CMJND, - BOSE_OA_IP, - BOSE_GALOIS_OA_IP, - BUSH_OA_IP, - BUSH_GALOIS_OA_IP, - ADDEL_KEMP_OA_IP, - BOSE_BUSH_OA, - BOSE_BUSH_OA_IP, - N_ROOKS_IP, - SOBOL, - ZERO_TWO, - ZERO_TWO_SHUFFLED, - HALTON, - HALTON_ZAREMBA, - HAMMERSLEY, - HAMMERSLEY_ZAREMBA, - LARCHER_PILLICHSHAMMER, - NUM_POINT_TYPES -}; - enum CameraType { CAMERA_XY = 0, @@ -96,6 +69,8 @@ struct CameraParameters float3 center = float3{0.0f, 0.0f, 0.0f}; float3 up = float3{0.0f, 1.0f, 0.0f}; CameraType camera_type = CAMERA_CURRENT; + + float4x4 matrix(float window_aspect) const; }; enum TextAlign : int @@ -132,8 +107,10 @@ class SampleViewer : public GUIApp // bool maximize_event(bool maximized) override; private: - void draw_contents_EPS(ofstream &file, CameraType camera, int dimX, int dimY, int dimZ); - void draw_contents_2D_EPS(ofstream &file); + string export_XYZ_points(const string &format); + string export_points_2d(const string &format, CameraType camera, int3 dim); + string export_all_points_2d(const string &format); + void update_GPU_points(bool regenerate = true); void update_GPU_grids(); void set_view(CameraType view); diff --git a/gui/arcball.h b/gui/arcball.h index 25f05b1..258720d 100644 --- a/gui/arcball.h +++ b/gui/arcball.h @@ -1,3 +1,7 @@ +/** \file arcball.h + \author Wojciech Jarosz +*/ + #include "linalg.h" #include diff --git a/gui/export.cpp b/gui/export.cpp new file mode 100644 index 0000000..f4b57b2 --- /dev/null +++ b/gui/export.cpp @@ -0,0 +1,282 @@ +#include "export.h" +#include +#include + +using std::ofstream; +using std::string; + +string header_eps(int size, int crop, float scale, const float3 &point_color) +{ + string out; + out += fmt::format("%!PS-Adobe-3.0 EPSF-3.0\n"); + out += fmt::format("%%HiResBoundingBox: {} {} {} {}\n", -crop, -crop, crop, crop); + out += fmt::format("%%BoundingBox: {} {} {} {}\n", -crop, -crop, crop, crop); + out += fmt::format("%%CropBox: {} {} {} {}\n", -crop, -crop, crop, crop); + out += fmt::format("gsave {} {} scale\n", size, size); + out += fmt::format("/radius {{ {} }} def %define variable for point radius\n", 0.02f * scale); + out += fmt::format("/p {{ radius 0 360 arc closepath fill }} def %define point command\n"); + out += fmt::format("/blw {} def %define variable for bounding box linewidth\n", 0.020f * scale); + out += fmt::format("/clw {} def %define variable for coarse linewidth\n", 0.01f * scale); + out += fmt::format("/flw {} def %define variable for fine linewidth\n", 0.005f * scale); + out += fmt::format("/pfc {{ {} {} {} }} def %define variable for point fill color\n", point_color.x, point_color.y, + point_color.z); + out += fmt::format("/blc {} def %define variable for bounding box color\n", 0.0f); + out += fmt::format("/clc {} def %define variable for coarse line color\n", 0.5f); + out += fmt::format("/flc {} def %define variable for fine line color\n", 0.9f); + + return out; +} + +string footer_eps() +{ + return "grestore\n"; +} + +string draw_grid_eps(const float4x4 &mvp, int grid_res) +{ + float4 vA4d, vB4d; + float2 vA, vB; + + int fine_grid_res = 2; + float coarse_scale = 1.f / grid_res, fine_scale = 1.f / fine_grid_res; + + string out; + + // draw the bounding box + // if (grid_res == 1) + { + float4 c004d = mul(mvp, float4{0.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); + float4 c104d = mul(mvp, float4{1.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); + float4 c114d = mul(mvp, float4{1.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); + float4 c014d = mul(mvp, float4{0.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); + float2 c00 = float2(c004d.x / c004d.w, c004d.y / c004d.w); + float2 c10 = float2(c104d.x / c104d.w, c104d.y / c104d.w); + float2 c11 = float2(c114d.x / c114d.w, c114d.y / c114d.w); + float2 c01 = float2(c014d.x / c014d.w, c014d.y / c014d.w); + + out += fmt::format(R"(newpath + {} {} moveto + {} {} lineto + {} {} lineto + {} {} lineto +closepath stroke +)", + c00.x, c00.y, c10.x, c10.y, c11.x, c11.y, c01.x, c01.y); + } + + for (int i = 1; i <= grid_res - 1; i++) + { + // draw horizontal lines + out += "newpath\n"; + for (int j = 0; j < fine_grid_res; j++) + { + vA4d = mul(mvp, float4{j * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f}); + vB4d = mul(mvp, float4{(j + 1) * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f}); + + vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); + vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); + + out += fmt::format(" {} {} {:s}\n", vA.x, vA.y, (j == 0) ? "moveto" : "lineto"); + out += fmt::format(" {} {} lineto\n", vB.x, vB.y); + } + out += "stroke\n"; + + // draw vertical lines + out += "newpath\n"; + for (int j = 0; j < fine_grid_res; j++) + { + vA4d = mul(mvp, float4{i * coarse_scale - 0.5f, j * fine_scale - 0.5f, 0.0f, 1.0f}); + vB4d = mul(mvp, float4{i * coarse_scale - 0.5f, (j + 1) * fine_scale - 0.5f, 0.0f, 1.0f}); + + vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); + vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); + + out += fmt::format(" {} {} {:s}\n", vA.x, vA.y, (j == 0) ? "moveto" : "lineto"); + out += fmt::format(" {} {} lineto\n", vB.x, vB.y); + } + out += "stroke\n"; + } + return out; +} + +string draw_grids_eps(float4x4 mat, int fgrid_res, int cgrid_res, bool fine_grid, bool coarse_grid, bool bbox) +{ + string out; + if (fine_grid) + { + out += "% Draw fine grids \n"; + out += "flc setgray %fill color for fine grid \n"; + out += "flw setlinewidth\n"; + + // this extra matrix multiply is needed to properly rotate the different grids for the XYZ view + out += draw_grid_eps(mat, fgrid_res); + } + + if (coarse_grid) + { + out += "% Draw coarse grids \n"; + out += "clc setgray %fill color for coarse grid \n"; + out += "clw setlinewidth\n"; + + out += draw_grid_eps(mat, cgrid_res); + } + + if (bbox) + { + out += "% Draw bounding boxes \n"; + out += "blc setgray %fill color for bounding box \n"; + out += "blw setlinewidth\n"; + out += draw_grid_eps(mat, 1); + } + + return out; +} + +string draw_points_eps(float4x4 mat, int3 dim, const Array2d &points, int2 range) +{ + string out; + + // Render the point set + out += "% Draw points \n"; + out += "pfc setrgbcolor %fill color for points\n"; + + for (int i = range.x; i < range.x + range.y; i++) + { + float4 v4d = mul(mat, float4{points(i, dim.x), points(i, dim.y), points(i, dim.z), 1.0f}); + float2 v2d(v4d.x / v4d.w, v4d.y / v4d.w); + out += fmt::format("{} {} p\n", v2d.x, v2d.y); + } + + return out; +} + +string header_svg(int size, int crop, float scale, const float3 &point_color) +{ + string out; + + scale *= 0.5f; + + out += fmt::format(R"_( + + +)_", + 1000, -1000, -1, -1, 2, 2, 0.02f * scale, int(point_color.x * 255), int(point_color.y * 255), + int(point_color.z * 255), 0.005f * scale, int(0.9f * 255), int(0.9f * 255), int(0.9f * 255), + 0.01f * scale, int(0.5f * 255), int(0.5f * 255), int(0.5f * 255), 0.02f * scale, 0, 0, 0, 1, 1); + return out; +} + +string draw_grid_svg(const float4x4 &mvp, int grid_res, const string &css_class) +{ + float4 vA4d, vB4d; + float2 vA, vB; + + float scale = 1.f / grid_res; + + string out; + + // draw the bounding box + // if (grid_res == 1) + { + float4 c004d = mul(mvp, float4{0.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); + float4 c104d = mul(mvp, float4{1.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); + float4 c114d = mul(mvp, float4{1.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); + float4 c014d = mul(mvp, float4{0.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); + float2 c00 = float2(c004d.x / c004d.w, c004d.y / c004d.w); + float2 c10 = float2(c104d.x / c104d.w, c104d.y / c104d.w); + float2 c11 = float2(c114d.x / c114d.w, c114d.y / c114d.w); + float2 c01 = float2(c014d.x / c014d.w, c014d.y / c014d.w); + + out += fmt::format(R"( )", c00.x, -c00.y, c10.x, -c10.y, + c11.x, -c11.y, c01.x, -c01.y, css_class); + out += "\n"; + } + + for (int i = 1; i <= grid_res - 1; i++) + { + // draw horizontal lines + vA4d = mul(mvp, float4{0.f - 0.5f, i * scale - 0.5f, 0.0f, 1.0f}); + vB4d = mul(mvp, float4{1.f - 0.5f, i * scale - 0.5f, 0.0f, 1.0f}); + vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); + vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); + out += fmt::format(R"( )", vA.x, -vA.y, vB.x, -vB.y, css_class); + out += "\n"; + + // draw vertical lines + vA4d = mul(mvp, float4{i * scale - 0.5f, 0.f - 0.5f, 0.0f, 1.0f}); + vB4d = mul(mvp, float4{i * scale - 0.5f, 1.f - 0.5f, 0.0f, 1.0f}); + vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); + vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); + out += fmt::format(R"( )", vA.x, -vA.y, vB.x, -vB.y, css_class); + out += "\n"; + } + return out; +} + +string draw_grids_svg(float4x4 mat, int fgrid_res, int cgrid_res, bool fine_grid, bool coarse_grid, bool bbox) +{ + string out; + if (fine_grid) + out += draw_grid_svg(mat, fgrid_res, "fine_grid"); + + if (coarse_grid) + out += draw_grid_svg(mat, cgrid_res, "coarse_grid"); + + if (bbox) + out += draw_grid_svg(mat, 1, "bbox"); + + return out; +} + +string draw_points_svg(float4x4 mat, int3 dim, const Array2d &points, int2 range) +{ + string out; + + for (int i = range.x; i < range.x + range.y; i++) + { + float4 v4d = mul(mat, float4{points(i, dim.x), points(i, dim.y), points(i, dim.z), 1.0f}); + float2 v2d(v4d.x / v4d.w, v4d.y / v4d.w); + out += fmt::format(" \n", v2d.x, -v2d.y, 0.02f * 0.5f); + } + + return out; +} + +string footer_svg() +{ + return "\n"; +} \ No newline at end of file diff --git a/gui/export.h b/gui/export.h new file mode 100644 index 0000000..288d750 --- /dev/null +++ b/gui/export.h @@ -0,0 +1,22 @@ +/** \file export.h + \author Wojciech Jarosz +*/ + +#pragma once + +#include "linalg.h" +#include +#include +using namespace linalg::aliases; + +std::string header_eps(int size, int crop, float scale, const float3 &point_color); +std::string footer_eps(); +std::string draw_grid_eps(const float4x4 &mvp, int grid_res); +std::string draw_grids_eps(float4x4 mat, int fgrid_res, int cgrid_res, bool fine_grid, bool coarse_grid, bool bbox); +std::string draw_points_eps(float4x4 mat, int3 dim, const Array2d &points, int2 range); + +std::string header_svg(int size, int crop, float scale, const float3 &point_color); +std::string footer_svg(); +std::string draw_grid_svg(const float4x4 &mvp, int grid_res, const std::string &css_class); +std::string draw_grids_svg(float4x4 mat, int fgrid_res, int cgrid_res, bool fine_grid, bool coarse_grid, bool bbox); +std::string draw_points_svg(float4x4 mat, int3 dim, const Array2d &points, int2 range); \ No newline at end of file From 0f56b77d4078b30192d2c68f72126d23caed506b Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Thu, 30 Nov 2023 22:49:24 +0100 Subject: [PATCH 12/27] eps/svg export improvements --- CMakeLists.txt | 7 +- gui/SampleViewer.cpp | 33 +++---- gui/SampleViewer.h | 2 +- gui/{export.cpp => export_to_file.cpp} | 115 ++++++++++++++----------- gui/{export.h => export_to_file.h} | 8 +- 5 files changed, 88 insertions(+), 77 deletions(-) rename gui/{export.cpp => export_to_file.cpp} (65%) rename gui/{export.h => export_to_file.h} (77%) diff --git a/CMakeLists.txt b/CMakeLists.txt index b8bbe0c..9c19da8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,12 +143,11 @@ endif() cpmaddpackage( NAME hello_imgui - GITHUB_REPOSITORY wkjarosz/hello_imgui - GIT_TAG "90ddefdeadcfef7569b94ea3d9c506841e9eb5ee" + GITHUB_REPOSITORY pthom/hello_imgui + GIT_TAG "c57e60ad898abd79524d073f3801b80d87ce5468" OPTIONS "HELLOIMGUI_WITH_GLFW ON" "HELLOIMGUI_WITH_TEST_ENGINE OFF" - # "HELLOIMGUI_MACOS_NO_BUNDLE ON" ) @@ -238,7 +237,7 @@ hello_imgui_add_app(SamplinSafari gui/SampleViewer.cpp gui/shader.cpp gui/gui_app.cpp - gui/export.cpp + gui/export_to_file.cpp ) set_target_properties(SamplinSafari PROPERTIES diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index 4bd39a4..00b0fc2 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -35,7 +35,7 @@ using std::to_string; #include #include -#include "export.h" +#include "export_to_file.h" #include #include @@ -1060,11 +1060,11 @@ void SampleViewer::draw_text(const int2 &pos, const string &text, const float4 & string SampleViewer::export_XYZ_points(const string &format) { - int size = 900; - int crop = 720; + float radius = map_slider_to_radius(m_radius); + if (m_scale_radius_with_points) + radius *= 64.0f / std::sqrt(m_point_count); - string out = - (format == "eps") ? header_eps(size, crop, 1.f, m_point_color) : header_svg(size, crop, 1.f, m_point_color); + string out = (format == "eps") ? header_eps(m_point_color, 1.f, radius) : header_svg(m_point_color); float4x4 mvp = m_camera[CAMERA_CURRENT].matrix(1.0f); @@ -1081,7 +1081,7 @@ string SampleViewer::export_XYZ_points(const string &format) } out += (format == "eps") ? draw_points_eps(mvp, m_dimension, m_subset_points, get_draw_range()) - : draw_points_svg(mvp, m_dimension, m_subset_points, get_draw_range()); + : draw_points_svg(mvp, m_dimension, m_subset_points, get_draw_range(), radius); out += (format == "eps") ? footer_eps() : footer_svg(); return out; @@ -1089,11 +1089,11 @@ string SampleViewer::export_XYZ_points(const string &format) string SampleViewer::export_points_2d(const string &format, CameraType camera_type, int3 dim) { - int size = 900; - int crop = 720; + float radius = map_slider_to_radius(m_radius); + if (m_scale_radius_with_points) + radius *= 64.0f / std::sqrt(m_point_count); - string out = - (format == "eps") ? header_eps(size, crop, 1.f, m_point_color) : header_svg(size, crop, 1.f, m_point_color); + string out = (format == "eps") ? header_eps(m_point_color, 1.f, radius) : header_svg(m_point_color); float4x4 mvp = m_camera[camera_type].matrix(1.0f); @@ -1107,7 +1107,7 @@ string SampleViewer::export_points_2d(const string &format, CameraType camera_ty { out += draw_grids_svg(mvp, m_point_count, m_samplers[m_sampler]->coarseGridRes(m_point_count), m_show_fine_grid, m_show_coarse_grid, m_show_bbox); - out += draw_points_svg(mvp, dim, m_subset_points, get_draw_range()); + out += draw_points_svg(mvp, dim, m_subset_points, get_draw_range(), radius); } out += (format == "eps") ? footer_eps() : footer_svg(); @@ -1116,12 +1116,13 @@ string SampleViewer::export_points_2d(const string &format, CameraType camera_ty string SampleViewer::export_all_points_2d(const string &format) { - int size = 900 * 108.0f / 720.0f; - int crop = 108; // 720; float scale = 1.0f / (m_num_dimensions - 1); - string out = - (format == "eps") ? header_eps(size, crop, scale, m_point_color) : header_svg(size, crop, scale, m_point_color); + float radius = map_slider_to_radius(m_radius); + if (m_scale_radius_with_points) + radius *= 64.0f / std::sqrt(m_point_count); + + string out = (format == "eps") ? header_eps(m_point_color, scale, radius) : header_svg(m_point_color, scale); float4x4 mvp = m_camera[CAMERA_2D].matrix(1.0f); @@ -1140,7 +1141,7 @@ string SampleViewer::export_all_points_2d(const string &format) { out += draw_grids_svg(mul(mvp, pos), m_point_count, m_samplers[m_sampler]->coarseGridRes(m_point_count), m_show_fine_grid, m_show_coarse_grid, m_show_bbox); - out += draw_points_svg(mul(mvp, pos), {x, y, 2}, m_subset_points, get_draw_range()); + out += draw_points_svg(mul(mvp, pos), {x, y, 2}, m_subset_points, get_draw_range(), radius * scale); } } diff --git a/gui/SampleViewer.h b/gui/SampleViewer.h index e31ebdc..0fc7f79 100644 --- a/gui/SampleViewer.h +++ b/gui/SampleViewer.h @@ -63,7 +63,7 @@ struct CameraParameters { Arcball arcball; float persp_factor = 0.0f; - float zoom = 1.0f, view_angle = 35.0f; + float zoom = 1.0f, view_angle = 30.0f; float dnear = 0.05f, dfar = 1000.0f; float3 eye = float3{0.0f, 0.0f, 2.0f}; float3 center = float3{0.0f, 0.0f, 0.0f}; diff --git a/gui/export.cpp b/gui/export_to_file.cpp similarity index 65% rename from gui/export.cpp rename to gui/export_to_file.cpp index f4b57b2..cfcfc3b 100644 --- a/gui/export.cpp +++ b/gui/export_to_file.cpp @@ -1,23 +1,25 @@ -#include "export.h" +#include "export_to_file.h" #include #include using std::ofstream; using std::string; -string header_eps(int size, int crop, float scale, const float3 &point_color) +string header_eps(const float3 &point_color, float scale, float radius) { string out; + + float page_size = 500.f; + out += fmt::format("%!PS-Adobe-3.0 EPSF-3.0\n"); - out += fmt::format("%%HiResBoundingBox: {} {} {} {}\n", -crop, -crop, crop, crop); - out += fmt::format("%%BoundingBox: {} {} {} {}\n", -crop, -crop, crop, crop); - out += fmt::format("%%CropBox: {} {} {} {}\n", -crop, -crop, crop, crop); - out += fmt::format("gsave {} {} scale\n", size, size); - out += fmt::format("/radius {{ {} }} def %define variable for point radius\n", 0.02f * scale); + out += fmt::format("%%HiResBoundingBox: {} {} {} {}\n", -page_size, -page_size, page_size, page_size); + out += fmt::format("%%BoundingBox: {} {} {} {}\n", -page_size, -page_size, page_size, page_size); + out += fmt::format("%%CropBox: {} {} {} {}\n", -page_size, -page_size, page_size, page_size); + out += fmt::format("/radius {{ {} }} def %define variable for point radius\n", radius * 0.3f * scale); out += fmt::format("/p {{ radius 0 360 arc closepath fill }} def %define point command\n"); - out += fmt::format("/blw {} def %define variable for bounding box linewidth\n", 0.020f * scale); - out += fmt::format("/clw {} def %define variable for coarse linewidth\n", 0.01f * scale); - out += fmt::format("/flw {} def %define variable for fine linewidth\n", 0.005f * scale); + out += fmt::format("/blw {} def %define variable for bounding box linewidth\n", 2.f * scale); + out += fmt::format("/clw {} def %define variable for coarse linewidth\n", 2.f * scale); + out += fmt::format("/flw {} def %define variable for fine linewidth\n", 2.f * scale); out += fmt::format("/pfc {{ {} {} {} }} def %define variable for point fill color\n", point_color.x, point_color.y, point_color.z); out += fmt::format("/blc {} def %define variable for bounding box color\n", 0.0f); @@ -29,11 +31,14 @@ string header_eps(int size, int crop, float scale, const float3 &point_color) string footer_eps() { - return "grestore\n"; + // return "grestore\n"; + return "\n"; } string draw_grid_eps(const float4x4 &mvp, int grid_res) { + float page_size = 500.f; + float4 vA4d, vB4d; float2 vA, vB; @@ -42,17 +47,16 @@ string draw_grid_eps(const float4x4 &mvp, int grid_res) string out; - // draw the bounding box - // if (grid_res == 1) + // draw the outer border of the grid { float4 c004d = mul(mvp, float4{0.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); float4 c104d = mul(mvp, float4{1.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); float4 c114d = mul(mvp, float4{1.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); float4 c014d = mul(mvp, float4{0.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); - float2 c00 = float2(c004d.x / c004d.w, c004d.y / c004d.w); - float2 c10 = float2(c104d.x / c104d.w, c104d.y / c104d.w); - float2 c11 = float2(c114d.x / c114d.w, c114d.y / c114d.w); - float2 c01 = float2(c014d.x / c014d.w, c014d.y / c014d.w); + float2 c00 = float2(c004d.x / c004d.w, c004d.y / c004d.w) * page_size; + float2 c10 = float2(c104d.x / c104d.w, c104d.y / c104d.w) * page_size; + float2 c11 = float2(c114d.x / c114d.w, c114d.y / c114d.w) * page_size; + float2 c01 = float2(c014d.x / c014d.w, c014d.y / c014d.w) * page_size; out += fmt::format(R"(newpath {} {} moveto @@ -64,6 +68,7 @@ closepath stroke c00.x, c00.y, c10.x, c10.y, c11.x, c11.y, c01.x, c01.y); } + // draw the inner lines of the grid for (int i = 1; i <= grid_res - 1; i++) { // draw horizontal lines @@ -73,8 +78,8 @@ closepath stroke vA4d = mul(mvp, float4{j * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f}); vB4d = mul(mvp, float4{(j + 1) * fine_scale - 0.5f, i * coarse_scale - 0.5f, 0.0f, 1.0f}); - vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); - vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); + vA = float2{vA4d.x / vA4d.w, vA4d.y / vA4d.w} * page_size; + vB = float2{vB4d.x / vB4d.w, vB4d.y / vB4d.w} * page_size; out += fmt::format(" {} {} {:s}\n", vA.x, vA.y, (j == 0) ? "moveto" : "lineto"); out += fmt::format(" {} {} lineto\n", vB.x, vB.y); @@ -88,8 +93,8 @@ closepath stroke vA4d = mul(mvp, float4{i * coarse_scale - 0.5f, j * fine_scale - 0.5f, 0.0f, 1.0f}); vB4d = mul(mvp, float4{i * coarse_scale - 0.5f, (j + 1) * fine_scale - 0.5f, 0.0f, 1.0f}); - vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); - vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); + vA = float2{vA4d.x / vA4d.w, vA4d.y / vA4d.w} * page_size; + vB = float2{vB4d.x / vB4d.w, vB4d.y / vB4d.w} * page_size; out += fmt::format(" {} {} {:s}\n", vA.x, vA.y, (j == 0) ? "moveto" : "lineto"); out += fmt::format(" {} {} lineto\n", vB.x, vB.y); @@ -136,26 +141,30 @@ string draw_points_eps(float4x4 mat, int3 dim, const Array2d &points, int { string out; + float page_size = 500.f; + // Render the point set out += "% Draw points \n"; out += "pfc setrgbcolor %fill color for points\n"; for (int i = range.x; i < range.x + range.y; i++) { - float4 v4d = mul(mat, float4{points(i, dim.x), points(i, dim.y), points(i, dim.z), 1.0f}); - float2 v2d(v4d.x / v4d.w, v4d.y / v4d.w); + auto v4d = mul(mat, float4{points(i, dim.x), points(i, dim.y), points(i, dim.z), 1.0f}); + auto v2d = float2{v4d.x / v4d.w, v4d.y / v4d.w} * page_size; out += fmt::format("{} {} p\n", v2d.x, v2d.y); } return out; } -string header_svg(int size, int crop, float scale, const float3 &point_color) +string header_svg(const float3 &point_color, float scale) { string out; scale *= 0.5f; + float page_size = 500.f; + out += fmt::format(R"_( - )_", - 1000, -1000, -1, -1, 2, 2, 0.02f * scale, int(point_color.x * 255), int(point_color.y * 255), - int(point_color.z * 255), 0.005f * scale, int(0.9f * 255), int(0.9f * 255), int(0.9f * 255), - 0.01f * scale, int(0.5f * 255), int(0.5f * 255), int(0.5f * 255), 0.02f * scale, 0, 0, 0, 1, 1); + 1000, 1000, -page_size, -page_size, 2 * page_size, 2 * page_size, int(point_color.x * 255), + int(point_color.y * 255), int(point_color.z * 255), 2.f * scale, 2.f * scale, 2.f * scale); return out; } @@ -205,43 +214,44 @@ string draw_grid_svg(const float4x4 &mvp, int grid_res, const string &css_class) float4 vA4d, vB4d; float2 vA, vB; - float scale = 1.f / grid_res; + float scale = 1.f / grid_res; + float page_size = 500.f; string out; - // draw the bounding box - // if (grid_res == 1) + // draw the outer border of the grid { float4 c004d = mul(mvp, float4{0.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); float4 c104d = mul(mvp, float4{1.f - 0.5f, 0.f - 0.5f, 0.f, 1.f}); float4 c114d = mul(mvp, float4{1.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); float4 c014d = mul(mvp, float4{0.f - 0.5f, 1.f - 0.5f, 0.f, 1.f}); - float2 c00 = float2(c004d.x / c004d.w, c004d.y / c004d.w); - float2 c10 = float2(c104d.x / c104d.w, c104d.y / c104d.w); - float2 c11 = float2(c114d.x / c114d.w, c114d.y / c114d.w); - float2 c01 = float2(c014d.x / c014d.w, c014d.y / c014d.w); + float2 c00 = float2{c004d.x / c004d.w, c004d.y / c004d.w} * float2{page_size, -page_size}; + float2 c10 = float2{c104d.x / c104d.w, c104d.y / c104d.w} * float2{page_size, -page_size}; + float2 c11 = float2{c114d.x / c114d.w, c114d.y / c114d.w} * float2{page_size, -page_size}; + float2 c01 = float2{c014d.x / c014d.w, c014d.y / c014d.w} * float2{page_size, -page_size}; - out += fmt::format(R"( )", c00.x, -c00.y, c10.x, -c10.y, - c11.x, -c11.y, c01.x, -c01.y, css_class); + out += fmt::format(R"( )", c00.x, c00.y, c10.x, c10.y, + c11.x, c11.y, c01.x, c01.y, css_class); out += "\n"; } + // draw the inner lines of the grid for (int i = 1; i <= grid_res - 1; i++) { // draw horizontal lines vA4d = mul(mvp, float4{0.f - 0.5f, i * scale - 0.5f, 0.0f, 1.0f}); vB4d = mul(mvp, float4{1.f - 0.5f, i * scale - 0.5f, 0.0f, 1.0f}); - vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); - vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); - out += fmt::format(R"( )", vA.x, -vA.y, vB.x, -vB.y, css_class); + vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w) * float2{page_size, -page_size}; + vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w) * float2{page_size, -page_size}; + out += fmt::format(R"( )", vA.x, vA.y, vB.x, vB.y, css_class); out += "\n"; // draw vertical lines vA4d = mul(mvp, float4{i * scale - 0.5f, 0.f - 0.5f, 0.0f, 1.0f}); vB4d = mul(mvp, float4{i * scale - 0.5f, 1.f - 0.5f, 0.0f, 1.0f}); - vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w); - vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w); - out += fmt::format(R"( )", vA.x, -vA.y, vB.x, -vB.y, css_class); + vA = float2(vA4d.x / vA4d.w, vA4d.y / vA4d.w) * float2{page_size, -page_size}; + vB = float2(vB4d.x / vB4d.w, vB4d.y / vB4d.w) * float2{page_size, -page_size}; + out += fmt::format(R"( )", vA.x, vA.y, vB.x, vB.y, css_class); out += "\n"; } return out; @@ -262,15 +272,16 @@ string draw_grids_svg(float4x4 mat, int fgrid_res, int cgrid_res, bool fine_grid return out; } -string draw_points_svg(float4x4 mat, int3 dim, const Array2d &points, int2 range) +string draw_points_svg(float4x4 mat, int3 dim, const Array2d &points, int2 range, float radius) { string out; + float page_size = 500.f; for (int i = range.x; i < range.x + range.y; i++) { - float4 v4d = mul(mat, float4{points(i, dim.x), points(i, dim.y), points(i, dim.z), 1.0f}); - float2 v2d(v4d.x / v4d.w, v4d.y / v4d.w); - out += fmt::format(" \n", v2d.x, -v2d.y, 0.02f * 0.5f); + auto v4d = mul(mat, float4{points(i, dim.x), points(i, dim.y), points(i, dim.z), 1.0f}); + auto v2d = float2{v4d.x / v4d.w, v4d.y / v4d.w} * float2{page_size, -page_size}; + out += fmt::format(" \n", v2d.x, v2d.y, radius * 0.3f); } return out; @@ -278,5 +289,5 @@ string draw_points_svg(float4x4 mat, int3 dim, const Array2d &points, int string footer_svg() { - return "\n"; + return ""; } \ No newline at end of file diff --git a/gui/export.h b/gui/export_to_file.h similarity index 77% rename from gui/export.h rename to gui/export_to_file.h index 288d750..ba732c1 100644 --- a/gui/export.h +++ b/gui/export_to_file.h @@ -1,4 +1,4 @@ -/** \file export.h +/** \file export_to_file.h \author Wojciech Jarosz */ @@ -9,14 +9,14 @@ #include using namespace linalg::aliases; -std::string header_eps(int size, int crop, float scale, const float3 &point_color); +std::string header_eps(const float3 &point_color, float scale, float radius); std::string footer_eps(); std::string draw_grid_eps(const float4x4 &mvp, int grid_res); std::string draw_grids_eps(float4x4 mat, int fgrid_res, int cgrid_res, bool fine_grid, bool coarse_grid, bool bbox); std::string draw_points_eps(float4x4 mat, int3 dim, const Array2d &points, int2 range); -std::string header_svg(int size, int crop, float scale, const float3 &point_color); +std::string header_svg(const float3 &point_color, float scale = 1.f); std::string footer_svg(); std::string draw_grid_svg(const float4x4 &mvp, int grid_res, const std::string &css_class); std::string draw_grids_svg(float4x4 mat, int fgrid_res, int cgrid_res, bool fine_grid, bool coarse_grid, bool bbox); -std::string draw_points_svg(float4x4 mat, int3 dim, const Array2d &points, int2 range); \ No newline at end of file +std::string draw_points_svg(float4x4 mat, int3 dim, const Array2d &points, int2 range, float radius); \ No newline at end of file From fdc9503c1dcce2494b21e4ff669aa63251a88140 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Fri, 1 Dec 2023 00:59:29 +0100 Subject: [PATCH 13/27] using ImGui::* instead of glfw* + other cleanup --- gui/SampleViewer.cpp | 108 ++++++++++++++++--------------------------- gui/SampleViewer.h | 12 ----- gui/gui_app.cpp | 2 +- gui/shader.cpp | 21 ++++----- gui/shader.h | 15 +++--- gui/timer.h | 49 ++++++++++++++++++++ 6 files changed, 106 insertions(+), 101 deletions(-) create mode 100644 gui/timer.h diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index 00b0fc2..9c62bbd 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -49,7 +49,7 @@ using std::to_string; #include #endif -#include "GLFW/glfw3.h" +#include "timer.h" namespace ImGui { @@ -405,8 +405,6 @@ void SampleViewer::draw_gui() float4(1.0f, 1.0f, 1.0f, 0.75f), m_regular[11], TextAlign_CENTER | TextAlign_TOP); } } - - process_hotkeys(); } void SampleViewer::draw_editor() @@ -649,6 +647,8 @@ void SampleViewer::draw_editor() ImGui::Dummy({0, HelloImGui::EmSize(0.25f)}); } + + process_hotkeys(); } void SampleViewer::process_hotkeys() @@ -721,15 +721,15 @@ void SampleViewer::process_hotkeys() (ImGui::IsKeyPressed(ImGuiKey_UpArrow) || ImGui::IsKeyPressed(ImGuiKey_DownArrow))) change_offset_type( mod((int)oa->offsetType() + (ImGui::IsKeyPressed(ImGuiKey_DownArrow) ? 1 : -1), (int)NUM_OFFSET_TYPES)); - else if (ImGui::IsKeyPressed(ImGuiKey_1)) + else if (ImGui::IsKeyPressed(ImGuiKey_1, false)) set_view(CAMERA_XY); - else if (ImGui::IsKeyPressed(ImGuiKey_2)) + else if (ImGui::IsKeyPressed(ImGuiKey_2, false)) set_view(CAMERA_YZ); - else if (ImGui::IsKeyPressed(ImGuiKey_3)) + else if (ImGui::IsKeyPressed(ImGuiKey_3, false)) set_view(CAMERA_XZ); - else if (ImGui::IsKeyPressed(ImGuiKey_4)) + else if (ImGui::IsKeyPressed(ImGuiKey_4, false)) set_view(CAMERA_CURRENT); - else if (ImGui::IsKeyPressed(ImGuiKey_0)) + else if (ImGui::IsKeyPressed(ImGuiKey_0, false)) set_view(CAMERA_2D); else if (ImGui::IsKeyPressed(ImGuiKey_P)) m_show_1d_projections = !m_show_1d_projections; @@ -831,53 +831,6 @@ void SampleViewer::update_GPU_grids() m_grid_shader->set_buffer("position", positions); } -bool SampleViewer::mouse_motion_event(const int2 &p, const int2 &rel, int button, int modifiers) -{ - if (m_camera[CAMERA_NEXT].arcball.motion(p - m_viewport_pos)) - { - draw(); - return true; - } - - return false; -} - -bool SampleViewer::mouse_button_event(const int2 &p, int button, bool down, int modifiers) -{ - if (button == GLFW_MOUSE_BUTTON_1) - { - if (down) - { - m_mouse_down = true; - // on mouse down we start switching to a perspective camera - // and start recording the arcball rotation in CAMERA_NEXT - set_view(CAMERA_CURRENT); - m_camera[CAMERA_NEXT].arcball.button(p - m_viewport_pos, down); - m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; - } - else - { - m_mouse_down = false; - m_camera[CAMERA_NEXT].arcball.button(p - m_viewport_pos, down); - // since the time between mouse down and up could be shorter - // than the animation duration, we override the previous - // camera's arcball on mouse up to complete the animation - m_camera[CAMERA_PREVIOUS].arcball = m_camera[CAMERA_NEXT].arcball; - m_camera[CAMERA_PREVIOUS].camera_type = m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; - } - return true; - } - - return false; -} - -bool SampleViewer::scroll_event(const int2 &p, const float2 &rel) -{ - m_camera[CAMERA_NEXT].zoom = std::max(0.001, m_camera[CAMERA_NEXT].zoom * pow(1.1, rel.y)); - draw(); - return true; -} - void SampleViewer::draw_points(const float4x4 &mvp, const float3 &color) { // Render the point set @@ -989,6 +942,32 @@ void SampleViewer::draw() { clear_and_setup_viewport(); + // process camera movement + auto io = ImGui::GetIO(); + if (!io.WantCaptureMouse) + { + m_camera[CAMERA_NEXT].zoom = std::max(0.001, m_camera[CAMERA_NEXT].zoom * pow(1.1, io.MouseWheel)); + if (io.MouseClicked[0]) + { + // on mouse down we start switching to a perspective camera + // and start recording the arcball rotation in CAMERA_NEXT + set_view(CAMERA_CURRENT); + m_camera[CAMERA_NEXT].arcball.button(int2{io.MousePos} - m_viewport_pos, io.MouseDown[0]); + m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; + } + if (io.MouseReleased[0]) + { + m_camera[CAMERA_NEXT].arcball.button(int2{io.MousePos} - m_viewport_pos, io.MouseDown[0]); + // since the time between mouse down and up could be shorter + // than the animation duration, we override the previous + // camera's arcball on mouse up to complete the animation + m_camera[CAMERA_PREVIOUS].arcball = m_camera[CAMERA_NEXT].arcball; + m_camera[CAMERA_PREVIOUS].camera_type = m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; + } + + m_camera[CAMERA_NEXT].arcball.motion(int2{io.MousePos} - m_viewport_pos); + } + // update/move the camera update_current_camera(); @@ -1151,7 +1130,7 @@ string SampleViewer::export_all_points_2d(const string &format) } void SampleViewer::set_view(CameraType view) { - m_animate_start_time = (float)glfwGetTime(); + m_animate_start_time = (float)ImGui::GetTime(); m_camera[CAMERA_PREVIOUS] = m_camera[CAMERA_CURRENT]; m_camera[CAMERA_NEXT] = m_camera[view]; m_camera[CAMERA_NEXT].persp_factor = (view == CAMERA_CURRENT) ? 1.0f : 0.0f; @@ -1168,7 +1147,7 @@ void SampleViewer::update_current_camera() CameraParameters &camera1 = m_camera[CAMERA_NEXT]; CameraParameters &camera = m_camera[CAMERA_CURRENT]; - float time_now = (float)glfwGetTime(); + float time_now = (float)ImGui::GetTime(); float time_diff = (m_animate_start_time != 0.0f) ? (time_now - m_animate_start_time) : 1.0f; // interpolate between the "perspectiveness" at the previous keyframe, @@ -1188,7 +1167,7 @@ void SampleViewer::update_current_camera() // if we are dragging the mouse, then just use the current arcball // rotation, otherwise, interpolate between the previous and next camera // orientations - if (m_mouse_down) + if (ImGui::GetIO().MouseDown[0]) camera.arcball = camera1.arcball; else camera.arcball.set_state(qslerp(camera0.arcball.state(), camera1.arcball.state(), t)); @@ -1196,7 +1175,7 @@ void SampleViewer::update_current_camera() void SampleViewer::generate_points() { - float time0 = (float)glfwGetTime(); + Timer timer; Sampler *generator = m_samplers[m_sampler]; if (generator->randomized() != m_randomize) generator->setRandomized(m_randomize); @@ -1206,25 +1185,20 @@ void SampleViewer::generate_points() int num_pts = generator->setNumSamples(m_target_point_count); m_point_count = num_pts > 0 ? num_pts : m_target_point_count; - float time1 = (float)glfwGetTime(); - m_time1 = ((time1 - time0) * 1000.0f); + m_time1 = timer.elapsed(); m_points.resize(m_point_count, m_num_dimensions); m_3d_points.resize(m_point_count); - time1 = (float)glfwGetTime(); + timer.reset(); for (int i = 0; i < m_point_count; ++i) { vector r(m_num_dimensions, 0.5f); generator->sample(r.data(), i); for (int j = 0; j < m_points.sizeY(); ++j) - { m_points(i, j) = r[j] - 0.5f; - // HelloImGui::Log(HelloImGui::LogLevel::Debug, "%f", m_points(i, j)); - } } - float time2 = (float)glfwGetTime(); - m_time2 = ((time2 - time1) * 1000.0f); + m_time2 = timer.elapsed(); } void SampleViewer::populate_point_subset() diff --git a/gui/SampleViewer.h b/gui/SampleViewer.h index 0fc7f79..918286d 100644 --- a/gui/SampleViewer.h +++ b/gui/SampleViewer.h @@ -91,21 +91,10 @@ class SampleViewer : public GUIApp SampleViewer(); virtual ~SampleViewer(); - void mouse_motion_event(const float2 &pos); - void initialize_GL() override; void draw() override; void draw_gui(); - bool mouse_button_event(const int2 &p, int button, bool down, int modifiers) override; - bool mouse_motion_event(const int2 &p, const int2 &rel, int button, int modifiers) override; - bool scroll_event(const int2 &p, const float2 &rel) override; - - // bool keyboard_event(int key, int scancode, int action, int modifiers) override; - // bool resize_event(const int2 &size) override; - // bool focus_event(bool focused) override; - // bool maximize_event(bool maximized) override; - private: string export_XYZ_points(const string &format); string export_points_2d(const string &format, CameraType camera, int3 dim); @@ -152,7 +141,6 @@ class SampleViewer : public GUIApp int2 m_viewport_pos, m_viewport_pos_GL, m_viewport_size; float m_animate_start_time = 0.0f; - bool m_mouse_down = false; bool m_subset_by_index = false; int m_first_draw_point = 0; diff --git a/gui/gui_app.cpp b/gui/gui_app.cpp index 747f289..0ad873f 100644 --- a/gui/gui_app.cpp +++ b/gui/gui_app.cpp @@ -244,7 +244,7 @@ void GUIApp::resize_callback_event() m_last_interaction = glfwGetTime(); -#if defined(NANOGUI_USE_METAL) +#if defined(HELLOIMGUI_USE_METAL) if (m_depth_stencil_texture) m_depth_stencil_texture->resize(fb_size); #endif diff --git a/gui/shader.cpp b/gui/shader.cpp index ce3ec8d..901fa53 100644 --- a/gui/shader.cpp +++ b/gui/shader.cpp @@ -1,11 +1,8 @@ #include "shader.h" #include "hello_imgui/hello_imgui.h" -#ifndef __EMSCRIPTEN__ -#include -#else -#include -#endif +// hello_imgui_include_opengl.h provides a cross-platform way to include OpenGL headers +#include "hello_imgui/hello_imgui_include_opengl.h" #if !defined(GL_HALF_FLOAT) #define GL_HALF_FLOAT 0x140B @@ -167,7 +164,7 @@ Shader::Shader(const std::string &name, const std::string &vertex_shader, const buf.shape[0] = 4; break; -#if defined(NANOGUI_USE_OPENGL) +#if defined(HELLOIMGUI_USE_GLAD) case GL_UNSIGNED_INT: buf.dtype = VariableType::UInt32; buf.ndim = 0; @@ -277,7 +274,7 @@ Shader::Shader(const std::string &name, const std::string &vertex_shader, const buf.type = IndexBuffer; buf.dtype = VariableType::UInt32; -#if defined(NANOGUI_USE_OPENGL) +#if defined(HELLOIMGUI_USE_GLAD) CHK(glGenVertexArrays(1, &m_vertex_array_handle)); m_uses_point_size = vertex_shader.find("gl_PointSize") != std::string::npos; @@ -287,7 +284,7 @@ Shader::Shader(const std::string &name, const std::string &vertex_shader, const Shader::~Shader() { CHK(glDeleteProgram(m_shader_handle)); -#if defined(NANOGUI_USE_OPENGL) +#if defined(HELLOIMGUI_USE_GLAD) CHK(glDeleteVertexArrays(1, &m_vertex_array_handle)); #endif } @@ -376,7 +373,7 @@ void Shader::begin() CHK(glUseProgram(m_shader_handle)); -#if defined(NANOGUI_USE_OPENGL) +#if defined(HELLOIMGUI_USE_GLAD) CHK(glBindVertexArray(m_vertex_array_handle)); #endif @@ -396,7 +393,7 @@ void Shader::begin() GLuint buffer_id = (GLuint)((uintptr_t)buf.buffer); GLenum gl_type = 0; -#if defined(NANOGUI_USE_OPENGL) +#if defined(HELLOIMGUI_USE_GLAD) if (!buf.dirty && buf.type != VertexTexture && buf.type != FragmentTexture) continue; #endif @@ -477,7 +474,7 @@ void Shader::begin() } break; -#if defined(NANOGUI_USE_GLES) +#if defined(HELLOIMGUI_USE_GLES2) case VariableType::UInt32: #endif case VariableType::Int32: @@ -501,7 +498,7 @@ void Shader::begin() } break; -#if defined(NANOGUI_USE_OPENGL) +#if !defined(HELLOIMGUI_USE_GLES2) case VariableType::UInt32: { const uint32_t *v = (const uint32_t *)buf.buffer; diff --git a/gui/shader.h b/gui/shader.h index 16464a7..7f6a87b 100644 --- a/gui/shader.h +++ b/gui/shader.h @@ -16,9 +16,6 @@ #pragma once -#define NANOGUI_USE_OPENGL -// #define NANOGUI_USE_GLES - #include "linalg.h" #include "traits.h" #include @@ -197,19 +194,19 @@ class Shader */ void draw_array(PrimitiveType primitive_type, size_t offset, size_t count, bool indexed = false); -#if defined(NANOGUI_USE_OPENGL) || defined(NANOGUI_USE_GLES) +#if defined(HELLOIMGUI_HAS_OPENGL) uint32_t shader_handle() const { return m_shader_handle; } -#elif defined(NANOGUI_USE_METAL) +#elif defined(HELLOIMGUI_USE_METAL) void *pipeline_state() const { return m_pipeline_state; } #endif -#if defined(NANOGUI_USE_OPENGL) +#if defined(HELLOIMGUI_USE_GLAD) uint32_t vertex_array_handle() const { return m_vertex_array_handle; @@ -253,13 +250,13 @@ class Shader std::unordered_map m_buffers; BlendMode m_blend_mode; -#if defined(NANOGUI_USE_OPENGL) || defined(NANOGUI_USE_GLES) +#if defined(HELLOIMGUI_HAS_OPENGL) uint32_t m_shader_handle = 0; -#if defined(NANOGUI_USE_OPENGL) +#if defined(HELLOIMGUI_USE_GLAD) uint32_t m_vertex_array_handle = 0; bool m_uses_point_size = false; #endif -#elif defined(NANOGUI_USE_METAL) +#elif defined(HELLOIMGUI_USE_METAL) void *m_pipeline_state; #endif }; diff --git a/gui/timer.h b/gui/timer.h new file mode 100644 index 0000000..3a0a227 --- /dev/null +++ b/gui/timer.h @@ -0,0 +1,49 @@ +// +// Copyright (C) Wojciech Jarosz . All rights reserved. +// Use of this source code is governed by a BSD-style license that can +// be found in the LICENSE.txt file. +// + +#pragma once + +#include + +//! Simple timer with millisecond precision +/*! + This class is convenient for collecting performance data +*/ +class Timer +{ +public: + //! Create a new timer and reset it + Timer() + { + reset(); + } + + //! Reset the timer to the current time + void reset() + { + start = std::chrono::system_clock::now(); + } + + //! Return the number of milliseconds elapsed since the timer was last reset + double elapsed() const + { + auto now = std::chrono::system_clock::now(); + auto duration = std::chrono::duration_cast(now - start); + return (double)duration.count(); + } + + //! Return the number of milliseconds elapsed since the timer was last reset and then reset it + double lap() + { + auto now = std::chrono::system_clock::now(); + auto duration = std::chrono::duration_cast(now - start); + start = now; + return (double)duration.count(); + } + +private: + std::chrono::system_clock::time_point start; +}; From 8fbfe03daa6ebf09b019c82193e9e7d08861162a Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Fri, 1 Dec 2023 02:21:14 +0100 Subject: [PATCH 14/27] removing glfw and gui_app base class --- CMakeLists.txt | 3 +- gui/SampleViewer.cpp | 52 ++++---- gui/SampleViewer.h | 18 ++- gui/gui_app.cpp | 298 ------------------------------------------- gui/gui_app.h | 81 ------------ gui/shader.cpp | 4 +- 6 files changed, 44 insertions(+), 412 deletions(-) delete mode 100644 gui/gui_app.cpp delete mode 100644 gui/gui_app.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c19da8..c5ef1e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -222,7 +222,7 @@ set_target_properties(samplerlib PROPERTIES # Now build the Samplin' Safari viewer app string(TIMESTAMP YEAR "%Y") -set(output_name "Samplin Safari") +set(output_name "SamplinSafari") 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}) @@ -236,7 +236,6 @@ set(HELLO_IMGUI_BUNDLE_ICON_FILE icon.icns) hello_imgui_add_app(SamplinSafari gui/SampleViewer.cpp gui/shader.cpp - gui/gui_app.cpp gui/export_to_file.cpp ) diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index 9c62bbd..a05f2db 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -16,6 +16,7 @@ using std::ofstream; using std::to_string; #include "hello_imgui/hello_imgui.h" +#include "hello_imgui/hello_imgui_include_opengl.h" // cross-platform way to include OpenGL headers #include "imgui.h" #include "imgui_internal.h" #include "portable-file-dialogs.h" @@ -36,6 +37,7 @@ using std::to_string; #include #include "export_to_file.h" +#include "timer.h" #include #include @@ -43,14 +45,6 @@ using std::to_string; #include #include -#ifndef __EMSCRIPTEN__ -#include -#else -#include -#endif - -#include "timer.h" - namespace ImGui { @@ -144,7 +138,16 @@ static float4x4 layout_2d_matrix(int numDims, int dim_x, int dim_y) scaling_matrix(float3{cellSize, cellSize, 1})); } -SampleViewer::SampleViewer() : GUIApp() +// scaled_display_size() is a helper function that returns the size of the window in pixels: +// for retina displays, io.DisplaySize is the size of the window in points (logical pixels) +// but we need the size in pixels. So we scale io.DisplaySize by io.DisplayFramebufferScale +static int2 scaled_display_size() +{ + auto &io = ImGui::GetIO(); + return int2{io.DisplaySize.x * io.DisplayFramebufferScale.x, io.DisplaySize.y * io.DisplayFramebufferScale.y}; +} + +SampleViewer::SampleViewer() { m_samplers.push_back(new Random(m_num_dimensions)); m_samplers.push_back(new Jittered(1, 1, m_jitter * 0.01f)); @@ -319,7 +322,9 @@ SampleViewer::SampleViewer() : GUIApp() ImGui::ToggleButton(ICON_FA_TERMINAL, &m_params.dockingParams.dockableWindows[1].isVisible); }; - m_params.callbacks.ShowGui = [this]() { draw_gui(); }; + m_params.callbacks.ShowGui = [this]() { draw_gui(); }; + m_params.callbacks.PostInit = [this]() { initialize_GL(); }; + m_params.callbacks.CustomBackground = [this]() { draw_scene(); }; } SampleViewer::~SampleViewer() @@ -343,16 +348,18 @@ int2 SampleViewer::get_draw_range() const void SampleViewer::draw_gui() { + auto &io = ImGui::GetIO(); + m_viewport_pos_GL = m_viewport_pos = {0, 0}; - m_viewport_size = m_fbsize; + m_viewport_size = io.DisplaySize; if (auto id = m_params.dockingParams.dockSpaceIdFromName("MainDockSpace")) { auto central_node = ImGui::DockBuilderGetCentralNode(*id); m_viewport_size = int2{int(central_node->Size.x), int(central_node->Size.y)}; m_viewport_pos = int2{int(central_node->Pos.x), int(central_node->Pos.y)}; // flip y coordinates between ImGui and OpenGL screen coordinates - m_viewport_pos_GL = int2{int(central_node->Pos.x), - int(ImGui::GetIO().DisplaySize.y - (central_node->Pos.y + central_node->Size.y))}; + m_viewport_pos_GL = + int2{int(central_node->Pos.x), int(io.DisplaySize.y - (central_node->Pos.y + central_node->Size.y))}; } float radius = map_slider_to_radius(m_radius); @@ -810,9 +817,6 @@ void SampleViewer::update_GPU_points(bool regenerate) points2D[plot_index * m_subset_count + i] = float3{m_subset_points(i, x), m_subset_points(i, y), 0.5f}; m_point_2d_shader->set_buffer("position", points2D); - - // m_point_count_box->set_value(m_point_count); - // m_point_count_slider->set_value(mapCount2Slider(m_point_count)); } void SampleViewer::update_GPU_grids() @@ -915,18 +919,20 @@ void SampleViewer::clear_and_setup_viewport() try { // account for dpi factor on retina screens - float scale = pixel_ratio(); + auto &io = ImGui::GetIO(); const float4 background_color{0.f, 0.f, 0.f, 1.f}; // first clear the entire window with the background color - CHK(glViewport(0, 0, m_fbsize.x, m_fbsize.y)); + auto display_size = scaled_display_size(); + CHK(glViewport(0, 0, display_size.x, display_size.y)); CHK(glClearColor(background_color[0], background_color[1], background_color[2], background_color[3])); - CHK(glClear(GL_COLOR_BUFFER_BIT)); + CHK(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); // now set up a new viewport for the rest of the drawing - CHK(glViewport(m_viewport_pos_GL.x * scale, m_viewport_pos_GL.y * scale, m_viewport_size.x * scale, - m_viewport_size.y * scale)); + CHK(glViewport( + m_viewport_pos_GL.x * io.DisplayFramebufferScale.x, m_viewport_pos_GL.y * io.DisplayFramebufferScale.y, + m_viewport_size.x * io.DisplayFramebufferScale.x, m_viewport_size.y * io.DisplayFramebufferScale.y)); // inform the arcballs of the viewport size for (int i = 0; i < NUM_CAMERA_TYPES; ++i) @@ -938,12 +944,12 @@ void SampleViewer::clear_and_setup_viewport() } } -void SampleViewer::draw() +void SampleViewer::draw_scene() { clear_and_setup_viewport(); // process camera movement - auto io = ImGui::GetIO(); + auto &io = ImGui::GetIO(); if (!io.WantCaptureMouse) { m_camera[CAMERA_NEXT].zoom = std::max(0.001, m_camera[CAMERA_NEXT].zoom * pow(1.1, io.MouseWheel)); diff --git a/gui/SampleViewer.h b/gui/SampleViewer.h index 918286d..2705d37 100644 --- a/gui/SampleViewer.h +++ b/gui/SampleViewer.h @@ -34,7 +34,8 @@ using namespace linalg::aliases; } #include "arcball.h" -#include "gui_app.h" +// #include "gui_app.h" +#include "hello_imgui/hello_imgui.h" #include "shader.h" #include #include @@ -85,15 +86,19 @@ enum TextAlign : int TextAlign_BOTTOM = 1 << 5, // Align text vertically to bottom. }; -class SampleViewer : public GUIApp +class SampleViewer { public: SampleViewer(); virtual ~SampleViewer(); - void initialize_GL() override; - void draw() override; + void initialize_GL(); + void draw_scene(); void draw_gui(); + void run() + { + HelloImGui::Run(m_params); + } private: string export_XYZ_points(const string &format); @@ -152,6 +157,7 @@ class SampleViewer : public GUIApp map m_regular, m_bold; // regular and bold fonts at various sizes - float m_time1 = 0.f, m_time2 = 0.f; - float3 m_point_color = {0.9f, 0.55f, 0.1f}; + float m_time1 = 0.f, m_time2 = 0.f; + float3 m_point_color = {0.9f, 0.55f, 0.1f}; + HelloImGui::RunnerParams m_params; }; diff --git a/gui/gui_app.cpp b/gui/gui_app.cpp deleted file mode 100644 index 0ad873f..0000000 --- a/gui/gui_app.cpp +++ /dev/null @@ -1,298 +0,0 @@ - -#include "gui_app.h" -#include "GLFW/glfw3.h" -#include - -#ifdef __EMSCRIPTEN__ -#include -#include -#endif - -GUIApp *GUIApp::s_instance = nullptr; - -// Calculate pixel ratio for hi-dpi devices. -static float get_pixel_ratio(GLFWwindow *window) -{ -#ifdef __EMSCRIPTEN__ - return emscripten_get_device_pixel_ratio(); -#else - float xscale, yscale; - glfwGetWindowContentScale(window, &xscale, &yscale); - return xscale; -#endif -} - -static GUIApp *get_app(GLFWwindow *w) -{ - if (auto p = glfwGetWindowUserPointer(w)) - return static_cast(glfwGetWindowUserPointer(w)); - else - throw std::runtime_error("Expected the GLFW user pointer to be set."); -} - -GUIApp::GUIApp() -{ - m_last_interaction = glfwGetTime(); - s_instance = this; - m_params.callbacks.PostInit = [this]() - { - register_callbacks(); - initialize_GL(); - }; - m_params.callbacks.CustomBackground = [this]() { draw(); }; -} - -GUIApp::~GUIApp() -{ -} - -void GUIApp::initialize_GL() -{ -} - -void GUIApp::register_callbacks() -{ - auto w = static_cast(m_params.backendPointers.glfwWindow); - - glfwGetWindowSize(w, &m_size[0], &m_size[1]); - glfwGetFramebufferSize(w, &m_fbsize[0], &m_fbsize[1]); - m_pixel_ratio = get_pixel_ratio(w); - resize_callback_event(); - - // store the GUIApp pointer so we can grab it in the callbacks - glfwSetWindowUserPointer(w, this); - - // Propagate GLFW events to the appropriate virtual functions - glfwSetCursorPosCallback(w, - [](GLFWwindow *w, double xf, double yf) - { - if (ImGui::GetIO().WantCaptureMouse) - return; - - get_app(w)->cursor_pos_event(xf, yf); - }); - - glfwSetMouseButtonCallback(w, - [](GLFWwindow *w, int button, int action, int mods) - { - if (ImGui::GetIO().WantCaptureMouse) - return; - get_app(w)->mouse_button_callback_event(button, action, mods); - }); - - glfwSetScrollCallback(w, - [](GLFWwindow *w, double xoffset, double yoffset) - { - if (ImGui::GetIO().WantCaptureMouse) - return; - - get_app(w)->scroll_callback_event(xoffset, yoffset); - }); - - glfwSetCharCallback(w, - [](GLFWwindow *w, unsigned int c) - { - if (ImGui::GetIO().WantCaptureKeyboard) - return; - - get_app(w)->char_callback_event(c); - }); - - glfwSetKeyCallback(w, - [](GLFWwindow *w, int key, int scancode, int action, int mods) - { - if (ImGui::GetIO().WantCaptureKeyboard) - return; - - get_app(w)->key_callback_event(key, scancode, action, mods); - }); - - glfwSetDropCallback(w, [](GLFWwindow *w, int nb, const char **p) { get_app(w)->drop_callback_event(nb, p); }); - - // React to framebuffer size events -- includes window size events and also catches things like dragging a window - // from a Retina-capable screen to a normal screen on Mac OS X - glfwSetFramebufferSizeCallback(w, [](GLFWwindow *w, int, int) { get_app(w)->resize_callback_event(); }); - - // notify when the screen has lost focus (e.g. application switch) - glfwSetWindowFocusCallback(w, [](GLFWwindow *w, int focused) { get_app(w)->focus_event(focused != 0); }); - - // notify when the screen was maximized or restored - glfwSetWindowMaximizeCallback(w, [](GLFWwindow *w, int maximized) { get_app(w)->maximize_event(maximized != 0); }); - - glfwSetWindowContentScaleCallback(w, - [](GLFWwindow *w, float, float) - { - auto app = get_app(w); - app->m_pixel_ratio = get_pixel_ratio(w); - app->resize_callback_event(); - }); -} - -void GUIApp::cursor_pos_event(double x, double y) -{ - int2 p{int(x), int(y)}; - -#if defined(_WIN32) || defined(__linux__) || defined(EMSCRIPTEN) - p = int2(float2(p) / m_pixel_ratio); -#endif - - // m_last_interaction = glfwGetTime(); - try - { - p -= int2{1, 2}; - - bool ret = mouse_motion_event(p, p - m_mouse_pos, m_mouse_state, m_modifiers); - m_mouse_pos = p; - m_redraw |= ret; - } - catch (const std::exception &e) - { - std::cerr << "Caught exception in event handler: " << e.what() << std::endl; - } -} - -void GUIApp::mouse_button_callback_event(int button, int action, int modifiers) -{ - m_modifiers = modifiers; - m_last_interaction = glfwGetTime(); - -#if defined(__APPLE__) - if (button == GLFW_MOUSE_BUTTON_1 && modifiers == GLFW_MOD_CONTROL) - button = GLFW_MOUSE_BUTTON_2; -#endif - - try - { - if (action == GLFW_PRESS) - m_mouse_state |= 1 << button; - else - m_mouse_state &= ~(1 << button); - - m_redraw |= mouse_button_event(m_mouse_pos, button, action == GLFW_PRESS, m_modifiers); - } - catch (const std::exception &e) - { - std::cerr << "Caught exception in event handler: " << e.what() << std::endl; - } -} - -void GUIApp::scroll_callback_event(double x, double y) -{ - m_last_interaction = glfwGetTime(); - try - { - m_redraw |= scroll_event(m_mouse_pos, float2(x, y)); - } - catch (const std::exception &e) - { - std::cerr << "Caught exception in event handler: " << e.what() << std::endl; - } -} - -void GUIApp::char_callback_event(unsigned int codepoint) -{ - m_last_interaction = glfwGetTime(); - try - { - m_redraw |= keyboard_character_event(codepoint); - } - catch (const std::exception &e) - { - std::cerr << "Caught exception in event handler: " << e.what() << std::endl; - } -} - -void GUIApp::key_callback_event(int key, int scancode, int action, int mods) -{ - m_last_interaction = glfwGetTime(); - try - { - m_redraw |= keyboard_event(key, scancode, action, mods); - } - catch (const std::exception &e) - { - std::cerr << "Caught exception in event handler: " << e.what() << std::endl; - } -} - -void GUIApp::drop_callback_event(int count, const char **filenames) -{ - std::vector arg(count); - for (int i = 0; i < count; ++i) - arg[i] = filenames[i]; - m_redraw |= drop_event(arg); -} - -void GUIApp::resize_callback_event() -{ - auto window = static_cast(m_params.backendPointers.glfwWindow); -#if defined(EMSCRIPTEN) - return; -#endif - int2 fb_size, size; - glfwGetFramebufferSize(window, &fb_size[0], &fb_size[1]); - glfwGetWindowSize(window, &size[0], &size[1]); - if (fb_size == int2{0, 0} || size == int2{0, 0}) - return; - - m_fbsize = fb_size; - m_size = size; - -#if defined(_WIN32) || defined(__linux__) || defined(EMSCRIPTEN) - m_size = int2(float2(m_size) / m_pixel_ratio); -#endif - - m_last_interaction = glfwGetTime(); - -#if defined(HELLOIMGUI_USE_METAL) - if (m_depth_stencil_texture) - m_depth_stencil_texture->resize(fb_size); -#endif - - try - { - resize_event(m_size); - } - catch (const std::exception &e) - { - std::cerr << "Caught exception in event handler: " << e.what() << std::endl; - } - // redraw(); -} - -bool GUIApp::resize_event(const int2 &size) -{ - return false; -} -bool GUIApp::maximize_event(bool maximized) -{ - return false; -} -bool GUIApp::mouse_button_event(const int2 &p, int button, bool down, int modifiers) -{ - return false; -} -bool GUIApp::mouse_motion_event(const int2 &p, const int2 &rel, int button, int modifiers) -{ - return false; -} -bool GUIApp::scroll_event(const int2 &p, const float2 &rel) -{ - return false; -} -bool GUIApp::focus_event(bool focused) -{ - return false; -} -bool GUIApp::drop_event(const std::vector &) -{ - return false; -} -bool GUIApp::keyboard_event(int key, int scancode, int action, int modifiers) -{ - return false; -} -bool GUIApp::keyboard_character_event(unsigned int codepoint) -{ - return false; -} diff --git a/gui/gui_app.h b/gui/gui_app.h deleted file mode 100644 index ee3dd72..0000000 --- a/gui/gui_app.h +++ /dev/null @@ -1,81 +0,0 @@ - -#pragma once - -#include "hello_imgui/hello_imgui.h" -#include "linalg.h" -#include -using namespace linalg::aliases; - -//! Base class for all applications. -class GUIApp -{ -public: - GUIApp(); - ~GUIApp(); - - /// Singleton GUIApp instance - static GUIApp *instance() - { - return s_instance; - } - - void run() - { - HelloImGui::Run(m_params); - } - - virtual void initialize_GL(); - virtual void draw() = 0; - - /// Handle a mouse button event (default implementation: do nothing) - virtual bool mouse_button_event(const int2 &p, int button, bool down, int modifiers); - - /// Handle a mouse motion event (default implementation: do nothing) - virtual bool mouse_motion_event(const int2 &p, const int2 &rel, int button, int modifiers); - - /// Handle a mouse scroll event (default implementation: do nothing) - virtual bool scroll_event(const int2 &p, const float2 &rel); - - /// Handle a focus change event (default implementation: do nothing) - virtual bool focus_event(bool focused); - - /// Handle a file drop event (default implementation: do nothing) - virtual bool drop_event(const std::vector &filenames); - - /// Handle a keyboard event (default implementation: do nothing) - virtual bool keyboard_event(int key, int scancode, int action, int modifiers); - - /// Handle text input (UTF-32 format) (default implementation: do nothing) - virtual bool keyboard_character_event(unsigned int codepoint); - - /// Window resize event handler - virtual bool resize_event(const int2 &size); - - /// Window maximize event handler (default implementation: do nothing) - virtual bool maximize_event(bool maximized); - - /// Return the ratio between pixel and device coordinates (e.g. >= 2 on Mac Retina displays) - float pixel_ratio() const - { - return m_pixel_ratio; - } - -protected: - void cursor_pos_event(double xf, double yf); - void mouse_button_callback_event(int button, int action, int mods); - void resize_callback_event(); - void scroll_callback_event(double xoffset, double yoffset); - void char_callback_event(unsigned int c); - void key_callback_event(int key, int scancode, int action, int mods); - void drop_callback_event(int nb, const char **p); - void register_callbacks(); - - static GUIApp *s_instance; ///< pointer to the singleton GUIApp instance - HelloImGui::RunnerParams m_params; - float m_pixel_ratio; - int m_mouse_state = 0, m_modifiers = 0; - int2 m_mouse_pos{0, 0}; - int2 m_size{0, 0}, m_fbsize{0, 0}; - double m_last_interaction; - bool m_redraw = false; -}; diff --git a/gui/shader.cpp b/gui/shader.cpp index 901fa53..440a69e 100644 --- a/gui/shader.cpp +++ b/gui/shader.cpp @@ -474,7 +474,7 @@ void Shader::begin() } break; -#if defined(HELLOIMGUI_USE_GLES2) +#if defined(HELLOIMGUI_USE_GLES2) || defined(HELLOIMGUI_USE_GLES3) case VariableType::UInt32: #endif case VariableType::Int32: @@ -498,7 +498,7 @@ void Shader::begin() } break; -#if !defined(HELLOIMGUI_USE_GLES2) +#if !defined(HELLOIMGUI_USE_GLES2) && !defined(HELLOIMGUI_USE_GLES3) case VariableType::UInt32: { const uint32_t *v = (const uint32_t *)buf.buffer; From 42d79a46e4f946a85c0ad4f36e63b6574f6c6cdf Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Fri, 1 Dec 2023 16:16:45 +0100 Subject: [PATCH 15/27] fix memory bugs in samplers; emscripten working! --- gui/SampleViewer.cpp | 51 ++++++++++++++------------- gui/shader.cpp | 5 +++ include/sampler/LP.h | 5 +++ include/sampler/Sobol.h | 78 +++++++++++++++++++++++++++-------------- src/LP.cpp | 13 ++++--- src/MultiJittered.cpp | 3 +- src/Sobol.cpp | 19 +++------- 7 files changed, 102 insertions(+), 72 deletions(-) diff --git a/gui/SampleViewer.cpp b/gui/SampleViewer.cpp index a05f2db..4da3bf0 100644 --- a/gui/SampleViewer.cpp +++ b/gui/SampleViewer.cpp @@ -63,22 +63,13 @@ bool ToggleButton(const char *label, bool *active) } // namespace ImGui -// clang-format off -#ifdef __EMSCRIPTEN__ - #define VERT_SHADER_HEADER "#version 100\n#define in attribute\n#define out varying\nprecision mediump float;\n" - #define FRAG_SHADER_HEADER "#version 100\n#define in varying\n#define fo_FragColor gl_FragColor\nprecision mediump float;\n" -#else - #define VERT_SHADER_HEADER "#version 330\n" - #define FRAG_SHADER_HEADER "#version 330\nout vec4 fo_FragColor;\n" -#endif -// clang-format on - // Shader sources - -static const string pointVertexShader = FRAG_SHADER_HEADER R"( +static const string pointVertexShader = + R"(#version 100 +precision mediump float; uniform mat4 mvp; uniform float pointSize; -in vec3 position; +attribute vec3 position; void main() { gl_Position = mvp * vec4(position, 1.0); @@ -86,13 +77,15 @@ void main() } )"; -static const string pointFragmentShader = FRAG_SHADER_HEADER R"( +static const string pointFragmentShader = + R"(#version 100 +precision mediump float; uniform vec3 color; uniform float pointSize; void main() { float alpha = 1.0; - if (pointSize > 3) + if (pointSize > 3.0) { vec2 circCoord = 2.0 * gl_PointCoord - 1.0; float radius2 = dot(circCoord, circCoord); @@ -100,24 +93,28 @@ void main() discard; alpha = 1.0 - smoothstep(1.0 - 2.0/pointSize, 1.0, sqrt(radius2)); } - fo_FragColor = vec4(color, alpha); + gl_FragColor = vec4(color, alpha); } )"; -static const string gridVertexShader = VERT_SHADER_HEADER R"( +static const string gridVertexShader = + R"(#version 100 +precision mediump float; uniform mat4 mvp; -in vec3 position; +attribute vec3 position; void main() { gl_Position = mvp * vec4(position, 1.0); } )"; -static const string gridFragmentShader = FRAG_SHADER_HEADER R"( +static const string gridFragmentShader = + R"(#version 100 +precision mediump float; uniform float alpha; void main() { - fo_FragColor = vec4(vec3(1.0), alpha); + gl_FragColor = vec4(vec3(1.0), alpha); } )"; @@ -277,6 +274,7 @@ SampleViewer::SampleViewer() } catch (const std::exception &e) { + fmt::print(stderr, "An error occurred: {}.", e.what()); HelloImGui::Log(HelloImGui::LogLevel::Error, "An error occurred: %s.", e.what()); } } @@ -306,6 +304,7 @@ SampleViewer::SampleViewer() } catch (const std::exception &e) { + fmt::print(stderr, "An error occurred: {}.", e.what()); HelloImGui::Log(HelloImGui::LogLevel::Error, "An error occurred: %s.", e.what()); } } @@ -703,6 +702,7 @@ void SampleViewer::process_hotkeys() else if (ImGui::IsKeyPressed(ImGuiKey_D)) { m_num_dimensions = std::clamp(m_num_dimensions + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 1 : -1), 2, 10); + m_dimension = linalg::clamp(m_dimension, int3{0}, int3{m_num_dimensions - 1}); update_GPU_points(); update_GPU_grids(); } @@ -779,6 +779,7 @@ void SampleViewer::initialize_GL() } catch (const std::exception &e) { + fmt::print(stderr, "Shader initialization failed!:\n\t{}.", e.what()); HelloImGui::Log(HelloImGui::LogLevel::Error, "Shader initialization failed!:\n\t%s.", e.what()); } } @@ -794,6 +795,7 @@ void SampleViewer::update_GPU_points(bool regenerate) } catch (const std::exception &e) { + fmt::print(stderr, "An error occurred while generating points: {}.", e.what()); HelloImGui::Log(HelloImGui::LogLevel::Error, "An error occurred while generating points: %s.", e.what()); return; } @@ -879,8 +881,7 @@ void SampleViewer::draw_2D_points_and_grid(const float4x4 &mvp, int dim_x, int d if (m_scale_radius_with_points) radius *= 64.0f / std::sqrt(m_point_count); m_point_2d_shader->set_uniform("pointSize", radius); - m_point_2d_shader->set_uniform("color", float3(0.9f, 0.55f, 0.1f)); - + m_point_2d_shader->set_uniform("color", m_point_color); int2 range = get_draw_range(); m_point_2d_shader->begin(); @@ -940,6 +941,7 @@ void SampleViewer::clear_and_setup_viewport() } catch (const std::exception &e) { + fmt::print(stderr, "OpenGL drawing failed:\n\t{}.", e.what()); HelloImGui::Log(HelloImGui::LogLevel::Error, "OpenGL drawing failed:\n\t%s.", e.what()); } } @@ -988,8 +990,6 @@ void SampleViewer::draw_scene() } else { - // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); - draw_points(mvp, m_point_color); if (m_show_1d_projections) { @@ -1007,6 +1007,9 @@ void SampleViewer::draw_scene() draw_points(smashZ, {0.3f, 0.3f, 0.8f}); } + // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); + draw_points(mvp, m_point_color); + // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); if (m_show_bbox) draw_grid(mvp, 1.0f, 0, 8); diff --git a/gui/shader.cpp b/gui/shader.cpp index 440a69e..e7df6d1 100644 --- a/gui/shader.cpp +++ b/gui/shader.cpp @@ -8,6 +8,10 @@ #define GL_HALF_FLOAT 0x140B #endif +#include + +#include + #define CHK(cmd) \ do \ { \ @@ -35,6 +39,7 @@ bool check_glerror(const char *cmd) default: msg = "unknown error"; break; } + fmt::print(stderr, "OpenGL error ({}) during operation \"{}\"!\n", msg, cmd); HelloImGui::Log(HelloImGui::LogLevel::Error, "OpenGL error (%s) during operation \"%s\"!\n", msg, cmd); return true; } diff --git a/include/sampler/LP.h b/include/sampler/LP.h index ba5a6a2..1f6a79f 100644 --- a/include/sampler/LP.h +++ b/include/sampler/LP.h @@ -37,6 +37,11 @@ class LarcherPillichshammerGK : public TSamplerMinMaxDim<1, 3> return m_numDimensions; } + void setDimensions(unsigned d) override + { + m_numDimensions = d; + } + std::string name() const override { return "LP-GK"; diff --git a/include/sampler/Sobol.h b/include/sampler/Sobol.h index 10554ac..7f61b3c 100644 --- a/include/sampler/Sobol.h +++ b/include/sampler/Sobol.h @@ -3,40 +3,49 @@ */ #pragma once -#include #include +#include #include - /// A Sobol quasi-random number sequence. /** A wrapper for L. Gruenschloss's fast Sobol sampler. */ -class Sobol : public TSamplerMinMaxDim<1,1024> +class Sobol : public TSamplerMinMaxDim<1, 1024> { public: Sobol(unsigned dimensions = 2); void sample(float[], unsigned i) override; - unsigned dimensions() const override {return m_numDimensions;} - void setDimensions(unsigned n) override {m_numDimensions = n;} + unsigned dimensions() const override + { + return m_numDimensions; + } + void setDimensions(unsigned n) override + { + m_numDimensions = n; + } - bool randomized() const override {return m_scrambles.size();} + bool randomized() const override + { + return m_scrambles.size(); + } void setRandomized(bool b = true) override; - std::string name() const override {return "Sobol";} + std::string name() const override + { + return "Sobol"; + } protected: - unsigned m_numDimensions; - pcg32 m_rand; + unsigned m_numDimensions; + pcg32 m_rand; std::vector m_scrambles; }; - - /// A (0,2) sequence created by padding the first two dimensions of Sobol -class ZeroTwo : public TSamplerMinMaxDim<1,1024> +class ZeroTwo : public TSamplerMinMaxDim<1, 1024> { public: ZeroTwo(unsigned n = 64, unsigned dimensions = 2, bool shuffle = false); @@ -44,26 +53,45 @@ class ZeroTwo : public TSamplerMinMaxDim<1,1024> void reset() override; void sample(float[], unsigned i) override; - unsigned dimensions() const override {return m_numDimensions;} - void setDimensions(unsigned d) override {m_numDimensions = d; reset();} + unsigned dimensions() const override + { + return m_numDimensions; + } + void setDimensions(unsigned d) override + { + m_numDimensions = d; + reset(); + } - bool randomized() const override {return m_randomize;} - void setRandomized(bool r) override {m_randomize = r; reset();} + bool randomized() const override + { + return m_randomize; + } + void setRandomized(bool r) override + { + m_randomize = r; + reset(); + } - int numSamples() const override {return m_numSamples;} + int numSamples() const override + { + return m_numSamples; + } int setNumSamples(unsigned n) override; - std::string name() const override {return m_shuffle ? "Shuffled+XORed (0,2)" : "XORed (0,2)";} + std::string name() const override + { + return m_shuffle ? "Shuffled+XORed (0,2)" : "XORed (0,2)"; + } protected: - unsigned m_numSamples, m_numDimensions; - bool m_randomize, m_shuffle; - pcg32 m_rand; + unsigned m_numSamples, m_numDimensions; + bool m_randomize, m_shuffle; + pcg32 m_rand; std::vector m_scrambles; std::vector m_permutes; }; - // Copyright (c) 2012 Leonhard Gruenschloss (leonhard@gruenschloss.org) // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -84,11 +112,10 @@ class ZeroTwo : public TSamplerMinMaxDim<1,1024> // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. - struct SobolMatrices { static const unsigned numDimensions = 1024; - static const unsigned size = 52; + static const unsigned size = 52; static const unsigned matrices[]; }; @@ -97,8 +124,7 @@ struct SobolMatrices // the point inside the sequence. The scramble parameter can be used // to permute elementary intervals, and might be chosen randomly to // generate a randomized QMC sequence. -inline float sobol(unsigned long long index, unsigned dimension, - unsigned scramble = 0U) +inline float sobol(unsigned long long index, unsigned dimension, unsigned scramble = 0U) { assert(dimension < SobolMatrices::numDimensions); diff --git a/src/LP.cpp b/src/LP.cpp index 5d80c7c..1c196c6 100644 --- a/src/LP.cpp +++ b/src/LP.cpp @@ -17,13 +17,12 @@ LarcherPillichshammerGK::~LarcherPillichshammerGK() void LarcherPillichshammerGK::sample(float r[], unsigned i) { - r[0] = randomDigitScramble(i * m_inv, m_scramble1); - if (m_numDimensions == 1) - return; + if (m_numDimensions > 0) + r[0] = randomDigitScramble(i * m_inv, m_scramble1); - r[1] = LarcherPillichshammerRI(i, m_scramble2); - if (m_numDimensions == 2) - return; + if (m_numDimensions > 1) + r[1] = LarcherPillichshammerRI(i, m_scramble2); - r[2] = GruenschlossKellerRI(i, m_scramble3); + if (m_numDimensions > 2) + r[2] = GruenschlossKellerRI(i, m_scramble3); } diff --git a/src/MultiJittered.cpp b/src/MultiJittered.cpp index f9c2c1e..7125c8a 100644 --- a/src/MultiJittered.cpp +++ b/src/MultiJittered.cpp @@ -220,6 +220,7 @@ void CorrelatedMultiJitteredInPlace::sample(float r[], unsigned i) float jx = 0.5f + m_maxJit * (m_rand.nextFloat() - 0.5f); float jy = 0.5f + m_maxJit * (m_rand.nextFloat() - 0.5f); r[d] = (sx + (sy + jx) / m_resY) / m_resX; - r[d + 1] = (s + jy) / m_numSamples; + if (d + 1 < dimensions()) + r[d + 1] = (s + jy) / m_numSamples; } } diff --git a/src/Sobol.cpp b/src/Sobol.cpp index 1e56fc5..61d547e 100644 --- a/src/Sobol.cpp +++ b/src/Sobol.cpp @@ -2,13 +2,11 @@ \author Wojciech Jarosz */ -#include -#include #include +#include +#include - -Sobol::Sobol(unsigned dimensions) : - m_numDimensions(dimensions) +Sobol::Sobol(unsigned dimensions) : m_numDimensions(dimensions) { // empty } @@ -39,17 +37,12 @@ void Sobol::setRandomized(bool b) } } - - - ZeroTwo::ZeroTwo(unsigned n, unsigned dimensions, bool shuffle) : m_numSamples(n), m_numDimensions(dimensions), m_shuffle(shuffle) { - // empty reset(); } - void ZeroTwo::reset() { m_scrambles.resize(dimensions()); @@ -57,19 +50,17 @@ void ZeroTwo::reset() for (unsigned d = 0; d < dimensions(); ++d) { m_scrambles[d] = m_randomize ? m_rand.nextUInt() : 0; - m_permutes[d] = m_shuffle ? m_rand.nextUInt() : 0; + m_permutes[d] = m_shuffle ? m_rand.nextUInt() : 0; } } - int ZeroTwo::setNumSamples(unsigned n) { return m_numSamples = (n == 0) ? 1 : n; } - void ZeroTwo::sample(float r[], unsigned i) { for (unsigned d = 0; d < dimensions(); ++d) - r[d] = sobol(permute(i, m_numSamples, m_permutes[d/2]), d % 2, m_scrambles[d]); + r[d] = sobol(permute(i, m_numSamples, m_permutes[d / 2]), d % 2, m_scrambles[d]); } From 13b49218bf639073ed7d48ebab67b6c01eab666d Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Fri, 1 Dec 2023 23:06:03 +0100 Subject: [PATCH 16/27] asset shader files; emscripten ci --- .github/workflows/ci-emscripten.yml | 56 ++++ CMakeLists.txt | 2 +- assets/shaders/lines.frag | 7 + assets/shaders/lines.vert | 8 + assets/shaders/points.frag | 17 + assets/shaders/points.vert | 10 + gui/{SampleViewer.cpp => app.cpp} | 502 ++++++++++++---------------- gui/{SampleViewer.h => app.h} | 4 - gui/shader.cpp | 29 +- gui/shader.h | 126 ++++--- 10 files changed, 400 insertions(+), 361 deletions(-) create mode 100644 .github/workflows/ci-emscripten.yml create mode 100644 assets/shaders/lines.frag create mode 100644 assets/shaders/lines.vert create mode 100644 assets/shaders/points.frag create mode 100644 assets/shaders/points.vert rename gui/{SampleViewer.cpp => app.cpp} (88%) rename gui/{SampleViewer.h => app.h} (98%) diff --git a/.github/workflows/ci-emscripten.yml b/.github/workflows/ci-emscripten.yml new file mode 100644 index 0000000..81f3b14 --- /dev/null +++ b/.github/workflows/ci-emscripten.yml @@ -0,0 +1,56 @@ +name: macOS build + +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: Web app + 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/ccache-action@v1.2 + + - 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 diff --git a/CMakeLists.txt b/CMakeLists.txt index c5ef1e8..d514687 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -234,7 +234,7 @@ set(HELLO_IMGUI_BUNDLE_SHORT_VERSION ${PROJECT_VERSION}) set(HELLO_IMGUI_BUNDLE_ICON_FILE icon.icns) hello_imgui_add_app(SamplinSafari - gui/SampleViewer.cpp + gui/app.cpp gui/shader.cpp gui/export_to_file.cpp ) diff --git a/assets/shaders/lines.frag b/assets/shaders/lines.frag new file mode 100644 index 0000000..92a36a0 --- /dev/null +++ b/assets/shaders/lines.frag @@ -0,0 +1,7 @@ +#version 100 +precision mediump float; +uniform float alpha; +void main() +{ + gl_FragColor = vec4(vec3(1.0), alpha); +} diff --git a/assets/shaders/lines.vert b/assets/shaders/lines.vert new file mode 100644 index 0000000..80b9ed0 --- /dev/null +++ b/assets/shaders/lines.vert @@ -0,0 +1,8 @@ +#version 100 +precision mediump float; +uniform mat4 mvp; +attribute vec3 position; +void main() +{ + gl_Position = mvp * vec4(position, 1.0); +} diff --git a/assets/shaders/points.frag b/assets/shaders/points.frag new file mode 100644 index 0000000..424ac03 --- /dev/null +++ b/assets/shaders/points.frag @@ -0,0 +1,17 @@ +#version 100 +precision mediump float; +uniform vec3 color; +uniform float point_size; +void main() +{ + float alpha = 1.0; + if (point_size > 3.0) + { + vec2 circCoord = 2.0 * gl_PointCoord - 1.0; + float radius2 = dot(circCoord, circCoord); + if (radius2 > 1.0) + discard; + // alpha = 1.0 - smoothstep(1.0 - 2.0 / point_size, 1.0, sqrt(radius2)); + } + gl_FragColor = vec4(color * alpha, alpha); +} diff --git a/assets/shaders/points.vert b/assets/shaders/points.vert new file mode 100644 index 0000000..799297e --- /dev/null +++ b/assets/shaders/points.vert @@ -0,0 +1,10 @@ +#version 100 +precision mediump float; +uniform mat4 mvp; +uniform float point_size; +attribute vec3 position; +void main() +{ + gl_Position = mvp * vec4(position, 1.0); + gl_PointSize = point_size; +} \ No newline at end of file diff --git a/gui/SampleViewer.cpp b/gui/app.cpp similarity index 88% rename from gui/SampleViewer.cpp rename to gui/app.cpp index 4da3bf0..2f77b08 100644 --- a/gui/SampleViewer.cpp +++ b/gui/app.cpp @@ -1,11 +1,10 @@ /** \file SampleViewer.cpp \author Wojciech Jarosz */ -#define _USE_MATH_DEFINES #define NOMINMAX -#include "SampleViewer.h" +#include "app.h" using namespace linalg::ostream_overloads; @@ -63,85 +62,21 @@ bool ToggleButton(const char *label, bool *active) } // namespace ImGui -// Shader sources -static const string pointVertexShader = - R"(#version 100 -precision mediump float; -uniform mat4 mvp; -uniform float pointSize; -attribute vec3 position; -void main() -{ - gl_Position = mvp * vec4(position, 1.0); - gl_PointSize = pointSize; -} -)"; - -static const string pointFragmentShader = - R"(#version 100 -precision mediump float; -uniform vec3 color; -uniform float pointSize; -void main() -{ - float alpha = 1.0; - if (pointSize > 3.0) - { - vec2 circCoord = 2.0 * gl_PointCoord - 1.0; - float radius2 = dot(circCoord, circCoord); - if (radius2 > 1.0) - discard; - alpha = 1.0 - smoothstep(1.0 - 2.0/pointSize, 1.0, sqrt(radius2)); - } - gl_FragColor = vec4(color, alpha); -} -)"; - -static const string gridVertexShader = - R"(#version 100 -precision mediump float; -uniform mat4 mvp; -attribute vec3 position; -void main() -{ - gl_Position = mvp * vec4(position, 1.0); -} -)"; - -static const string gridFragmentShader = - R"(#version 100 -precision mediump float; -uniform float alpha; -void main() -{ - gl_FragColor = vec4(vec3(1.0), alpha); -} -)"; - static float map_slider_to_radius(float sliderValue) { return sliderValue * sliderValue * 32.0f + 2.0f; } -static float4x4 layout_2d_matrix(int numDims, int dim_x, int dim_y) +static float4x4 layout_2d_matrix(int num_dims, int dim_x, int dim_y) { - float cellSpacing = 1.f / (numDims - 1); - float cellSize = 0.96f / (numDims - 1); + float cell_spacing = 1.f / (num_dims - 1); + float cell_size = 0.96f / (num_dims - 1); - float xOffset = dim_x - (numDims - 2) / 2.0f; - float yOffset = -(dim_y - 1 - (numDims - 2) / 2.0f); + float x_offset = dim_x - (num_dims - 2) / 2.0f; + float y_offset = -(dim_y - 1 - (num_dims - 2) / 2.0f); - return mul(translation_matrix(float3{cellSpacing * xOffset, cellSpacing * yOffset, 1}), - scaling_matrix(float3{cellSize, cellSize, 1})); -} - -// scaled_display_size() is a helper function that returns the size of the window in pixels: -// for retina displays, io.DisplaySize is the size of the window in points (logical pixels) -// but we need the size in pixels. So we scale io.DisplaySize by io.DisplayFramebufferScale -static int2 scaled_display_size() -{ - auto &io = ImGui::GetIO(); - return int2{io.DisplaySize.x * io.DisplayFramebufferScale.x, io.DisplaySize.y * io.DisplayFramebufferScale.y}; + return mul(translation_matrix(float3{cell_spacing * x_offset, cell_spacing * y_offset, 1}), + scaling_matrix(float3{cell_size, cell_size, 1})); } SampleViewer::SampleViewer() @@ -321,8 +256,40 @@ SampleViewer::SampleViewer() ImGui::ToggleButton(ICON_FA_TERMINAL, &m_params.dockingParams.dockableWindows[1].isVisible); }; + m_params.callbacks.SetupImGuiStyle = [this]() + { + // set the default theme for first startup + m_params.imGuiWindowParams.tweakedTheme.Theme = ImGuiTheme::ImGuiTheme_FromName("MaterialFlat"); + }; + m_params.callbacks.PostInit = [this]() + { + try + { +#ifndef __EMSCRIPTEN__ + glEnable(GL_PROGRAM_POINT_SIZE); + glEnable(GL_LINE_SMOOTH); + glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); +#endif + + m_point_shader = + new Shader("Point shader", "shaders/points.vert", "shaders/points.frag", Shader::BlendMode::AlphaBlend); + m_grid_shader = + new Shader("Grid shader", "shaders/lines.vert", "shaders/lines.frag", Shader::BlendMode::AlphaBlend); + m_point_2d_shader = new Shader("Point shader 2D", "shaders/points.vert", "shaders/points.frag", + Shader::BlendMode::AlphaBlend); + + update_GPU_points(); + update_GPU_grids(); + + HelloImGui::Log(HelloImGui::LogLevel::Info, "Successfully initialized GL!"); + } + catch (const std::exception &e) + { + fmt::print(stderr, "Shader initialization failed!:\n\t{}.", e.what()); + HelloImGui::Log(HelloImGui::LogLevel::Error, "Shader initialization failed!:\n\t%s.", e.what()); + } + }; m_params.callbacks.ShowGui = [this]() { draw_gui(); }; - m_params.callbacks.PostInit = [this]() { initialize_GL(); }; m_params.callbacks.CustomBackground = [this]() { draw_scene(); }; } @@ -662,7 +629,8 @@ void SampleViewer::process_hotkeys() if (ImGui::GetIO().WantCaptureKeyboard) return; - OrthogonalArray *oa = dynamic_cast(m_samplers[m_sampler]); + Sampler *sampler = m_samplers[m_sampler]; + OrthogonalArray *oa = dynamic_cast(sampler); auto change_strength = [oa, this](int strength) { if ((unsigned)strength != oa->strength()) @@ -711,7 +679,7 @@ void SampleViewer::process_hotkeys() if (ImGui::IsKeyDown(ImGuiMod_Shift)) { m_randomize = true; - m_samplers[m_sampler]->setRandomized(true); + sampler->setRandomized(true); } else m_randomize = !m_randomize; @@ -720,6 +688,7 @@ void SampleViewer::process_hotkeys() else if (ImGui::IsKeyPressed(ImGuiKey_J)) { m_jitter = std::clamp(m_jitter + (ImGui::IsKeyDown(ImGuiMod_Shift) ? 10.f : -10.f), 0.f, 100.f); + sampler->setJitter(m_jitter * 0.01f); update_GPU_points(); } else if (oa && ImGui::IsKeyPressed(ImGuiKey_T)) @@ -755,43 +724,39 @@ void SampleViewer::process_hotkeys() } } -void SampleViewer::initialize_GL() -{ - try - { -#ifndef __EMSCRIPTEN__ - glEnable(GL_PROGRAM_POINT_SIZE); - glEnable(GL_LINE_SMOOTH); - glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); -#endif - m_point_shader = - new Shader("Point shader", pointVertexShader, pointFragmentShader, Shader::BlendMode::AlphaBlend); - - m_grid_shader = new Shader("Grid shader", gridVertexShader, gridFragmentShader, Shader::BlendMode::AlphaBlend); - - m_point_2d_shader = - new Shader("Point shader 2D", pointVertexShader, pointFragmentShader, Shader::BlendMode::AlphaBlend); - - update_GPU_points(); - update_GPU_grids(); - - HelloImGui::Log(HelloImGui::LogLevel::Info, "Successfully initialized GL!"); - } - catch (const std::exception &e) - { - fmt::print(stderr, "Shader initialization failed!:\n\t{}.", e.what()); - HelloImGui::Log(HelloImGui::LogLevel::Error, "Shader initialization failed!:\n\t%s.", e.what()); - } -} - void SampleViewer::update_GPU_points(bool regenerate) { + // // Generate the point positions + // if (regenerate) { try { - generate_points(); + Timer timer; + Sampler *generator = m_samplers[m_sampler]; + if (generator->randomized() != m_randomize) + generator->setRandomized(m_randomize); + + generator->setDimensions(m_num_dimensions); + + int num_pts = generator->setNumSamples(m_target_point_count); + m_point_count = num_pts > 0 ? num_pts : m_target_point_count; + + m_time1 = timer.elapsed(); + + m_points.resize(m_point_count, m_num_dimensions); + m_3d_points.resize(m_point_count); + + timer.reset(); + for (int i = 0; i < m_point_count; ++i) + { + vector r(m_num_dimensions, 0.5f); + generator->sample(r.data(), i); + for (int j = 0; j < m_points.sizeY(); ++j) + m_points(i, j) = r[j] - 0.5f; + } + m_time2 = timer.elapsed(); } catch (const std::exception &e) { @@ -801,13 +766,38 @@ void SampleViewer::update_GPU_points(bool regenerate) } } - // Upload points to GPU + // + // Populate point subsets + // + m_subset_points = m_points; + m_subset_count = m_point_count; + if (m_subset_by_coord) + { + m_subset_count = 0; + for (int i = 0; i < m_points.sizeX(); ++i) + { + float v = m_points(i, std::clamp(m_subset_axis, 0, m_num_dimensions - 1)); + v += 0.5f; + if (v >= (m_subset_level + 0.0f) / m_num_subset_levels && v < (m_subset_level + 1.0f) / m_num_subset_levels) + { + // copy all dimensions (rows) of point i + for (int j = 0; j < m_subset_points.sizeY(); ++j) + m_subset_points(m_subset_count, j) = m_points(i, j); + ++m_subset_count; + } + } + } + + for (size_t i = 0; i < m_3d_points.size(); ++i) + m_3d_points[i] = float3{m_subset_points(i, m_dimension.x), m_subset_points(i, m_dimension.y), + m_subset_points(i, m_dimension.z)}; - populate_point_subset(); + // + // Upload points to the GPU + // m_point_shader->set_buffer("position", m_3d_points); - // Upload 2D points to GPU // create a temporary matrix to store all the 2D projections of the points // each 2D plot actually needs 3D points, and there are num2DPlots of them int num2DPlots = m_num_dimensions * (m_num_dimensions - 1) / 2; @@ -821,6 +811,26 @@ void SampleViewer::update_GPU_points(bool regenerate) m_point_2d_shader->set_buffer("position", points2D); } +void SampleViewer::generate_grid(vector &positions, int grid_res) +{ + int fine_grid_res = 1; + int idx = 0; + positions.resize(4 * (grid_res + 1) * (fine_grid_res)); + float coarse_scale = 1.f / grid_res, fine_scale = 1.f / fine_grid_res; + // for (int z = -1; z <= 1; z+=2) + int z = 0; + for (int i = 0; i <= grid_res; ++i) + { + for (int j = 0; j < fine_grid_res; ++j) + { + positions[idx++] = float3(j * fine_scale - 0.5f, i * coarse_scale - 0.5f, z * 0.5f); + positions[idx++] = float3((j + 1) * fine_scale - 0.5f, i * coarse_scale - 0.5f, z * 0.5f); + positions[idx++] = float3(i * coarse_scale - 0.5f, j * fine_scale - 0.5f, z * 0.5f); + positions[idx++] = float3(i * coarse_scale - 0.5f, (j + 1) * fine_scale - 0.5f, z * 0.5f); + } + } +} + void SampleViewer::update_GPU_grids() { vector bbox_grid, coarse_grid, fine_grid; @@ -837,39 +847,6 @@ void SampleViewer::update_GPU_grids() m_grid_shader->set_buffer("position", positions); } -void SampleViewer::draw_points(const float4x4 &mvp, const float3 &color) -{ - // Render the point set - m_point_shader->set_uniform("mvp", mvp); - float radius = map_slider_to_radius(m_radius); - if (m_scale_radius_with_points) - radius *= 64.0f / std::sqrt(m_point_count); - m_point_shader->set_uniform("pointSize", radius); - m_point_shader->set_uniform("color", color); - - int2 range = get_draw_range(); - - m_point_shader->begin(); - m_point_shader->draw_array(Shader::PrimitiveType::Point, range.x, range.y); - m_point_shader->end(); -} - -void SampleViewer::draw_grid(const float4x4 &mvp, float alpha, uint32_t offset, uint32_t count) -{ - m_grid_shader->set_uniform("alpha", alpha); - - for (int axis = CAMERA_XY; axis <= CAMERA_XZ; ++axis) - { - if (m_camera[CAMERA_CURRENT].camera_type == axis || m_camera[CAMERA_CURRENT].camera_type == CAMERA_CURRENT) - { - m_grid_shader->set_uniform("mvp", mul(mvp, m_camera[axis].arcball.matrix())); - m_grid_shader->begin(); - m_grid_shader->draw_array(Shader::PrimitiveType::Line, offset, count); - m_grid_shader->end(); - } - } -} - void SampleViewer::draw_2D_points_and_grid(const float4x4 &mvp, int dim_x, int dim_y, int plot_index) { float4x4 pos = layout_2d_matrix(m_num_dimensions, dim_x, dim_y); @@ -915,17 +892,22 @@ void SampleViewer::draw_2D_points_and_grid(const float4x4 &mvp, int dim_x, int d } } -void SampleViewer::clear_and_setup_viewport() +void SampleViewer::draw_scene() { + auto &io = ImGui::GetIO(); + + // + // clear the scene and set up viewports + // try { - // account for dpi factor on retina screens - auto &io = ImGui::GetIO(); - const float4 background_color{0.f, 0.f, 0.f, 1.f}; // first clear the entire window with the background color - auto display_size = scaled_display_size(); + // display_size is the size of the window in pixels while accounting for dpi factor on retina screens. + // for retina displays, io.DisplaySize is the size of the window in points (logical pixels) + // but we need the size in pixels. So we scale io.DisplaySize by io.DisplayFramebufferScale + auto display_size = int2{io.DisplaySize} * int2{io.DisplayFramebufferScale}; CHK(glViewport(0, 0, display_size.x, display_size.y)); CHK(glClearColor(background_color[0], background_color[1], background_color[2], background_color[3])); CHK(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); @@ -938,20 +920,21 @@ void SampleViewer::clear_and_setup_viewport() // inform the arcballs of the viewport size for (int i = 0; i < NUM_CAMERA_TYPES; ++i) m_camera[i].arcball.set_size(m_viewport_size); + + // enable depth testing + CHK(glEnable(GL_DEPTH_TEST)); + CHK(glDepthFunc(GL_LESS)); + CHK(glDepthMask(GL_TRUE)); } catch (const std::exception &e) { fmt::print(stderr, "OpenGL drawing failed:\n\t{}.", e.what()); HelloImGui::Log(HelloImGui::LogLevel::Error, "OpenGL drawing failed:\n\t%s.", e.what()); } -} - -void SampleViewer::draw_scene() -{ - clear_and_setup_viewport(); + // // process camera movement - auto &io = ImGui::GetIO(); + // if (!io.WantCaptureMouse) { m_camera[CAMERA_NEXT].zoom = std::max(0.001, m_camera[CAMERA_NEXT].zoom * pow(1.1, io.MouseWheel)); @@ -976,11 +959,45 @@ void SampleViewer::draw_scene() m_camera[CAMERA_NEXT].arcball.motion(int2{io.MousePos} - m_viewport_pos); } - // update/move the camera - update_current_camera(); + // + // perform animation of camera parameters, e.g. after clicking one of the view buttons + // + { + CameraParameters &camera0 = m_camera[CAMERA_PREVIOUS]; + CameraParameters &camera1 = m_camera[CAMERA_NEXT]; + CameraParameters &camera = m_camera[CAMERA_CURRENT]; + + float time_now = (float)ImGui::GetTime(); + float time_diff = (m_animate_start_time != 0.0f) ? (time_now - m_animate_start_time) : 1.0f; + + // interpolate between the "perspectiveness" at the previous keyframe, + // and the "perspectiveness" of the currently selected camera + float t = smoothStep(0.0f, 1.0f, time_diff); + + camera.zoom = lerp(camera0.zoom, camera1.zoom, t); + camera.view_angle = lerp(camera0.view_angle, camera1.view_angle, t); + camera.persp_factor = lerp(camera0.persp_factor, camera1.persp_factor, t); + if (t >= 1.0f) + { + camera.camera_type = camera1.camera_type; + m_params.fpsIdling.fpsIdle = 9.f; // animation is done, reduce FPS + m_animate_start_time = 0.f; + } + + // if we are dragging the mouse, then just use the current arcball + // rotation, otherwise, interpolate between the previous and next camera + // orientations + if (io.MouseDown[0]) + camera.arcball = camera1.arcball; + else + camera.arcball.set_state(qslerp(camera0.arcball.state(), camera1.arcball.state(), t)); + } float4x4 mvp = m_camera[CAMERA_CURRENT].matrix(float(m_viewport_size.x) / m_viewport_size.y); + // + // Now render the points and grids + // if (m_view == CAMERA_2D) { int plot_index = 0; @@ -1007,10 +1024,8 @@ void SampleViewer::draw_scene() draw_points(smashZ, {0.3f, 0.3f, 0.8f}); } - // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); draw_points(mvp, m_point_color); - // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); if (m_show_bbox) draw_grid(mvp, 1.0f, 0, 8); @@ -1022,6 +1037,52 @@ void SampleViewer::draw_scene() } } +void SampleViewer::set_view(CameraType view) +{ + m_animate_start_time = (float)ImGui::GetTime(); + m_camera[CAMERA_PREVIOUS] = m_camera[CAMERA_CURRENT]; + m_camera[CAMERA_NEXT] = m_camera[view]; + m_camera[CAMERA_NEXT].persp_factor = (view == CAMERA_CURRENT) ? 1.0f : 0.0f; + m_camera[CAMERA_NEXT].camera_type = view; + m_camera[CAMERA_CURRENT].camera_type = (view == m_camera[CAMERA_CURRENT].camera_type) ? view : CAMERA_CURRENT; + m_view = view; + + m_params.fpsIdling.fpsIdle = 0.f; // during animation, increase FPS +} + +void SampleViewer::draw_points(const float4x4 &mvp, const float3 &color) +{ + // Render the point set + m_point_shader->set_uniform("mvp", mvp); + float radius = map_slider_to_radius(m_radius); + if (m_scale_radius_with_points) + radius *= 64.0f / std::sqrt(m_point_count); + m_point_shader->set_uniform("point_size", radius); + m_point_shader->set_uniform("color", color); + + int2 range = get_draw_range(); + + m_point_shader->begin(); + m_point_shader->draw_array(Shader::PrimitiveType::Point, range.x, range.y); + m_point_shader->end(); +} + +void SampleViewer::draw_grid(const float4x4 &mvp, float alpha, uint32_t offset, uint32_t count) +{ + m_grid_shader->set_uniform("alpha", alpha); + + for (int axis = CAMERA_XY; axis <= CAMERA_XZ; ++axis) + { + if (m_camera[CAMERA_CURRENT].camera_type == axis || m_camera[CAMERA_CURRENT].camera_type == CAMERA_CURRENT) + { + m_grid_shader->set_uniform("mvp", mul(mvp, m_camera[axis].arcball.matrix())); + m_grid_shader->begin(); + m_grid_shader->draw_array(Shader::PrimitiveType::Line, offset, count); + m_grid_shader->end(); + } + } +} + void SampleViewer::draw_text(const int2 &pos, const string &text, const float4 &color, ImFont *font, int align) const { ImGui::PushFont(font); @@ -1137,137 +1198,10 @@ string SampleViewer::export_all_points_2d(const string &format) return out; } -void SampleViewer::set_view(CameraType view) -{ - m_animate_start_time = (float)ImGui::GetTime(); - m_camera[CAMERA_PREVIOUS] = m_camera[CAMERA_CURRENT]; - m_camera[CAMERA_NEXT] = m_camera[view]; - m_camera[CAMERA_NEXT].persp_factor = (view == CAMERA_CURRENT) ? 1.0f : 0.0f; - m_camera[CAMERA_NEXT].camera_type = view; - m_camera[CAMERA_CURRENT].camera_type = (view == m_camera[CAMERA_CURRENT].camera_type) ? view : CAMERA_CURRENT; - m_view = view; - - m_params.fpsIdling.fpsIdle = 0.f; // during animation, increase FPS -} - -void SampleViewer::update_current_camera() -{ - CameraParameters &camera0 = m_camera[CAMERA_PREVIOUS]; - CameraParameters &camera1 = m_camera[CAMERA_NEXT]; - CameraParameters &camera = m_camera[CAMERA_CURRENT]; - - float time_now = (float)ImGui::GetTime(); - float time_diff = (m_animate_start_time != 0.0f) ? (time_now - m_animate_start_time) : 1.0f; - - // interpolate between the "perspectiveness" at the previous keyframe, - // and the "perspectiveness" of the currently selected camera - float t = smoothStep(0.0f, 1.0f, time_diff); - - camera.zoom = lerp(camera0.zoom, camera1.zoom, t); - camera.view_angle = lerp(camera0.view_angle, camera1.view_angle, t); - camera.persp_factor = lerp(camera0.persp_factor, camera1.persp_factor, t); - if (t >= 1.0f) - { - camera.camera_type = camera1.camera_type; - m_params.fpsIdling.fpsIdle = 9.f; // animation is done, reduce FPS - m_animate_start_time = 0.f; - } - - // if we are dragging the mouse, then just use the current arcball - // rotation, otherwise, interpolate between the previous and next camera - // orientations - if (ImGui::GetIO().MouseDown[0]) - camera.arcball = camera1.arcball; - else - camera.arcball.set_state(qslerp(camera0.arcball.state(), camera1.arcball.state(), t)); -} - -void SampleViewer::generate_points() -{ - Timer timer; - Sampler *generator = m_samplers[m_sampler]; - if (generator->randomized() != m_randomize) - generator->setRandomized(m_randomize); - - generator->setDimensions(m_num_dimensions); - - int num_pts = generator->setNumSamples(m_target_point_count); - m_point_count = num_pts > 0 ? num_pts : m_target_point_count; - - m_time1 = timer.elapsed(); - - m_points.resize(m_point_count, m_num_dimensions); - m_3d_points.resize(m_point_count); - - timer.reset(); - for (int i = 0; i < m_point_count; ++i) - { - vector r(m_num_dimensions, 0.5f); - generator->sample(r.data(), i); - for (int j = 0; j < m_points.sizeY(); ++j) - m_points(i, j) = r[j] - 0.5f; - } - m_time2 = timer.elapsed(); -} - -void SampleViewer::populate_point_subset() -{ - // - // Populate point subsets - // - m_subset_points = m_points; - m_subset_count = m_point_count; - if (m_subset_by_coord) - { - m_subset_count = 0; - for (int i = 0; i < m_points.sizeX(); ++i) - { - float v = m_points(i, std::clamp(m_subset_axis, 0, m_num_dimensions - 1)); - v += 0.5f; - if (v >= (m_subset_level + 0.0f) / m_num_subset_levels && v < (m_subset_level + 1.0f) / m_num_subset_levels) - { - // copy all dimensions (rows) of point i - for (int j = 0; j < m_subset_points.sizeY(); ++j) - m_subset_points(m_subset_count, j) = m_points(i, j); - ++m_subset_count; - } - } - } - - for (size_t i = 0; i < m_3d_points.size(); ++i) - m_3d_points[i] = float3{m_subset_points(i, m_dimension.x), m_subset_points(i, m_dimension.y), - m_subset_points(i, m_dimension.z)}; -} - -void SampleViewer::generate_grid(vector &positions, int grid_res) -{ - int fine_grid_res = 1; - int idx = 0; - positions.resize(4 * (grid_res + 1) * (fine_grid_res)); - float coarse_scale = 1.f / grid_res, fine_scale = 1.f / fine_grid_res; - // for (int z = -1; z <= 1; z+=2) - int z = 0; - for (int i = 0; i <= grid_res; ++i) - { - for (int j = 0; j < fine_grid_res; ++j) - { - positions[idx++] = float3(j * fine_scale - 0.5f, i * coarse_scale - 0.5f, z * 0.5f); - positions[idx++] = float3((j + 1) * fine_scale - 0.5f, i * coarse_scale - 0.5f, z * 0.5f); - positions[idx++] = float3(i * coarse_scale - 0.5f, j * fine_scale - 0.5f, z * 0.5f); - positions[idx++] = float3(i * coarse_scale - 0.5f, (j + 1) * fine_scale - 0.5f, z * 0.5f); - } - } -} float4x4 CameraParameters::matrix(float window_aspect) const { float4x4 model = scaling_matrix(float3(zoom)); - if (camera_type == CAMERA_XY || camera_type == CAMERA_2D) - model = mul(scaling_matrix(float3(1, 1, 0)), model); - if (camera_type == CAMERA_XZ) - model = mul(scaling_matrix(float3(1, 0, 1)), model); - if (camera_type == CAMERA_YZ) - model = mul(scaling_matrix(float3(0, 1, 1)), model); float fH = std::tan(view_angle / 360.0f * M_PI) * dnear; float fW = fH * window_aspect; diff --git a/gui/SampleViewer.h b/gui/app.h similarity index 98% rename from gui/SampleViewer.h rename to gui/app.h index 2705d37..5733eeb 100644 --- a/gui/SampleViewer.h +++ b/gui/app.h @@ -92,7 +92,6 @@ class SampleViewer SampleViewer(); virtual ~SampleViewer(); - void initialize_GL(); void draw_scene(); void draw_gui(); void run() @@ -108,10 +107,8 @@ class SampleViewer void update_GPU_points(bool regenerate = true); void update_GPU_grids(); void set_view(CameraType view); - void update_current_camera(); void draw_editor(); void process_hotkeys(); - void generate_points(); void populate_point_subset(); void generate_grid(vector &positions, int gridRes); void draw_text(const int2 &pos, const std::string &text, const float4 &col, ImFont *font = nullptr, @@ -119,7 +116,6 @@ class SampleViewer void draw_points(const float4x4 &mvp, const float3 &color); void draw_grid(const float4x4 &mvp, float alpha, uint32_t offset, uint32_t count); void draw_2D_points_and_grid(const float4x4 &mvp, int dimX, int dimY, int plotIndex); - void clear_and_setup_viewport(); int2 get_draw_range() const; /// X, Y, Z, and user-defined cameras diff --git a/gui/shader.cpp b/gui/shader.cpp index e7df6d1..35ad821 100644 --- a/gui/shader.cpp +++ b/gui/shader.cpp @@ -1,8 +1,6 @@ #include "shader.h" #include "hello_imgui/hello_imgui.h" - -// hello_imgui_include_opengl.h provides a cross-platform way to include OpenGL headers -#include "hello_imgui/hello_imgui_include_opengl.h" +#include "hello_imgui/hello_imgui_include_opengl.h" // cross-platform way to include OpenGL headers #if !defined(GL_HALF_FLOAT) #define GL_HALF_FLOAT 0x140B @@ -12,6 +10,8 @@ #include +using std::string; + #define CHK(cmd) \ do \ { \ @@ -82,11 +82,30 @@ static GLuint compile_gl_shader(GLenum type, const std::string &name, const std: return id; } -Shader::Shader(const std::string &name, const std::string &vertex_shader, const std::string &fragment_shader, +Shader::Shader(const std::string &name, const std::string &vs_filename, const std::string &fs_filename, BlendMode blend_mode) : m_name(name), m_blend_mode(blend_mode), m_shader_handle(0) { + string vertex_shader, fragment_shader; + { + auto load_shader_file = [](const string &filename) + { + auto shader_txt = HelloImGui::LoadAssetFileData(filename.c_str()); + if (shader_txt.data == nullptr) + throw std::runtime_error(fmt::format("Cannot load point shader from file \"{}\"", filename)); + + return shader_txt; + }; + auto vs = load_shader_file(vs_filename); + auto fs = load_shader_file(fs_filename); + + vertex_shader = string((char *)vs.data, vs.dataSize); + fragment_shader = string((char *)fs.data, fs.dataSize); + + HelloImGui::FreeAssetFileData(&vs); + HelloImGui::FreeAssetFileData(&fs); + } GLuint vertex_shader_handle = compile_gl_shader(GL_VERTEX_SHADER, name, vertex_shader), fragment_shader_handle = compile_gl_shader(GL_FRAGMENT_SHADER, name, fragment_shader); @@ -445,7 +464,7 @@ void Shader::begin() case UniformBuffer: if (buf.ndim > 2) throw std::runtime_error("\"" + m_name + "\": uniform attribute \"" + key + - "\" has an invalid shapeension (expected ndim=0/1/2, got " + + "\" has an invalid shape (expected ndim=0/1/2, got " + std::to_string(buf.ndim) + ")"); switch (buf.dtype) { diff --git a/gui/shader.h b/gui/shader.h index 7f6a87b..97480d3 100644 --- a/gui/shader.h +++ b/gui/shader.h @@ -1,19 +1,6 @@ -/* - NanoGUI was developed by Wenzel Jakob . - The widget drawing code is based on the NanoVG demo application - by Mikko Mononen. - - All rights reserved. Use of this source code is governed by a - BSD-style license that can be found in the LICENSE.txt file. -*/ - /** - * \file nanogui/shader.h - * - * \brief Defines abstractions for shaders that work with OpenGL, - * OpenGL ES, and Metal. - */ - + \file shader.h +*/ #pragma once #include "linalg.h" @@ -21,6 +8,17 @@ #include #include +/// An abstraction for shaders that work with OpenGL, OpenGL ES, and (at some point down the road, hopefully) Metal. +/* + This is adapted from NanoGUI's Shader class. Copyright follows. + ---------- + NanoGUI was developed by Wenzel Jakob . + The widget drawing code is based on the NanoVG demo application + by Mikko Mononen. + + All rights reserved. Use of this source code is governed by a + BSD-style license that can be found in the LICENSE.txt file. +*/ class Shader { public: @@ -42,18 +40,18 @@ class Shader }; /** - * \brief Initialize the shader using the specified source strings. - * - * \param name - * A name identifying this shader - * - * \param vertex_shader - * The source of the vertex shader as a string. - * - * \param fragment_shader - * The source of the fragment shader as a string. - */ - Shader(const std::string &name, const std::string &vertex_shader, const std::string &fragment_shader, + Initialize the shader using the source files (read from the assets directory). + + \param name + A name identifying this shader + + \param vs_filename + Filename of the vertex shader source code. + + \param fs_filename + Filename of the fragment shader source code. + */ + Shader(const std::string &name, const std::string &vs_filename, const std::string &fs_filename, BlendMode blend_mode = BlendMode::None); /// Return the render pass associated with this shader @@ -72,14 +70,13 @@ class Shader } /** - * \brief Upload a buffer (e.g. vertex positions) that will be associated - * with a named shader parameter. - * - * Note that this function should be used both for 'varying' and 'uniform' - * data---the implementation takes care of routing the data to the right - * endpoint. Matrices should be specified in column-major order. - * - * The buffer will be replaced if it is already present. + Upload a buffer (e.g. vertex positions) that will be associated with a named shader parameter. + + Note that this function should be used both for 'varying' and 'uniform' + data---the implementation takes care of routing the data to the right + endpoint. Matrices should be specified in column-major order. + + The buffer will be replaced if it is already present. */ void set_buffer(const std::string &name, VariableType type, size_t ndim, const size_t *shape, const void *data); @@ -125,10 +122,7 @@ class Shader set_buffer(name, get_type(), 2, shape, &value); } - /** - * \brief Upload a uniform variable (e.g. a vector or matrix) that will be - * associated with a named shader parameter. - */ + /// Upload a uniform variable (e.g. a vector or matrix) that will be associated with a named shader parameter. template void set_uniform(const std::string &name, const T &value) { @@ -158,40 +152,38 @@ class Shader // void set_texture(const std::string &name, Texture *texture); /** - * \brief Begin drawing using this shader - * - * Note that any updates to 'uniform' and 'varying' shader parameters - * *must* occur prior to this method call. - * - * The Python bindings also include extra \c __enter__ and \c __exit__ - * aliases so that the shader can be activated via Pythons 'with' - * statement. - */ + Begin drawing using this shader + + Note that any updates to 'uniform' and 'varying' shader parameters + *must* occur prior to this method call. + + The Python bindings also include extra \c __enter__ and \c __exit__ + aliases so that the shader can be activated via Pythons 'with' + statement. + */ void begin(); /// End drawing using this shader void end(); /** - * \brief Render geometry arrays, either directly or - * using an index array. - * - * \param primitive_type - * What type of geometry should be rendered? - * - * \param offset - * First index to render. Must be a multiple of 2 or 3 for lines and - * triangles, respectively (unless specified using strips). - * - * \param offset - * Number of indices to render. Must be a multiple of 2 or 3 for lines - * and triangles, respectively (unless specified using strips). - * - * \param indexed - * Render indexed geometry? In this case, an - * \c uint32_t valued buffer with name \c indices - * must have been uploaded using \ref set(). - */ + Render geometry arrays, either directly or using an index array. + + \param primitive_type + What type of geometry should be rendered? + + \param offset + First index to render. Must be a multiple of 2 or 3 for lines and triangles, respectively (unless specified + using strips). + + \param offset + Number of indices to render. Must be a multiple of 2 or 3 for lines and triangles, respectively (unless + specified using strips). + + \param indexed + Render indexed geometry? In this case, an \c uint32_t valued buffer with name \c indices must have been + uploaded using \ref set(). + */ void draw_array(PrimitiveType primitive_type, size_t offset, size_t count, bool indexed = false); #if defined(HELLOIMGUI_HAS_OPENGL) From e21c20ac1978a5fd7480f0687dfcf0c7c412d9d4 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Fri, 1 Dec 2023 23:14:46 +0100 Subject: [PATCH 17/27] fixing ci --- .github/workflows/ci-emscripten.yml | 2 +- CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-emscripten.yml b/.github/workflows/ci-emscripten.yml index 81f3b14..cb91431 100644 --- a/.github/workflows/ci-emscripten.yml +++ b/.github/workflows/ci-emscripten.yml @@ -1,4 +1,4 @@ -name: macOS build +name: Emscripten build on: push: diff --git a/CMakeLists.txt b/CMakeLists.txt index d514687..f19ad39 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -222,7 +222,7 @@ set_target_properties(samplerlib PROPERTIES # Now build the Samplin' Safari viewer app string(TIMESTAMP YEAR "%Y") -set(output_name "SamplinSafari") +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}) From 961312d952c758976e8d18f0a6bcd693106d7da1 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Fri, 1 Dec 2023 23:16:44 +0100 Subject: [PATCH 18/27] Create ci-emscripten2.yml --- .github/workflows/ci-emscripten2.yml | 56 ++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/ci-emscripten2.yml diff --git a/.github/workflows/ci-emscripten2.yml b/.github/workflows/ci-emscripten2.yml new file mode 100644 index 0000000..e1b35d7 --- /dev/null +++ b/.github/workflows/ci-emscripten2.yml @@ -0,0 +1,56 @@ +name: Emscripten linux build + +on: + push: + branches: + - "*" + pull_request: + - "*" + paths: + # This action only runs on push when C++ files are changed + - "**.cpp" + - "**.h" + - "**.cmake" + - "**Lists.txt" + - "**-emscripten2.yml" + workflow_dispatch: + +env: + CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules + +jobs: + build: + name: Web app + runs-on: ubuntu-latest + + steps: + - name: Install dependencies + run: sudo apt-get update && sudo apt-get install cmake xorg-dev libglu1-mesa-dev zlib1g-dev libxrandr-dev ninja-build 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/ccache-action@v1.2 + + - 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 From f9f867d4867c49a65d3471b4b9176846c903a335 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Fri, 1 Dec 2023 23:18:49 +0100 Subject: [PATCH 19/27] Update app.cpp --- gui/app.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/gui/app.cpp b/gui/app.cpp index 2f77b08..e7ac00a 100644 --- a/gui/app.cpp +++ b/gui/app.cpp @@ -2,6 +2,7 @@ \author Wojciech Jarosz */ +#define _USE_MATH_DEFINES #define NOMINMAX #include "app.h" From ec0e183a73a55a29ac02318d1daffead51ff440b Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Sat, 2 Dec 2023 00:13:40 +0100 Subject: [PATCH 20/27] Update ci-emscripten.yml --- .github/workflows/ci-emscripten.yml | 37 +++++++++++++++-------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci-emscripten.yml b/.github/workflows/ci-emscripten.yml index cb91431..5b454d3 100644 --- a/.github/workflows/ci-emscripten.yml +++ b/.github/workflows/ci-emscripten.yml @@ -1,26 +1,13 @@ -name: Emscripten build - -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: +name: Publish web app version to gh-pages + +on: workflow_dispatch env: CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules jobs: build: - name: Web app + name: Build and deploy runs-on: macos-12 steps: @@ -48,9 +35,23 @@ jobs: - name: Build run: cmake --build ${{github.workspace}}/build --parallel 4 + - name: Copy web app + working-directory: ${{github.workspace}}/build + run: | + mkdir deploy + cp SamplinSafari.data SamplinSafari.html SamplinSafari.js SamplinSafari.wasm deploy/ + mv deploy/SamplinSafari.html deploy/index.html + - name: Archive build artifacts uses: actions/upload-artifact@v3 with: name: build-artifacts path: | - ${{github.workspace}}/build + ${{github.workspace}}/build/deploy + + - name: Publish + uses: peaceiris/actions-gh-pages@v3 + with: + personal_token: ${{ secrets.GITHUB_TOKEN }} + publish_branch: gh-pages + publish_dir: ${{github.workspace}}/build/deploy From 83b7788f7b07a568f874bba971bd1226599f58b2 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Sat, 2 Dec 2023 00:17:25 +0100 Subject: [PATCH 21/27] Update ci-emscripten.yml --- .github/workflows/ci-emscripten.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-emscripten.yml b/.github/workflows/ci-emscripten.yml index 5b454d3..58e0ce5 100644 --- a/.github/workflows/ci-emscripten.yml +++ b/.github/workflows/ci-emscripten.yml @@ -1,6 +1,19 @@ name: Publish web app version to gh-pages -on: workflow_dispatch +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 From 2af90123a9bbafe0fd7102471ff3d488d8fc2dbe Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Sat, 2 Dec 2023 00:26:52 +0100 Subject: [PATCH 22/27] fixing ci --- .github/workflows/ci-emscripten.yml | 16 ++++---- .github/workflows/ci-emscripten2.yml | 56 ---------------------------- 2 files changed, 8 insertions(+), 64 deletions(-) delete mode 100644 .github/workflows/ci-emscripten2.yml diff --git a/.github/workflows/ci-emscripten.yml b/.github/workflows/ci-emscripten.yml index 58e0ce5..1189204 100644 --- a/.github/workflows/ci-emscripten.yml +++ b/.github/workflows/ci-emscripten.yml @@ -48,19 +48,19 @@ jobs: - name: Build run: cmake --build ${{github.workspace}}/build --parallel 4 - - name: Copy web app - working-directory: ${{github.workspace}}/build - run: | - mkdir deploy - cp SamplinSafari.data SamplinSafari.html SamplinSafari.js SamplinSafari.wasm deploy/ - mv deploy/SamplinSafari.html deploy/index.html - - name: Archive build artifacts uses: actions/upload-artifact@v3 with: name: build-artifacts path: | - ${{github.workspace}}/build/deploy + ${{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 diff --git a/.github/workflows/ci-emscripten2.yml b/.github/workflows/ci-emscripten2.yml deleted file mode 100644 index e1b35d7..0000000 --- a/.github/workflows/ci-emscripten2.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Emscripten linux build - -on: - push: - branches: - - "*" - pull_request: - - "*" - paths: - # This action only runs on push when C++ files are changed - - "**.cpp" - - "**.h" - - "**.cmake" - - "**Lists.txt" - - "**-emscripten2.yml" - workflow_dispatch: - -env: - CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules - -jobs: - build: - name: Web app - runs-on: ubuntu-latest - - steps: - - name: Install dependencies - run: sudo apt-get update && sudo apt-get install cmake xorg-dev libglu1-mesa-dev zlib1g-dev libxrandr-dev ninja-build 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/ccache-action@v1.2 - - - 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 From 78e2c6822272afc503055e4f17727ba45f446044 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Tue, 5 Dec 2023 01:06:07 +0700 Subject: [PATCH 23/27] emscripten improvements - added "About" dialog - added export support to web version --- CMakeLists.txt | 2 +- .../icons}/icon_128x128.png | Bin .../icons}/icon_128x128@2x.png | Bin .../icons}/icon_16x16.png | Bin .../icons}/icon_16x16@2x.png | Bin .../icons}/icon_256x256.png | Bin .../icons}/icon_256x256@2x.png | Bin .../icons}/icon_32x32.png | Bin .../icons}/icon_32x32@2x.png | Bin .../icons}/icon_512x512.png | Bin .../icons}/icon_512x512@2x.png | Bin gui/app.cpp | 474 ++++++++++++------ gui/app.h | 4 +- shell.emscripten.html | 251 ++++++++++ 14 files changed, 570 insertions(+), 161 deletions(-) rename {resources/icon-assets => assets/icons}/icon_128x128.png (100%) rename {resources/icon-assets => assets/icons}/icon_128x128@2x.png (100%) rename {resources/icon-assets => assets/icons}/icon_16x16.png (100%) rename {resources/icon-assets => assets/icons}/icon_16x16@2x.png (100%) rename {resources/icon-assets => assets/icons}/icon_256x256.png (100%) rename {resources/icon-assets => assets/icons}/icon_256x256@2x.png (100%) rename {resources/icon-assets => assets/icons}/icon_32x32.png (100%) rename {resources/icon-assets => assets/icons}/icon_32x32@2x.png (100%) rename {resources/icon-assets => assets/icons}/icon_512x512.png (100%) rename {resources/icon-assets => assets/icons}/icon_512x512@2x.png (100%) create mode 100644 shell.emscripten.html diff --git a/CMakeLists.txt b/CMakeLists.txt index f19ad39..db03b67 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ project( SamplinSafari DESCRIPTION "A research tool to visualize and interactively inspect high-dimensional (quasi) Monte Carlo samplers." - VERSION 1.1.0 + VERSION 2.0.0 LANGUAGES C CXX ) diff --git a/resources/icon-assets/icon_128x128.png b/assets/icons/icon_128x128.png similarity index 100% rename from resources/icon-assets/icon_128x128.png rename to assets/icons/icon_128x128.png diff --git a/resources/icon-assets/icon_128x128@2x.png b/assets/icons/icon_128x128@2x.png similarity index 100% rename from resources/icon-assets/icon_128x128@2x.png rename to assets/icons/icon_128x128@2x.png diff --git a/resources/icon-assets/icon_16x16.png b/assets/icons/icon_16x16.png similarity index 100% rename from resources/icon-assets/icon_16x16.png rename to assets/icons/icon_16x16.png diff --git a/resources/icon-assets/icon_16x16@2x.png b/assets/icons/icon_16x16@2x.png similarity index 100% rename from resources/icon-assets/icon_16x16@2x.png rename to assets/icons/icon_16x16@2x.png diff --git a/resources/icon-assets/icon_256x256.png b/assets/icons/icon_256x256.png similarity index 100% rename from resources/icon-assets/icon_256x256.png rename to assets/icons/icon_256x256.png diff --git a/resources/icon-assets/icon_256x256@2x.png b/assets/icons/icon_256x256@2x.png similarity index 100% rename from resources/icon-assets/icon_256x256@2x.png rename to assets/icons/icon_256x256@2x.png diff --git a/resources/icon-assets/icon_32x32.png b/assets/icons/icon_32x32.png similarity index 100% rename from resources/icon-assets/icon_32x32.png rename to assets/icons/icon_32x32.png diff --git a/resources/icon-assets/icon_32x32@2x.png b/assets/icons/icon_32x32@2x.png similarity index 100% rename from resources/icon-assets/icon_32x32@2x.png rename to assets/icons/icon_32x32@2x.png diff --git a/resources/icon-assets/icon_512x512.png b/assets/icons/icon_512x512.png similarity index 100% rename from resources/icon-assets/icon_512x512.png rename to assets/icons/icon_512x512.png diff --git a/resources/icon-assets/icon_512x512@2x.png b/assets/icons/icon_512x512@2x.png similarity index 100% rename from resources/icon-assets/icon_512x512@2x.png rename to assets/icons/icon_512x512@2x.png diff --git a/gui/app.cpp b/gui/app.cpp index e7ac00a..56c565b 100644 --- a/gui/app.cpp +++ b/gui/app.cpp @@ -45,6 +45,8 @@ using std::to_string; #include #include +static bool g_show_modal = true; + namespace ImGui { @@ -68,16 +70,14 @@ static float map_slider_to_radius(float sliderValue) return sliderValue * sliderValue * 32.0f + 2.0f; } -static float4x4 layout_2d_matrix(int num_dims, int dim_x, int dim_y) +static float4x4 layout_2d_matrix(int num_dims, int2 dims) { float cell_spacing = 1.f / (num_dims - 1); float cell_size = 0.96f / (num_dims - 1); - float x_offset = dim_x - (num_dims - 2) / 2.0f; - float y_offset = -(dim_y - 1 - (num_dims - 2) / 2.0f); + float2 offset = (dims - int2{0, 1} - float2{(num_dims - 2) / 2.0f}) * float2{1, -1}; - return mul(translation_matrix(float3{cell_spacing * x_offset, cell_spacing * y_offset, 1}), - scaling_matrix(float3{cell_size, cell_size, 1})); + return mul(translation_matrix(float3{offset * cell_spacing, 1}), scaling_matrix(float3{float2{cell_size}, 1})); } SampleViewer::SampleViewer() @@ -176,73 +176,95 @@ SampleViewer::SampleViewer() if (!HelloImGui::AssetExists(roboto_r) || !HelloImGui::AssetExists(roboto_b)) return; - for (auto font_size : {14.f, 8.f, 9.f, 10.f, 11.f, 12.f, 13.f, 15.f, 16.f, 17.f, 18.f}) + for (auto font_size : + {14.f, 8.f, 9.f, 10.f, 11.f, 12.f, 13.f, 15.f, 16.f, 17.f, 18.f, 20.f, 22.f, 24.f, 26.f, 28.f, 30.f}) { m_regular[(int)font_size] = HelloImGui::LoadFontTTF_WithFontAwesomeIcons(roboto_r, font_size); m_bold[(int)font_size] = HelloImGui::LoadFontTTF_WithFontAwesomeIcons(roboto_b, font_size); } }; + m_params.callbacks.ShowMenus = []() + { + string text = ICON_FA_INFO_CIRCLE; + auto posX = (ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - ImGui::CalcTextSize(text.c_str()).x - + ImGui::GetScrollX() - 2 * ImGui::GetStyle().ItemSpacing.x); + if (posX > ImGui::GetCursorPosX()) + ImGui::SetCursorPosX(posX); + if (ImGui::MenuItem(text.c_str())) + g_show_modal = true; + }; + m_params.callbacks.ShowAppMenuItems = [this]() { - if (ImGui::MenuItem(ICON_FA_SAVE " Export as EPS")) + auto save_files = [this](const string &basename, const string &ext) { - try + vector saved_files; { - auto basename = pfd::save_file("Base filename").result(); - if (basename.empty()) - return; - HelloImGui::Log(HelloImGui::LogLevel::Info, "Saving to base filename: %s.", basename.c_str()); - ofstream fileAll(basename + "_all2D.eps"); - fileAll << export_all_points_2d("eps"); + saved_files.push_back(basename + "_all2D." + ext); + ofstream fileAll(saved_files.back()); + fileAll << export_all_points_2d(ext); - ofstream fileXYZ(basename + "_012.eps"); - fileXYZ << export_XYZ_points("eps"); + saved_files.push_back(basename + "_012." + ext); + ofstream fileXYZ(saved_files.back()); + fileXYZ << export_XYZ_points(ext); for (int y = 0; y < m_num_dimensions; ++y) for (int x = 0; x < y; ++x) { - ofstream fileXY(fmt::format("{:s}_{:d}{:d}.eps", basename, x, y)); - fileXY << export_points_2d("eps", CAMERA_XY, {x, y, 2}); + saved_files.push_back(fmt::format("{:s}_{:d}{:d}.{}", basename, x, y, ext)); + ofstream fileXY(saved_files.back()); + fileXY << export_points_2d(ext, CAMERA_XY, {x, y, 2}); } } - catch (const std::exception &e) - { - fmt::print(stderr, "An error occurred: {}.", e.what()); - HelloImGui::Log(HelloImGui::LogLevel::Error, "An error occurred: %s.", e.what()); - } - } + return saved_files; + }; - if (ImGui::MenuItem(ICON_FA_SAVE " Export as SVG")) + for (string ext : {"eps", "svg"}) { - try +#ifndef __EMSCRIPTEN__ + if (ImGui::MenuItem(fmt::format("{} Export as {}...", ICON_FA_SAVE, ext).c_str())) { - auto basename = pfd::save_file("Base filename").result(); - if (basename.empty()) - return; - - HelloImGui::Log(HelloImGui::LogLevel::Info, "Saving to base filename: %s.", basename.c_str()); - - ofstream fileAll(basename + "_all2D.svg"); - fileAll << export_all_points_2d("svg"); - - ofstream fileXYZ(basename + "_012.svg"); - fileXYZ << export_XYZ_points("svg"); + try + { + auto basename = pfd::save_file("Base filename").result(); + if (!basename.empty()) + (void)save_files(basename, ext); + } + catch (const std::exception &e) + { + fmt::print(stderr, "An error occurred while exporting to {}: {}.", ext, e.what()); + HelloImGui::Log(HelloImGui::LogLevel::Error, + fmt::format("An error occurred while exporting to {}: {}.", ext, e.what()).c_str()); + } + } +#else + if (ImGui::BeginMenu(fmt::format("{} Export as {}...", ICON_FA_SAVE, ext).c_str())) + { + const size_t filename_max_length = 128; + static char buff[filename_max_length]; - for (int y = 0; y < m_num_dimensions; ++y) - for (int x = 0; x < y; ++x) + if (ImGui::InputText("Base filename", buff, filename_max_length, ImGuiInputTextFlags_EnterReturnsTrue)) + { + try { - ofstream fileXY(fmt::format("{:s}_{:d}{:d}.svg", basename, x, y)); - fileXY << export_points_2d("svg", CAMERA_XY, {x, y, 2}); + vector saved_files = save_files(buff, ext); + for (auto &saved_file : saved_files) + emscripten_run_script(fmt::format("saveFileFromMemoryFSToDisk('{}');", saved_file).c_str()); } + catch (const std::exception &e) + { + fmt::print(stderr, "An error occurred while exporting to {}: {}.", ext, e.what()); + HelloImGui::Log( + HelloImGui::LogLevel::Error, + fmt::format("An error occurred while exporting to {}: {}.", ext, e.what()).c_str()); + } + } + ImGui::EndMenu(); } - catch (const std::exception &e) - { - fmt::print(stderr, "An error occurred: {}.", e.what()); - HelloImGui::Log(HelloImGui::LogLevel::Error, "An error occurred: %s.", e.what()); - } +#endif } }; @@ -292,6 +314,7 @@ SampleViewer::SampleViewer() }; m_params.callbacks.ShowGui = [this]() { draw_gui(); }; m_params.callbacks.CustomBackground = [this]() { draw_scene(); }; + m_idling_backup = m_params.fpsIdling.enableIdling; } SampleViewer::~SampleViewer() @@ -339,7 +362,7 @@ void SampleViewer::draw_gui() { for (int i = 0; i < m_num_dimensions - 1; ++i) { - float4x4 pos = layout_2d_matrix(m_num_dimensions, i, m_num_dimensions - 1); + float4x4 pos = layout_2d_matrix(m_num_dimensions, int2{i, m_num_dimensions - 1}); float4 text_pos = mul(mvp, mul(pos, float4{0.f, -0.5f, 0.0f, 1.0f})); float2 text_2d_pos((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); draw_text(m_viewport_pos + @@ -347,7 +370,7 @@ void SampleViewer::draw_gui() to_string(i), float4(1.0f, 1.0f, 1.0f, 0.75f), m_regular[16], TextAlign_CENTER | TextAlign_BOTTOM); - pos = layout_2d_matrix(m_num_dimensions, 0, i + 1); + pos = layout_2d_matrix(m_num_dimensions, int2{0, i + 1}); text_pos = mul(mvp, mul(pos, float4{-0.5f, 0.f, 0.0f, 1.0f})); text_2d_pos = float2((text_pos.x / text_pos.w + 1) / 2, (text_pos.y / text_pos.w + 1) / 2); draw_text(m_viewport_pos + @@ -379,13 +402,141 @@ void SampleViewer::draw_gui() float4(1.0f, 1.0f, 1.0f, 0.75f), m_regular[11], TextAlign_CENTER | TextAlign_TOP); } } + + if (g_show_modal) + { + ImGui::OpenPopup("About"); + g_show_modal = false; + } + + // Always center this window when appearing + ImVec2 center = ImGui::GetMainViewport()->GetCenter(); + ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f)); + + if (ImGui::BeginPopupModal("About", NULL, ImGuiWindowFlags_AlwaysAutoResize)) + { + if (ImGui::BeginTable("about_table1", 2)) + { + ImGui::TableSetupColumn("one", ImGuiTableColumnFlags_WidthFixed, HelloImGui::EmSize() * 10); + ImGui::TableSetupColumn("two", ImGuiTableColumnFlags_WidthFixed, HelloImGui::EmSize() * 35); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + // right align the image + { + auto posX = (ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - 128.f - ImGui::GetScrollX() - + 2 * ImGui::GetStyle().ItemSpacing.x); + if (posX > ImGui::GetCursorPosX()) + ImGui::SetCursorPosX(posX); + } + HelloImGui::ImageFromAsset("icons/icon_128x128.png"); // Display a static image + + ImGui::TableNextColumn(); + ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + HelloImGui::EmSize() * 35); + + ImGui::PushFont(m_bold[30]); + ImGui::Text("Samplin' Safari"); + ImGui::PopFont(); + + ImGui::PushFont(m_bold[18]); + ImGui::Text("version v2.0.0 (64 bit)"); + ImGui::PopFont(); + // ImGui::PushFont(m_regular[10]); + // ImGui::Text("Built using the XXX backend on 2023-12-04."); + // ImGui::PopFont(); + + ImGui::Spacing(); + + ImGui::PushFont(m_bold[16]); + ImGui::Text("Samplin' Safari is a research tool to visualize and interactively inspect high-dimensional " + "(quasi) Monte Carlo samplers."); + ImGui::PopFont(); + + ImGui::Spacing(); + + ImGui::PopTextWrapPos(); + ImGui::EndTable(); + } + + auto right_align = [](const string &text) + { + auto posX = (ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - ImGui::CalcTextSize(text.c_str()).x - + ImGui::GetScrollX() - 2 * ImGui::GetStyle().ItemSpacing.x); + if (posX > ImGui::GetCursorPosX()) + ImGui::SetCursorPosX(posX); + ImGui::Text("%s", text.c_str()); + }; + + auto add_library = [this, right_align](string name, string desc) + { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + + ImGui::PushFont(m_bold[14]); + right_align(name); + ImGui::PopFont(); + + ImGui::TableNextColumn(); + ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + HelloImGui::EmSize() * 34); + ImGui::PushFont(m_regular[14]); + ImGui::Text("%s", desc.c_str()); + ImGui::PopFont(); + }; + + ImGui::Spacing(); + ImGui::Separator(); + ImGui::Spacing(); + + ImGui::Text("It is freely available under a 3-clause BSD license and is developed by Wojciech Jarosz, " + "initially as part of the publication:"); + + ImGui::Spacing(); + + ImGui::Indent(HelloImGui::EmSize() * 1); + ImGui::PushFont(m_bold[14]); + ImGui::Text("Orthogonal Array Sampling for Monte Carlo Rendering"); + ImGui::PopFont(); + ImGui::Text("Wojciech Jarosz, Afnan Enayet, Andrew Kensler, Charlie Kilpatrick, Per Christensen.\n" + "In Computer Graphics Forum(Proceedings of EGSR), 38(4), July 2019."); + ImGui::Unindent(HelloImGui::EmSize() * 1); + ImGui::Spacing(); + ImGui::Spacing(); + ImGui::Text("It additionally makes use of the following external libraries:\n\n"); + + if (ImGui::BeginTable("about_table2", 2)) + { + ImGui::TableSetupColumn("one", ImGuiTableColumnFlags_WidthFixed, HelloImGui::EmSize() * 10); + ImGui::TableSetupColumn("two", ImGuiTableColumnFlags_WidthFixed, HelloImGui::EmSize() * 35); + + add_library("Hello ImGui", "Pascal Thomet's cross-platform starter-kit for Dear ImGui"); + add_library("Dear ImGui", "Omar Cornut's immediate-mode graphical user interface for C++"); + add_library("GLFW", "Multi-platform OpenGL/windowing library on the desktop"); + add_library("NanoGUI", "Bits of code from Wenzel Jakob's BSD-licensed NanoGUI library (the shader " + "abstraction and arcball)"); + add_library("{fmt}", "A modern formatting library"); + add_library("halton/sobol", "Leonhard Gruenschloss's MIT-licensed code for Halton and Sobol sequences"); + add_library("linalg", "Sterling Orsten's public domain, single header short vector math library for C++"); + add_library("portable-file-dialogs", + "Sam Hocevar's WTFPL portable GUI dialogs library, C++11, single-header"); + add_library("pcg32", "Wenzel Jakob's tiny self-contained C++ version of Melissa O'Neill's PCG32 " + "pseudorandom number generator"); + add_library("galois++", "My small C++ library for arithmetic over general Galois fields based on " + "Art Owen's code in Statlib"); + ImGui::EndTable(); + } + + if (ImGui::Button("Dismiss", ImVec2(120, 0))) + ImGui::CloseCurrentPopup(); + } + ImGui::SetItemDefaultFocus(); + ImGui::EndPopup(); } void SampleViewer::draw_editor() { auto big_header = [this](const char *label, ImGuiTreeNodeFlags flags = 0) { - ImGui::PushFont(m_bold[16.f]); + ImGui::PushFont(m_bold[16]); bool ret = ImGui::CollapsingHeader(label, flags | ImGuiTreeNodeFlags_DefaultOpen); ImGui::PopFont(); return ret; @@ -848,17 +999,16 @@ void SampleViewer::update_GPU_grids() m_grid_shader->set_buffer("position", positions); } -void SampleViewer::draw_2D_points_and_grid(const float4x4 &mvp, int dim_x, int dim_y, int plot_index) +void SampleViewer::draw_2D_points_and_grid(const float4x4 &mvp, int2 dims, int plot_index) { - float4x4 pos = layout_2d_matrix(m_num_dimensions, dim_x, dim_y); + float4x4 pos = layout_2d_matrix(m_num_dimensions, dims); - // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); // Render the point set m_point_2d_shader->set_uniform("mvp", mul(mvp, pos)); float radius = map_slider_to_radius(m_radius / (m_num_dimensions - 1)); if (m_scale_radius_with_points) radius *= 64.0f / std::sqrt(m_point_count); - m_point_2d_shader->set_uniform("pointSize", radius); + m_point_2d_shader->set_uniform("point_size", radius); m_point_2d_shader->set_uniform("color", m_point_color); int2 range = get_draw_range(); @@ -866,7 +1016,6 @@ void SampleViewer::draw_2D_points_and_grid(const float4x4 &mvp, int dim_x, int d m_point_2d_shader->draw_array(Shader::PrimitiveType::Point, m_subset_count * plot_index + range.x, range.y); m_point_2d_shader->end(); - // m_render_pass->set_depth_test(RenderPass::DepthTest::Less, true); if (m_show_bbox) { m_grid_shader->set_uniform("alpha", 1.0f); @@ -897,11 +1046,11 @@ void SampleViewer::draw_scene() { auto &io = ImGui::GetIO(); - // - // clear the scene and set up viewports - // try { + // + // clear the scene and set up viewports + // const float4 background_color{0.f, 0.f, 0.f, 1.f}; // first clear the entire window with the background color @@ -926,129 +1075,136 @@ void SampleViewer::draw_scene() CHK(glEnable(GL_DEPTH_TEST)); CHK(glDepthFunc(GL_LESS)); CHK(glDepthMask(GL_TRUE)); - } - catch (const std::exception &e) - { - fmt::print(stderr, "OpenGL drawing failed:\n\t{}.", e.what()); - HelloImGui::Log(HelloImGui::LogLevel::Error, "OpenGL drawing failed:\n\t%s.", e.what()); - } - // - // process camera movement - // - if (!io.WantCaptureMouse) - { - m_camera[CAMERA_NEXT].zoom = std::max(0.001, m_camera[CAMERA_NEXT].zoom * pow(1.1, io.MouseWheel)); - if (io.MouseClicked[0]) - { - // on mouse down we start switching to a perspective camera - // and start recording the arcball rotation in CAMERA_NEXT - set_view(CAMERA_CURRENT); - m_camera[CAMERA_NEXT].arcball.button(int2{io.MousePos} - m_viewport_pos, io.MouseDown[0]); - m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; - } - if (io.MouseReleased[0]) + // + // process camera movement + // + if (!io.WantCaptureMouse) { - m_camera[CAMERA_NEXT].arcball.button(int2{io.MousePos} - m_viewport_pos, io.MouseDown[0]); - // since the time between mouse down and up could be shorter - // than the animation duration, we override the previous - // camera's arcball on mouse up to complete the animation - m_camera[CAMERA_PREVIOUS].arcball = m_camera[CAMERA_NEXT].arcball; - m_camera[CAMERA_PREVIOUS].camera_type = m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; + m_camera[CAMERA_NEXT].zoom = std::max(0.001, m_camera[CAMERA_NEXT].zoom * pow(1.1, io.MouseWheel)); + if (io.MouseClicked[0]) + { + // on mouse down we start switching to a perspective camera + // and start recording the arcball rotation in CAMERA_NEXT + set_view(CAMERA_CURRENT); + m_camera[CAMERA_NEXT].arcball.button(int2{io.MousePos} - m_viewport_pos, io.MouseDown[0]); + m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; + } + if (io.MouseReleased[0]) + { + m_camera[CAMERA_NEXT].arcball.button(int2{io.MousePos} - m_viewport_pos, io.MouseDown[0]); + // since the time between mouse down and up could be shorter + // than the animation duration, we override the previous + // camera's arcball on mouse up to complete the animation + m_camera[CAMERA_PREVIOUS].arcball = m_camera[CAMERA_NEXT].arcball; + m_camera[CAMERA_PREVIOUS].camera_type = m_camera[CAMERA_NEXT].camera_type = CAMERA_CURRENT; + } + + m_camera[CAMERA_NEXT].arcball.motion(int2{io.MousePos} - m_viewport_pos); } - m_camera[CAMERA_NEXT].arcball.motion(int2{io.MousePos} - m_viewport_pos); - } + // + // perform animation of camera parameters, e.g. after clicking one of the view buttons + // + { + CameraParameters &camera0 = m_camera[CAMERA_PREVIOUS]; + CameraParameters &camera1 = m_camera[CAMERA_NEXT]; + CameraParameters &camera = m_camera[CAMERA_CURRENT]; - // - // perform animation of camera parameters, e.g. after clicking one of the view buttons - // - { - CameraParameters &camera0 = m_camera[CAMERA_PREVIOUS]; - CameraParameters &camera1 = m_camera[CAMERA_NEXT]; - CameraParameters &camera = m_camera[CAMERA_CURRENT]; + float time_now = (float)ImGui::GetTime(); + float time_diff = (m_animate_start_time != 0.0f) ? (time_now - m_animate_start_time) : 1.0f; - float time_now = (float)ImGui::GetTime(); - float time_diff = (m_animate_start_time != 0.0f) ? (time_now - m_animate_start_time) : 1.0f; + // interpolate between the "perspectiveness" at the previous keyframe, + // and the "perspectiveness" of the currently selected camera + float t = smoothStep(0.0f, 1.0f, time_diff); - // interpolate between the "perspectiveness" at the previous keyframe, - // and the "perspectiveness" of the currently selected camera - float t = smoothStep(0.0f, 1.0f, time_diff); + camera.zoom = lerp(camera0.zoom, camera1.zoom, t); + camera.view_angle = lerp(camera0.view_angle, camera1.view_angle, t); + camera.persp_factor = lerp(camera0.persp_factor, camera1.persp_factor, t); + if (t >= 1.0f) + { + camera.camera_type = camera1.camera_type; + // m_params.fpsIdling.fpsIdle = 9.f; // animation is done, reduce FPS + if (m_animate_start_time != 0.0f) + m_params.fpsIdling.enableIdling = m_idling_backup; + m_animate_start_time = 0.f; + } - camera.zoom = lerp(camera0.zoom, camera1.zoom, t); - camera.view_angle = lerp(camera0.view_angle, camera1.view_angle, t); - camera.persp_factor = lerp(camera0.persp_factor, camera1.persp_factor, t); - if (t >= 1.0f) - { - camera.camera_type = camera1.camera_type; - m_params.fpsIdling.fpsIdle = 9.f; // animation is done, reduce FPS - m_animate_start_time = 0.f; + // if we are dragging the mouse, then just use the current arcball + // rotation, otherwise, interpolate between the previous and next camera + // orientations + if (io.MouseDown[0]) + camera.arcball = camera1.arcball; + else + camera.arcball.set_state(qslerp(camera0.arcball.state(), camera1.arcball.state(), t)); } - // if we are dragging the mouse, then just use the current arcball - // rotation, otherwise, interpolate between the previous and next camera - // orientations - if (io.MouseDown[0]) - camera.arcball = camera1.arcball; - else - camera.arcball.set_state(qslerp(camera0.arcball.state(), camera1.arcball.state(), t)); - } - - float4x4 mvp = m_camera[CAMERA_CURRENT].matrix(float(m_viewport_size.x) / m_viewport_size.y); - - // - // Now render the points and grids - // - if (m_view == CAMERA_2D) - { - int plot_index = 0; - for (int y = 0; y < m_num_dimensions; ++y) - for (int x = 0; x < y; ++x, ++plot_index) - draw_2D_points_and_grid(mvp, x, y, plot_index); - } - else - { + float4x4 mvp = m_camera[CAMERA_CURRENT].matrix(float(m_viewport_size.x) / m_viewport_size.y); - if (m_show_1d_projections) + // + // Now render the points and grids + // + if (m_view == CAMERA_2D) { - // smash the points against the axes and draw - float4x4 smashX = - mul(mvp, mul(translation_matrix(float3{-0.51f, 0.f, 0.f}), scaling_matrix(float3{0.f, 1.f, 1.f}))); - draw_points(smashX, {0.8f, 0.3f, 0.3f}); - - float4x4 smashY = - mul(mvp, mul(translation_matrix(float3{0.f, -0.51f, 0.f}), scaling_matrix(float3{1.f, 0.f, 1.f}))); - draw_points(smashY, {0.3f, 0.8f, 0.3f}); - - float4x4 smashZ = - mul(mvp, mul(translation_matrix(float3{0.f, 0.f, -0.51f}), scaling_matrix(float3{1.f, 1.f, 0.f}))); - draw_points(smashZ, {0.3f, 0.3f, 0.8f}); + int plot_index = 0; + for (int y = 0; y < m_num_dimensions; ++y) + for (int x = 0; x < y; ++x, ++plot_index) + draw_2D_points_and_grid(mvp, int2{x, y}, plot_index); } + else + { - draw_points(mvp, m_point_color); + if (m_show_1d_projections) + { + // smash the points against the axes and draw + float4x4 smashX = + mul(mvp, mul(translation_matrix(float3{-0.51f, 0.f, 0.f}), scaling_matrix(float3{0.f, 1.f, 1.f}))); + draw_points(smashX, {0.8f, 0.3f, 0.3f}); + + float4x4 smashY = + mul(mvp, mul(translation_matrix(float3{0.f, -0.51f, 0.f}), scaling_matrix(float3{1.f, 0.f, 1.f}))); + draw_points(smashY, {0.3f, 0.8f, 0.3f}); + + float4x4 smashZ = + mul(mvp, mul(translation_matrix(float3{0.f, 0.f, -0.51f}), scaling_matrix(float3{1.f, 1.f, 0.f}))); + draw_points(smashZ, {0.3f, 0.3f, 0.8f}); + } + + draw_points(mvp, m_point_color); - if (m_show_bbox) - draw_grid(mvp, 1.0f, 0, 8); + if (m_show_bbox) + draw_grid(mvp, 1.0f, 0, 8); - if (m_show_coarse_grid) - draw_grid(mvp, 0.6f, 8, m_coarse_line_count); + if (m_show_coarse_grid) + draw_grid(mvp, 0.6f, 8, m_coarse_line_count); - if (m_show_fine_grid) - draw_grid(mvp, 0.2f, 8 + m_coarse_line_count, m_fine_line_count); + if (m_show_fine_grid) + draw_grid(mvp, 0.2f, 8 + m_coarse_line_count, m_fine_line_count); + } + } + catch (const std::exception &e) + { + fmt::print(stderr, "OpenGL drawing failed:\n\t{}.", e.what()); + HelloImGui::Log(HelloImGui::LogLevel::Error, "OpenGL drawing failed:\n\t%s.", e.what()); } } void SampleViewer::set_view(CameraType view) { - m_animate_start_time = (float)ImGui::GetTime(); - m_camera[CAMERA_PREVIOUS] = m_camera[CAMERA_CURRENT]; - m_camera[CAMERA_NEXT] = m_camera[view]; - m_camera[CAMERA_NEXT].persp_factor = (view == CAMERA_CURRENT) ? 1.0f : 0.0f; - m_camera[CAMERA_NEXT].camera_type = view; - m_camera[CAMERA_CURRENT].camera_type = (view == m_camera[CAMERA_CURRENT].camera_type) ? view : CAMERA_CURRENT; - m_view = view; - - m_params.fpsIdling.fpsIdle = 0.f; // during animation, increase FPS + if (m_view != view) + { + m_animate_start_time = (float)ImGui::GetTime(); + m_camera[CAMERA_PREVIOUS] = m_camera[CAMERA_CURRENT]; + m_camera[CAMERA_NEXT] = m_camera[view]; + m_camera[CAMERA_NEXT].persp_factor = (view == CAMERA_CURRENT) ? 1.0f : 0.0f; + m_camera[CAMERA_NEXT].camera_type = view; + m_camera[CAMERA_CURRENT].camera_type = (view == m_camera[CAMERA_CURRENT].camera_type) ? view : CAMERA_CURRENT; + m_view = view; + + // m_params.fpsIdling.fpsIdle = 0.f; // during animation, increase FPS + m_idling_backup = m_params.fpsIdling.enableIdling; + m_params.fpsIdling.enableIdling = false; + } } void SampleViewer::draw_points(const float4x4 &mvp, const float3 &color) @@ -1179,7 +1335,7 @@ string SampleViewer::export_all_points_2d(const string &format) for (int y = 0; y < m_num_dimensions; ++y) for (int x = 0; x < y; ++x) { - float4x4 pos = layout_2d_matrix(m_num_dimensions, x, y); + float4x4 pos = layout_2d_matrix(m_num_dimensions, int2{x, y}); if (format == "eps") { diff --git a/gui/app.h b/gui/app.h index 5733eeb..dc981eb 100644 --- a/gui/app.h +++ b/gui/app.h @@ -115,7 +115,7 @@ class SampleViewer int align = TextAlign_RIGHT | TextAlign_BOTTOM) const; void draw_points(const float4x4 &mvp, const float3 &color); void draw_grid(const float4x4 &mvp, float alpha, uint32_t offset, uint32_t count); - void draw_2D_points_and_grid(const float4x4 &mvp, int dimX, int dimY, int plotIndex); + void draw_2D_points_and_grid(const float4x4 &mvp, int2 dims, int plotIndex); int2 get_draw_range() const; /// X, Y, Z, and user-defined cameras @@ -156,4 +156,6 @@ class SampleViewer float m_time1 = 0.f, m_time2 = 0.f; float3 m_point_color = {0.9f, 0.55f, 0.1f}; HelloImGui::RunnerParams m_params; + + bool m_idling_backup = false; }; diff --git a/shell.emscripten.html b/shell.emscripten.html new file mode 100644 index 0000000..14a78e2 --- /dev/null +++ b/shell.emscripten.html @@ -0,0 +1,251 @@ + + + + + + + Samplin Safari2 + + + + + + + + + {{{ SCRIPT }}} + + + \ No newline at end of file From 35ceea90595e1b106e26b07e7c4e3a1d73f64f17 Mon Sep 17 00:00:00 2001 From: Wojciech Jarosz Date: Tue, 5 Dec 2023 23:18:11 +0700 Subject: [PATCH 24/27] version display tweaks --- CMakeLists.txt | 57 ++++++---- cmake/VersionFromGit.cmake | 13 ++- {gui => include}/app.h | 5 +- {gui => include}/arcball.h | 0 include/common.h | 28 +++++ {gui => include}/export_to_file.h | 0 include/imgui_ext.h | 36 ++++++ {gui => include}/shader.h | 0 {gui => include}/timer.h | 0 {gui => include}/traits.h | 0 ...mscripten.html => shell.emscripten.html.in | 2 +- {gui => src}/app.cpp | 106 +++++++++--------- src/common.cpp.in | 62 ++++++++++ {gui => src}/export_to_file.cpp | 0 src/{ => sampler}/Halton.cpp | 0 src/{ => sampler}/Jittered.cpp | 0 src/{ => sampler}/LP.cpp | 0 src/{ => sampler}/Misc.cpp | 0 src/{ => sampler}/MultiJittered.cpp | 0 src/{ => sampler}/NRooks.cpp | 0 src/{ => sampler}/OA.cpp | 0 src/{ => sampler}/OAAddelmanKempthorne.cpp | 0 src/{ => sampler}/OABose.cpp | 0 src/{ => sampler}/OABoseBush.cpp | 0 src/{ => sampler}/OABush.cpp | 0 src/{ => sampler}/OACMJND.cpp | 0 src/{ => sampler}/Random.cpp | 0 src/{ => sampler}/SOA.cpp | 0 src/{ => sampler}/Sobol.cpp | 0 src/{ => sampler}/SobolMatrices.cpp | 0 {gui => src}/shader.cpp | 0 31 files changed, 226 insertions(+), 83 deletions(-) rename {gui => include}/app.h (97%) rename {gui => include}/arcball.h (100%) create mode 100644 include/common.h rename {gui => include}/export_to_file.h (100%) create mode 100644 include/imgui_ext.h rename {gui => include}/shader.h (100%) rename {gui => include}/timer.h (100%) rename {gui => include}/traits.h (100%) rename shell.emscripten.html => shell.emscripten.html.in (99%) rename {gui => src}/app.cpp (96%) create mode 100644 src/common.cpp.in rename {gui => src}/export_to_file.cpp (100%) rename src/{ => sampler}/Halton.cpp (100%) rename src/{ => sampler}/Jittered.cpp (100%) rename src/{ => sampler}/LP.cpp (100%) rename src/{ => sampler}/Misc.cpp (100%) rename src/{ => sampler}/MultiJittered.cpp (100%) rename src/{ => sampler}/NRooks.cpp (100%) rename src/{ => sampler}/OA.cpp (100%) rename src/{ => sampler}/OAAddelmanKempthorne.cpp (100%) rename src/{ => sampler}/OABose.cpp (100%) rename src/{ => sampler}/OABoseBush.cpp (100%) rename src/{ => sampler}/OABush.cpp (100%) rename src/{ => sampler}/OACMJND.cpp (100%) rename src/{ => sampler}/Random.cpp (100%) rename src/{ => sampler}/SOA.cpp (100%) rename src/{ => sampler}/Sobol.cpp (100%) rename src/{ => sampler}/SobolMatrices.cpp (100%) rename {gui => src}/shader.cpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index db03b67..87531dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,23 +2,29 @@ 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") + project( SamplinSafari DESCRIPTION "A research tool to visualize and interactively inspect high-dimensional (quasi) Monte Carlo samplers." - VERSION 2.0.0 + VERSION ${SEMVER} LANGUAGES C CXX ) if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(APP_BITS_VERSION "64 bit") +set(VERSION_LONG "${SEMVER} (64 bit)") elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) - set(APP_BITS_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 @@ -194,22 +200,22 @@ 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( @@ -229,14 +235,17 @@ 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 ${APP_BITS_VERSION}) -set(HELLO_IMGUI_BUNDLE_SHORT_VERSION ${PROJECT_VERSION}) +set(HELLO_IMGUI_BUNDLE_VERSION ${SEMVER}) +set(HELLO_IMGUI_BUNDLE_SHORT_VERSION ${SEMVER}) 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 - gui/app.cpp - gui/shader.cpp - gui/export_to_file.cpp + src/app.cpp + ${CMAKE_CURRENT_BINARY_DIR}/src/common.cpp + src/shader.cpp + src/export_to_file.cpp ) set_target_properties(SamplinSafari PROPERTIES diff --git a/cmake/VersionFromGit.cmake b/cmake/VersionFromGit.cmake index 45e6686..b09c318 100644 --- a/cmake/VersionFromGit.cmake +++ b/cmake/VersionFromGit.cmake @@ -62,9 +62,10 @@ function( version_from_git ) ERROR_STRIP_TRAILING_WHITESPACE ) if( NOT git_result EQUAL 0 ) - message( FATAL_ERROR + message( WARNING "[VersionFromGit] Failed to execute Git: ${git_error}" ) + set( git_describe "" ) endif() # Get Git tag @@ -78,9 +79,10 @@ function( version_from_git ) ERROR_STRIP_TRAILING_WHITESPACE ) if( NOT git_result EQUAL 0 ) - message( FATAL_ERROR + message( WARNING "[VersionFromGit] Failed to execute Git: ${git_error}" ) + set( git_tag "" ) endif() if( git_tag MATCHES "^v(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[.0-9A-Za-z-]+)?([+][.0-9A-Za-z-]+)?$" ) @@ -90,9 +92,14 @@ function( version_from_git ) set( identifiers "${CMAKE_MATCH_4}" ) set( metadata "${CMAKE_MATCH_5}" ) else() - message( FATAL_ERROR + message( WARNING "[VersionFromGit] Git tag isn't valid semantic version: [${git_tag}]" ) + set( version_major "0" ) + set( version_minor "0" ) + set( version_patch "0" ) + set( identifiers "" ) + set( metadata "" ) endif() if( "${git_tag}" STREQUAL "${git_describe}" ) diff --git a/gui/app.h b/include/app.h similarity index 97% rename from gui/app.h rename to include/app.h index dc981eb..18e90e9 100644 --- a/gui/app.h +++ b/include/app.h @@ -4,6 +4,7 @@ #pragma once +#include "common.h" #include "linalg.h" using namespace linalg::aliases; @@ -34,8 +35,8 @@ using namespace linalg::aliases; } #include "arcball.h" -// #include "gui_app.h" #include "hello_imgui/hello_imgui.h" +#include "misc/cpp/imgui_stdlib.h" #include "shader.h" #include #include @@ -108,6 +109,7 @@ class SampleViewer void update_GPU_grids(); void set_view(CameraType view); void draw_editor(); + void draw_about_dialog(); void process_hotkeys(); void populate_point_subset(); void generate_grid(vector &positions, int gridRes); @@ -155,6 +157,7 @@ class SampleViewer float m_time1 = 0.f, m_time2 = 0.f; float3 m_point_color = {0.9f, 0.55f, 0.1f}; + float3 m_bg_color = {0.0f, 0.0f, 0.0f}; HelloImGui::RunnerParams m_params; bool m_idling_backup = false; diff --git a/gui/arcball.h b/include/arcball.h similarity index 100% rename from gui/arcball.h rename to include/arcball.h diff --git a/include/common.h b/include/common.h new file mode 100644 index 0000000..b89d507 --- /dev/null +++ b/include/common.h @@ -0,0 +1,28 @@ +// +// Copyright (C) Wojciech Jarosz . All rights reserved. +// Use of this source code is governed by a BSD-style license that can +// be found in the LICENSE.txt file. +// + +#pragma once + +#if defined(_MSC_VER) +// Make MS cmath define M_PI but not the min/max macros +#define _USE_MATH_DEFINES +#define NOMINMAX +#endif + +#include + +std::vector split(std::string text, const std::string &delim); +std::string to_lower(std::string str); +std::string to_upper(std::string str); + +int version_major(); +int version_minor(); +int version_patch(); +std::string version(); +std::string git_hash(); +std::string git_describe(); +std::string build_timestamp(); +std::string backend(); \ No newline at end of file diff --git a/gui/export_to_file.h b/include/export_to_file.h similarity index 100% rename from gui/export_to_file.h rename to include/export_to_file.h diff --git a/include/imgui_ext.h b/include/imgui_ext.h new file mode 100644 index 0000000..5f44ca4 --- /dev/null +++ b/include/imgui_ext.h @@ -0,0 +1,36 @@ +#include "imgui.h" + +namespace ImGui +{ + +inline bool ToggleButton(const char *label, bool *active) +{ + ImGui::PushStyleColor(ImGuiCol_Button, *active ? GetColorU32(ImGuiCol_ButtonActive) : GetColorU32(ImGuiCol_Button)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, GetColorU32(ImGuiCol_FrameBgHovered)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, GetColorU32(ImGuiCol_FrameBgActive)); + + bool ret; + if ((ret = ImGui::Button(label))) + *active = !*active; + ImGui::PopStyleColor(3); + return ret; +} + +inline void Text(const string &text) +{ + return TextUnformatted(text.c_str()); +} + +// return true when activated. +inline bool MenuItem(const string &label, const string &shortcut = "", bool selected = false, bool enabled = true) +{ + return MenuItem(label.c_str(), shortcut.c_str(), selected, enabled); +} + +// return true when activated + toggle (*p_selected) if p_selected != NULL +inline bool MenuItem(const string &label, const string &shortcut, bool *p_selected, bool enabled = true) +{ + return MenuItem(label.c_str(), shortcut.c_str(), p_selected, enabled); +} + +} // namespace ImGui \ No newline at end of file diff --git a/gui/shader.h b/include/shader.h similarity index 100% rename from gui/shader.h rename to include/shader.h diff --git a/gui/timer.h b/include/timer.h similarity index 100% rename from gui/timer.h rename to include/timer.h diff --git a/gui/traits.h b/include/traits.h similarity index 100% rename from gui/traits.h rename to include/traits.h diff --git a/shell.emscripten.html b/shell.emscripten.html.in similarity index 99% rename from shell.emscripten.html rename to shell.emscripten.html.in index 14a78e2..998b037 100644 --- a/shell.emscripten.html +++ b/shell.emscripten.html.in @@ -5,7 +5,7 @@ - Samplin Safari2 + @HELLO_IMGUI_ICON_DISPLAY_NAME@

S&jh1n&JeeMOkU4{=4@cYr6k z(ax=L|s)4kSST31>;ptckO_^V^T9xBEDa;HjTYh`K}oyXu_h<1|<>J?*}M z_pN2n9G6MC$WAI?$U?FnI``L8W)^o)BV!P5DDM^Dp<4A|-bV83(N%hr%JcH;Mvmvf zabV=(>{)?-Z6BOhoQIA_ZSX+;dyKbxbtFaJ@`~Go>%13f#KV-=OQ~q$bHK<788q}q z!3^#&4)djubc-6QXmCR$?(J^ht_2LE4uQDY_m6s@>c_n*5h&F(Lr&e$^R`oV+yy%Jm$1XX53TRMp- zTrza)av|@CQ{}l#7(OW#Vfbhu`!gXB&m>3y305S)ZQ{N3ES_8=bjPfxUdXZH$+=XJ znuGretdmtM`KG~}D_7Zz#W1=F5j{YnX5e&fuoLxoru79!-6YqGjZC#(KD2lj(0T>< z7E^c>)5x#ry~UT%Y3P!fAgSc!zFxHNxAe-i zd6O4EEtZ$goR=Xcu74xL9xPTh7L7l@Wz8S64(@z#+}ke>e{uilY2e1{a?iA{3XY(v zaT8V~dvssmY-72Hr~+H=p<-k>>KbgdhjhNA+}(gSc0AY~E6v>(a1wqdzTxNbfcu$rJo9co2}{f}e$KawlH4&%uLYUbl(0V=f z@6dW%%1)O&4%M#1$BYxNyI95W*qv^zGoF`VztTAToaMNLA1+4lbEX{2JDeCajdfwl`a34YDYx57q$G&3m&&*5FJa`QdcW z!F&sx@f-8=+4c=A_4xeY@xM0W08bJ0!K`u2V|b3BgKv#sk})5;*R`m2z$g4K31=L7 zO2NXX&$sCRKWS8oj$*6X&3xbdK9Cvc8W>}?c*23e^;wbt+BN>B-BZ`C1Fy+w%S(hvucm84bN}l zwTV?pSxM89wk91ZMWmB}6r~Cxy(ghd5s}`J zB1pHOVn750q$*87K=dsj5}JUtP(lfWl0blvKmy6V7jlz((@-hd?{oGh5ES3<_viii z{qf7@wX-`rJ3Djc%$YN1_UzSO9RK36Qa+^`mzq=ReCZOUyOds7`iIiVWonffQs!{k zSId4=_V;on%N;7`EdO-{y@Fqb+7%oX)ru`EeqQmie>eXL{=fO#0;~aT0;U8U2{;>& z9AH!`UFqXW36(2UUR~Ms(%>roRTfvdQ}wN?d#cr}How}B)$UhsUH!A_7hkUV@{U(J zzw+rTNi{mx*juwy&9OC4*37Qex7OTRKiB%LmaVq6cFWpRYyVa|wN8yX?dy!F^In|| zb)xE|)h$r>jk?n_ll){nqvOzE=CSA+KF-(5At64eq`E z?(3^w&uloX;hsi*jm9=Q(b&6j$Hu#x6m9Zh6L-_VrU#n6*lcO@0?ns4k8a`DVswjR zEnjW1SoVK3^`Ubum7#Gwt=;NTM;Nak+!4KN? zXt%oE?e;C(zt?_shpHX=cUaruMo0gSA9lRascNTHo&7t1(mA`!2VK(M81P1TSEcLl zuHoHkciY+hjqa{0_*Mwg8-mdfZ)VFW@&ashY zM}~}CFmmOnVx#7bT0Uyys9#3?Hu|N}UyM!|?HZ$v@f}lk%;+(Z@4of!sj;t*T|M^E zxOd0Jyf^s0JL6l8UpC%0q0xlx6Anx`HR1lh*>WaYC;Ck+GqK*pUK6KHTsv{!#1j)Q zPV%1AZqnvSk&~`Zx;weh58-`pf$*-|zH6jSm)mSop)AKl1x% z{zu8vx__*F%-hPJ4E*HSCvl(L|J3i(S3X_y>G4k=O)oXQ%k+fLDt)&7Gj~XlkeVSQ zLMDZ*2{{sScE)Qn=FBWH^YfYaKR^EY@h{&0;`Z!%vj@)pX^wTyr*nRp`@-Ch=7xRQ z;>)F9o|so`UZ;5<&pR={-2Be-=gr@HF&%*nQ zdM#SGSY14F@yW&RB~_O!ToSgl$kJ9zLzdc?wOqF0Yw`7@uN~hE{AR~D>B~DV-?*aW ziX|%|SC(J-&dQ%x+E=~2YV@jIs|&9#y?W&8tKYu$?Y3{-Yu;aTZEfSVE7sLq*L>Z| zb;;k=|8DAcw)Gv?hi(YiuxDe_jZxnReZS}XKQ_I!Y5S(QANu^T?}rONHu!PczpDJ} z%YUW*)cmK$<*y7`UG-)||frQ??2TXt=&zIDRZeLt7_dG^n{wyE2OZhL>*ylrc? zg>E~x?fSOVUpoA9V7vGBQQI$Ve-zp+bYrM(NAn%ScU;+#vUB{-sGT{xe0TZps=q66 z*IT46}wODsj}z8J=cHj`Rls9`rdc;M(k_5 zuhTx;{`&jB+wb~q)Ne5dsydYke0t>TBU_Gy9l3ra z<48_efv|wEMqzJ+jSTxVY+2Zru;XFZ!`w%`j+Q@K|7hol_b0KH&J2f~o9m!JIU(hfZBSm2&F$)7t4$r@Nf)b9%(-Pfjm8{oU!Ur;nY!b~^Qpex}TsSI@LRGvv&) zGfU3=bY}ONurpWBq(9cjt z2A}PJcJkSIXTLvt@a&bdY3Dkh+jTDDT;jPuB8x;;i)<13R^-^o&m&hyhDM%>ycwB& zzR>wP=ifd*=KPHFE6@LO{>1tC^Y<^P7m8e{a-rFU9v8-32)VHQ!nO-1FT`KSx>)dH zrHhR(_P99uV#vki7q?$Lc`@!{=B2kUy?1HWrEf3oymb1~%}ZHP1*6`NS`f7{YJb$l zsJN)i=mOCJ(T$?pM)!%H5dBH?(&%;3yP}Uo$3)+b{`0cmkE`OU_f@~ErLOv4t$wxc)ecvOUj69m;;a9I3=!BT%EXvaV_II#SM)c6E`DnW!$E?(701^H{-J73&od+FBjh+{*Cy) z@$bY>ik}`oFMfIay7(XCe~Ax|kBd)=e|WRl%^EiYZ+5=f^X9uZXWsnw=Jz)b-n?=% z?UvWAinm_B)%n(lThni?xD|S9->tA)*KcJc6ild`&?KQ-!svt<39A!!C7er0N>man zBvwtVm)Iilt;Dg3UnH(g{5A1>qCL^LUFvq-+nsKYxIO*$irb;L&)mL!`{A7ucWT{f ze`na8@pnGHv-Hm9J7ITX?zob?lKhhzC3R04oisCPb<&=s3rV)5$H_j)FC+&f*Gdjd z?w33zc|r0I$%m3-lGAKnwu-hUww|_kZ8L4FY@xPOwwtzWdqMk)_R97;_NMk8_R;nb z`wIIn_HcWgJ=0OZ;qR#FXygcVbaRY!Om}?a*y;##oO4`rBstuUM|ZvNmbmMGxBA_= zcOCa?+nt0C~aWcn6&rPW~MDnTb;HwZExD~vtG8>KYl-V8*KSvs>zwPFE6L?{d%G*T8@OA$ySV$fN4O`tKXrfU{>Ht* zz0JMf9qzv5j&~=!Q{CC_$LW^z!s#!hmrt*fUMsypdh_(4^e*Y|q)$&@p1v)8Px_(s znDm?J*%<{hif5F~sGLzFqfJJ~j2;<%Glpi2$(WQeEn{Y8;mp37`!kPbMrI~uKFCtD zie#0^s+v_Vt3_7FtX^3|v);>^mNh$TY1X=|Em^;!9ZC&Rtz2yL&7ax~@@;y53S-_d&5V|Fi{SxaWv09(sV6?Rs^Qn5(CX5A^BcJxiPz zt^X-TC?mv3^`Q7dJuRwglSDcFOMW?JsVJ{D5LMK&VzJg)6eIm)umubN13?3@8q5M+ zzyvT{af{i?4)L;HRJ7NJiWT%H7ezU*(xN%{ zG}g}xUp+$fQY(t3T6mNlw>N8reFMO30u?!o0U&=Sa+ClWwmWgHB zQSpxcp7_k#k@ziQq54?N)Puzk)g{`17V1p#u|8L<*6xb7YDwOpeki68KTZ1{go$@( z&$p}%L^o?=F`lvndQCGj^gz)^(hqy_kNmdFeCtv1h8`-W>q|sC^6ICr5#Q*i#30LR zQC@irP^<`1XGGA;Y%@VH-Vw6{)7@|B9>n(Gj*?uF*GF^<&mr|d_&?8gK zRW)O`-cStHPKeFgSK=#et5~Rw5i=xB)otP<^%YT1J1IU^ABll#Uw$)8Jo=XqkH-_T z%Jg_3VKu@=YGHVwpqR+4co}8cVc8@qLc@`k7NQ?91b91vYBUy8n#9%7>Y zg&58n&3auGwJGmly_*=OSD~#byS`9NQ&))N(6x%@q|7JaO&Q;XW0|(5=&lbCi!9%Z zx1qrx>k2VV-ylBH+ZeId_M)T35U*HM& z{~^$Et=12^Ulz5k{^AAQPxRK;i8Xo;uwK-(xWroQ9&2Qrc1={bM4I(oqxTUbtsjat z)^*h9cTvImI_Y|YE@HTK4&iW7M;~Q4I3H;}BdS@G$m2`nvCPNIoBL{r8G0`x&Z`Dx z`9rMIqeON1&DX1-IAbj+4q7jXWtK#-+(#F`dR>AyDvNH~4bfS)hd!USFCa?lny77_ z!%JQYdA=m3=jCmwC#LG{DC=V}h4vi@Cep_5fK5U?!1Dc|rqxI6pii%n<-pqg6S8N4 zK1^)X7E`AiT(iJ`8%0^`5b*--vs2$E*6>#9_sE*n)&(Na@;U9n+KzsmI$aPy(GE+z zUxnUTVu>XU-iQ|CpmSrq+g|pnDPFVmho26L<@$1XYCPc>@j2m_);gl4e#p3K=G|AU zw&XxN7qs6=8Q>S%Z?o>?8C{V}EyP;c5A>hJC@`9}o+j{nQ%h~0(+d8&FW$C(E&4$3 z;nrT_bxRHLD&Jn}q4QhIUPncsb*gCTg&eeQ5Q|CszFuC8uxt~RE&d`H-dN7>EY;C7 zL`}_KjMqyD;r%jp)!b0s&u~xxdETG6&p58j@kStp{UwjYS6@SJ14}D-v?cQU2T@pA zB?g1K$_nukVORCC7^U72&D5jfCFEGJzDT^S?iBOrzh7JW^851BMGvnnB2axtj0Js= zF-?&*uWN(pAILH5TcVnWI2a6aV7DD6gB8dL*lO8Twl76UK$OzSE(pTkJ zQdG3i>xeIOZ&5?-EcU32#CxiSEYC!SzsGaui)Pl#9_VR=-wNIjfPVEwKko*jKjoKl zbQvCXg*JtTh`@{XyaXpytXp#%CQPw0sTNP&;)b^ z9kk_Q5#!=I%|_ZLqJn;047YSfcD_X4E-sc@niKkprFsb0sV}m89`e07AA;{k!m5ZPAfueXcA)Zf>Fs`^8MrjZ%Li%pCI)tS)Y7R9vCOlGnNxx00-bFkA5X}to%T?lKNF1 z&}T|Ym^viS`&%gM#q*?Y`P>kF(^8r?l698l`46GgNo70yV+f6;&IrBsQjfKS=LmNa zItinoXDKD!cu2Szono&Ri-$G3t<;myRX0l=lYY8ENk`8?*Cl*ghUy%~LK#Lf&dFy$ zpTCCs7~`O97fG+bhK!{@(Z3ethHvJE!%UqSz4bqaCJ&+8<`2V#k8F3@7XNMNg-$N@ zV#y=2-ArCVH<$Xc)Y0>YQcsn7saY4PlZF_FO-LC_-~UG-AEX?~55-{|M&2$YJOy@{ za#!}7ze39J{E#v}|Ffj*$q(dF{^#T!OPT%*WZ!fc-+(P3g0fh_T#a$S91nJjne=IM ze2}48J~=i>^BRHmo2-EhVW{0%h!g@ zQqL%1d56Bg!uZy_j&5T1586rc9z48P^6X#dW0FT?yK=2Dd0jEvSnA?Z|3+sr^=@=) zb50@qww${#U!v__=2^*7?>759p{aMvK8emRc~m~r%u~(>85`vDrEdMCd@>#BDc_D~ z%EkP^oGVH>K>1|ZO!*}Hyws^>IdbQKrc9wMQXXhh|E7P?55JOf$(#qGf6Fv^y!_WN zkGIYFvz%8~V17;imU@;flbk>1$*H`unzDy-m~$8A8y+3nc<9|n^z-RJpO$l5^#43L zX3~^-jiiSca}7B^Fxx}UrSr+bygrmC*G&DC`IwxO<=yurZ)hfIA!%oZd9ox=ug?pa zr^va4q`N75{~9vCG3Ox6Ys|R^bLzbMK0h=fo*(}ldH$FB<=vN8zkd#S3!u62+do~G zv}64FmhgMp`isBH&wS_Y^u@-BeCN-~+r0Vje+vI9Hy0yEnJ?$foBt`yg%cEEp?AEKX=Ti zq5qf@Bke!3|C#n5$uH6lB*WbCRQ7W@Hs*!7W8>^6{VDI+QZFgw$&2U6F>mIRu`PG( zlFvndE+=J9UYOU1^Tr^{$((wo+^=K|vs5%f)R&A|dN{Idq)}FXWTctb(A}iGH)W_P z-_hsM?WLaoL~cv{U&`d%xq>q#GB+>_6y zUwk1al3rtTc;UjQ!-KLp9ewJ0rj~LZ<@sYZThnJNi-m=i?bR06#+8bmP`f1Fk>*DU z&tC$rRo#StKhFGROuMdK+lf}JqVsjY93kHETCH+H`A%Nbn^;0Q@t3|#@|hMtp8`6W zsj6nRcv)3V(=D9nyvLgRr>Y$2-d6rB7OPdYSosEc-kCRXs;=s~W~OFOa@AX&Xl$&f zbBV0U!)j5j^4#J@Vol>B&(w7~v2;xhKM#$9sFpf8gy^ zz{jGSk1)?T@;uv1#>q$dm`7eb%*X1(O(sobk>nvy2Hqqgt&B4deZ0(@C=Xwv^Rf77 zl2WRoKzl2{$t_y|qF6NDs`}6hw1byd0WU9EI_}YZWOd9Z@pRcFB-Nl4CAWGBA8zq9 zfq8|Utd#l3y^z`}OAYa5>21Cq} za+7W2xvH6jmicp!>O~tp`IA+XT=V3Q`zRA_tI8+IJIz0NT_(*tmlyN>nYlbU*K?ak zmdD)kC4LfTW+(4cd7h+|>l&y+>VQe}e@s<;(HEvq(E`=|%iQ|cKt zUd_}LdXJCht5w$KX$!Qa+6FCD+pnGBU8E>2Mz5mR(S!7^`cQqm{*gXg|4!em@8BB& z=k=?4qMprnq5Ukyc@eHi5KK=#$i~7IdU%|hUe>MNQ{`LKv_&4(p z^q=DYng1sLE&f0I@8JEQLjjh6;sGTCDg{&xs2wn{l3K}H$+uFmN@Xfls8pj;`$~f= zji?flrrtmPP|q<8`Fn-(PuAL>T5q7%zlbn#N?a6nz6fY2eo8T=s#0BfRq3e=Rz~I4 zdcCrpT0c-r<<|NnwZ2BJQI>LRJ&Rf|)Rt-AYdf^xvl^otB;}fMOgU#9Wym}N@Cr~^ zHB_(~DLcUy@Uv0U@G>kpf8?YnX_8nuBXRSeJe`adhI4JDU^x+}V)WEioXGcO4TlKx%?5Avs}P!jgnV3A1i}o$ygY zms?wI{(NiQt+lt7-&%HS&aHQE^}N;nMr!fB1%9_4P>(C8On#Szd-|8eAvIF)yHo1r zgX{Z?9Xe+M8 znR<-$;D7m3KT|{08R|^+b9ENh&5zYZ>SA??x>Q}Jel4(Ds^6%~)fMVWb(NSUzED@I z->PfWwdy+cJ26|#QMagD)t}XE>M!bcF;{%4hN?T%o$4+X%Y!(^Qx07K_AUHC@e6Gu13LTfMLTE|!R;>L2Q#>I3zm`bd4u zH^IKv3TcHkKdq=%Oe?N_s!mtGP}gfUw3=Eit+rM`E2tIGeCe6nwb>$6o1@Le&b@S zv>&t|ML1U4ll1k|yk{OE&Wdx|zeJ=suO(^QM3nZ6h}O0vwRUJb#bt3t#Av&cRLUU{B`Um=lT85U1^qr%BrgT=i=%4D-wJa@LyU&+wx+>iizF>^B z@2R|njGm_SQr=d2>k3i~l~t+$x>f0;^wmGsKhewT<&=I(e`SC&5UKX1GDt74&r`-L z6OeH<^Zt)BI>{E;{LT8odHT!^bZczss#7wUAd3{JpXwehR^d4_8&E5c&J{*47o63UY|Ptq2kTn zquKZD9T3{8PuVAjBl`4dQY%!K*>DG`=k+0jF}WEKno)Hg*9x`N?BpM+RqfWhd+*SY zz_OvO0{fH=2=EUI4eQoBG%T=eK%YLfLak5ANLfD}UCL8hubQFOS89cNdvbWQcWA4! zp`y>cc{0B@dshw!4VgEu>^y3acOLfa`95Boe;bYpTJt7J~cbN**l0L22jKTHAAZh)e0?GGxTMGLN#|(Q|9{5d$afcRzerU_IZoB zJ$vsL)iuY2K4n8IQ&|7G`~09=Zk()T;hLeX=I-+seS7bCSp=5d&#MWJK;jG42*rnZ zr{bs9P<9qo*zYacq;8e6e!`n2V5NQ2+5sgv+^hC(->ABIr1fa~T9uMAP9NB%S&h>2 z$ntv4N~L|}k#*vL;Cf}{k=K$B`ZuX8kG!Xk?AEx9Jo4!o^mTRnT#u3!mp5zRUQ>-Rn`22+lh2TSLP{ZH`(KGnTN≤FHXCuU9Qce=@vmZ{%9^5??OaVQJ8!4u8-w;yt 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 JyV?28{{co6(@+2a literal 0 HcmV?d00001 diff --git a/assets/fonts/fontawesome-webfont.ttf b/assets/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 zcmd4434D~*)jxjkv&@#+*JQHIB(r2Agk&ZO5W=u;0Z~v85Ce*$fTDsRbs2>!AXP+E zv})s8XszXKwXa&S)7IKescosX*7l99R$G?_w7v?NC%^Bx&rC7|(E7f=|L^lpa-Zk9 z`?>d?d+s^so_oVMW6Z|VOlEVZPMtq{)pOIHX3~v25n48F@|3AkA5-983xDXec_W** zHg8HX#uvihecqa7Yb`$*a~)&Wy^KjmE?joS+JOO-B;B|Y@umw`Uvs>da>d0W;5qQ!4Qz zJxL+bkEIe8*8}j>Q>BETG1+ht-^o+}utRA<*p2#Ix&jHe=hB??wf3sZuV5(_`d1DH zgI+ncCI1s*Tuw6@6DFOB@-mE3%l-{_4z<*f9!g8!dcoz@f1eyoO9;V5yN|*Pk0}XYPFk z!g(%@Qka**;2iW8;b{R|Dg0FbU_E9^hd3H%a#EV5;HVvgVS_k;c*=`1YN*`2lhZm3 zqOTF2Pfz8N%lA<(eJUSDWevumUJ;MocT>zZ5W08%2JkP2szU{CP(((>LmzOmB>ZOpelu zIw>A5mu@gGU}>QA1RKFi-$*aQL_KL1GNuOxs0@)VEz%g?77_AY_{e55-&2X`IC z!*9krPH>;hA+4QUe(ZB_4Z@L!DgUN;`X-m}3;G6(Mf9flyest6ciunvokm)?oZmzF z@?{e2C{v;^ys6AQy_IN=B99>#C*fPn3ra`%a_!FN6aIXi^rn1ymrrZ@gw3bA$$zqb zqOxiHDSsYDDkGmZpD$nT@HfSi%fmt6l*S0Iupll)-&7{*yFioy4w3x%GVEpx@jWf@QO?itTs?#7)d3a-Ug&FLt_)FMnmOp5gGJy@z7B*(^RVW^e1dkQ zkMHw*dK%Ayu_({yrG6RifN!GjP=|nt${60CMrjDAK)0HZCYpnJB&8QF&0_TaoF9-S zu?&_mPAU0&@X=Qpc>I^~UdvKIk0usk``F{`3HAbeHC$CyQPtgN@2lwR?3>fKwC|F> zYx{2LyT9-8zVGxM?E7=y2YuRM`{9bijfXoA&pEvG@Fj<@J$%dI`wu^U__@Oe5C8e_ z2ZyyI_9GQXI*-gbvh>I$N3K0`%aQw!JbvW4BL|QC`N#+Vf_#9QLu~J`8d;ySFWi^v zo7>mjx3(|cx3jOOZ+~B=@8!PUzP`iku=8-}aMR(`;kk#q53fC(KD_gA&*A-tGlyS3 z+m)8@1~El#u3as^j;LR~)}{9CG~D_9MNw(aQga zKO~TeK}MY%7{tgG{veXj;r|am2GwFztR{2O|5v~?px`g+cB0=PQ}aFOx^-}vA95F5 zA7=4<%*Y5_FJ|j%P>qdnh_@iTs0Qv3Shg)-OV0=S+zU1vekc4cfZ>81?nWLD;PJf5 zm^TgA&zNr~$ZdkLfD=nH@)f_xSjk$*;M3uDgT;zqnj*X$`6@snD%LSpiMm2N;QAN~ z_kcBPVyrp@Qi?Q@UdCdRu{^&CvWYrt=QCD^e09&FD^N$nM_`>%e`5*`?~&bbh->n~ zJ(9*nTC4`EGNEOm%t%U8(?hP3%1b;hjQAV0Nc?8hxeG3 zaPKiTHp5uQTE@n~b#}l3uJMQ)kGfOHpF%kkn&43O#D#F5Fg6KwPr4VR9c4{M`YDK; z3jZ{uoAx?m(^2k>9gNLvXKdDEjCCQ+Y~-2K00%hd9AfOW{fx~8OmhL>=?SSyfsZaC!Gt-z(=`WU+-&Dfn0#_n3e*q()q-CYLpelpxsjC~b#-P^<1eJJmK#NGc1 zV_&XPb2-)pD^|e^5@<6_cHeE7RC;w7<*1(><1_>^E_ievcm0P?8kubdDQj%vyA=3 z3HKCZFYIRQXH9UujQt#S{T$`}0_FTN4TrE7KVs}9q&bK>55B|Lul6(cGRpdO1Kd`| zeq(~e`?pp&g#Y$EXw}*o`yJwccQ0eFbi*Ov?^iSS>U6j#82bal{s6dMn-2#V{#Xo$ zI$lq~{fx0cA?=^g&OdKq?7tBAUym`?3z*+P_+QpC_SX>Hn~c4gX6!Ab|67K!w~_Ac z_ZWKz;eUUXv46n53-{h3#@>IKu@7En?4O7`qA>R1M~r=hy#Got_OTNVaQ-*)f3gq` zWqlf9>?rCwhC2Ie;GSYEYlZ8Edx9~|1c$Hz6P6|~v_elnBK`=R&nMuzUuN8VKI0ZA z+#be@iW#>ma1S$XYhc_CQta5uxC`H|9>(1-GVW=IdlO`OC*!^vIHdJ2gzINKkYT)d z3*#jl84q5~c0(mMGIK+jJFO2k6NLvlqs#h}}L0klN#8)z2^A6*6 zU5q!Nj7Gdit%LiB@#bE}TbkhZGoIMXcoN~QNYfU9dezGK=;@4)al-X6K6WSL9b4dD zWqdqfOo0cRfI27sjPXfulka7G3er!7o3@tm>3GioJTpUZZ!$jX5aV4vjL$A+d`^n- zxp1e$e?~9k^CmMsKg9T%fbFbqIHX;GIu<72kYZMzEPZ`#55myqXbyss&PdzkU-kng%ZaGx-qUd{ORDE9`W-<*I${1)W@@_xo| z#P?RjZA0Ge?Tp_{4)ER51-F;+Tjw*r6ZPHZW&C#J-;MVj3S2+qccSdOkoNAY8NUbR z-HUYhnc!Y!{C@9;sxqIIma{CrC z{*4;OzZrsik@3eKWBglt8Gju9$G0;6ZPfp5`1hya;Q!vUjQ{6qsNQ=S2c6;1ApV)% zjDJ4@_b}tnn&43HfiA|MBZsgbpsdVv#(xMHfA~D(KUU!0Wc>La#(y%O@fT{~-ede{ zR>pr0_Y2hXOT@kS3F8L=^RH0;%c~jx_4$nd=5@w@I~NXdzuUt2E2!)DYvKACfAu5A zUwe%4KcdXn;r@iOKr8s4QQm)bG5$uH@xLJ7o5hU3g}A?UF#a~+dV4S9??m7ZG5+_} zjQ<05{sZ6d0><|ea8JQ~#Q6It>z^jLhZ*lv;9g|>Fxqwm@O+4TAHKu*zfkVS4R9I8 z{~NIVcQ50g0KQKVb`<_&>lp7xn*Q?{2i@S=9gJ(JgXqP;%S_@4CSmVFk{g($tYngU z2omdDCYcd#!MC-SNwz*FIf|L&M40PMCV4uTQXRtTUT0GMZYDM0-H5Up z-(yk}+^8)~YEHrRGpXe%CMDJ}DT(-2W~^` zjDf-D4fq2U%2=tnQ*LW*>*Q@NeQ=U48Xk01IuzADy1ym0rit^WHK~^SwU449k4??k zJX|$cO-EBU&+R{a*)XQ6t~;?kuP)y%}DA(=%g4sNM$ z8a1k^e#^m%NS4_=9;HTdn_VW0>ap!zx91UcR50pxM}wo(NA}d;)_n~5mQGZt41J8L zZE5Hkn1U{CRFZ(Oxk3tb${0}UQ~92RJG;|T-PJKt>+QV$(z%hy+)Jz~xmNJS#48TFsM{-?LHd-bxvg|X{pRq&u74~nC4i>i16LEAiprfpGA zYjeP(qECX_9cOW$*W=U1YvVDXKItrNcS$?{_zh2o=MDaGyL^>DsNJtwjW%Do^}YA3 z3HS=f@249Yh{jnme5ZRV>tcdeh+=o(;eXg_-64c@tJ&As=oIrFZ& z*Gx&Lr>wdAF8POg_#5blBAP!&nm-O!$wspA>@;>RyOdqWZe?F%--gC9nTXZ%DnmK< z`p0sh@aOosD-jbIoje0ec`&&fWsK?xPdf*L)Qp(MwKKIOtB+EDn(3w-9Ns9O~i z7MwnG8-?RZlv&XIJZUK*;)r!1@Bh4bnRO*JmgwqANa8v4EvHWvBQYYGT?tN4>BRz1 zf1&5N7@@!g89ym5LO{@=9>;Y8=^ExA9{+#aKfFGPwby8wn)db@o}%Z_x0EjQWsmb6 zA9uX(vr-n8$U~x9dhk~VKeI!h^3Z2NXu;>n6BHB%6e2u2VJ!ZykHWv-t19}tU-Yz$ zHXl2#_m7V&O!q(RtK+(Yads868*Wm*!~EzJtW!oq)kw}`iSZl@lNpanZn&u|+px84 zZrN7t&ayK4;4x_@`Q;;XMO4{VelhvW%CtX7w;>J6y=346)vfGe)zJBQ9o$eAhcOPy zjwRa6$CvN-8qHjFi;}h1wAb{Kcnn{;+ITEi`fCUk^_(hJ&q1Z=yo*jRs<94E#yX67 zRj)s)V&gd0VVZGcLALQ|_Lp<4{XEBIF-*yma#;%V*m^xSuqeG?H-7=M0Cq%%W9`2Oe>Ov)OMv8yKrI^mZ$ql{A!!3mw_27Y zE=V#cA@HopguAWPAMhKDb__-Z_(TN7;*A`XxrMefxoz4{Seu)$%$=sPf{vT@Pf_T`RlrC#CPDl$#FnvU|VBC$0(E>+3EG z&3xsml}L_UE3bNGX6T~2dV6S%_M9{`E9kgHPa+9mas{tj$S<&{z?nRzH2b4~4m^Wc zVF+o4`w9BO_!IohZO_=<;=$8j?7KUk(S5llK6wfy9m$GsiN5*e{q(ZS6vU4l6&{s5 zXrJJ@giK>(m%yKhRT;egW||O~pGJ&`7b8-QIchNCms)}88aL8Jh{cIp1uu`FMo!ZP z1fne;+5#%k3SM7Kqe|`%w1JI=6hJJrog4j?5Iq!j=b=0AJS5%ev_9?eR!_H>OLzLM z_U#QLoi=0npY1+gHmde37Kgp)+PKl=nC>pM|EJCAEPBRXQZvb74&LUs*^WCT5Q%L-{O+y zQKgd4Cek)Gjy~OLwb&xJT2>V%wrprI+4aOtWs*;<9pGE>o8u|RvPtYh;P$XlhlqF_ z77X`$AlrH?NJj1CJdEBA8;q*JG-T8nm>hL#38U9ZYO3UTNWdO3rg-pEe5d= zw3Xi@nV)1`P%F?Y4s9yVPgPYT9d#3SLD{*L0U{ z;TtVh?Wb0Lp4MH{o@L6GvhJE=Y2u>{DI_hMtZgl~^3m3#ZUrkn?-5E3A!m!Z>183- zpkovvg1$mQawcNKoQ*tW=gtZqYGqCd)D#K;$p113iB1uE#USvWT}QQ7kM7!al-C^P zmmk!=rY+UJcJLry#vkO%BuM>pb)46x!{DkRYY7wGNK$v=np_sv7nfHZO_=eyqLSK zA6ebf$Bo&P&CR_C*7^|cA>zl^hJ7z0?xu#wFzN=D8 zxm(>@s?z1E;|!Py8HuyHM}_W5*Ff>m5U0Jhy?txDx{jjLGNXs}(CVxgu9Q4tPgE+Hm z*9ll7bz80456xzta(cX+@W!t7xTWR-OgnG_>YM~t&_#5vzC`Mp5aKlXsbO7O0HKAC z2iQF2_|0d6y4$Pu5P-bfZMRzac(Yl{IQgfa0V>u;BJRL(o0$1wD7WOWjKwP)2-6y$ zlPcRhIyDY>{PFLvIr0!VoCe;c_}dp>U-X z`pii$Ju=g+Wy~f|R7yuZZjYAv4AYJT}Ct-OfF$ZUBa> zOiKl0HSvn=+j1=4%5yD}dAq5^vgI~n>UcXZJGkl671v`D74kC?HVsgEVUZNBihyAm zQUE~mz%na<71JU=u_51}DT92@IPPX)0eiDweVeDWmD&fpw12L;-h=5Gq?za0HtmUJ zH@-8qs1E38^OR8g5Q^sI0)J}rOyKu$&o1s=bpx{TURBaQ(!P7i1=oA@B4P>8wu#ek zxZHJqz$1GoJ3_W^(*tZqZsoJlG*66B5j&D6kx@x^m6KxfD?_tCIgCRc?kD~(zmgCm zLGhpE_YBio<-2T9r;^qM0TO{u_N5@cU&P7is8f9-5vh4~t?zMqUEV!d@P{Y)%APE6 zC@k9|i%k6)6t2uJRQQTHt`P5Lgg%h*Fr*Hst8>_$J{ZI{mNBjN$^2t?KP8*6_xXu5xx8ufMp5R?P(R-t`{n6c{!t+*z zh;|Ek#vYp1VLf;GZf>~uUhU}a<>y*ErioacK@F{%7aq0y(Ytu@OPe;mq`jlJD+HtQ zUhr^&Zeh93@tZASEHr)@YqdxFu69(=VFRCysjBoGqZ!U;W1gn5D$myEAmK|$NsF>Z zoV+w>31}eE0iAN9QAY2O+;g%zc>2t#7Dq5vTvb&}E*5lHrkrj!I1b0=@+&c(qJcmok6 zSZAuQ496j<&@a6?K6ox1vRks+RqYD< zT9On_zdVf}IStW^#13*WV8wHQWz$L;0cm)|JDbh|f~*LV8N$;2oL|R99**#AT1smo zob=4dB_WB-D3}~I!ATFHzdW%WacH{qwv5Go2WzQzwRrv)ZajWMp{13T_u;Rz^V-VF z@#62k@#FD#t@v9ye*A%@ODWm-@oM_$_3Cy1BS+(+ujzNF@8a7?`$B^{iX2A-2_nA? zfi2=05XV^;D_2G}Up$eFW|Ofb^zuE)bWHkXR4Jm!Sz0O?)x6QD^kOufR`*v0=|sS?#*ZCvvr^VkV!zhLF3}FHf%+=#@ae1Qq<4~Y1EGYK$Ib1 zg!s~&&u27X&4Ks^(L3%}Npx!_-A)We=0v#yzv03fzxKZ8iV6KIX5U&?>^E?%iIUZ4 z2sD^vRg%kOU!B5@iV{&gBNc9vB)i{Wa@joIa2#4=oAl|-xqj_~$h33%zgk*UWGUV# zf3>{T#2buK?AZH?)h>10N)#VHvOV}%c|wR%HF|pgm8k`*=1l5P8ttZ1Ly@=C5?d9s z)R>B@43V`}=0??4tp?Y}Ox0$SH)yg(!|@V7H^}C-GyAXHFva04omv@`|LCuFRM2`U zxCM>41^p9U3cR>W>`h`{m^VWSL0SNz27{ske7TN1dTpM|P6Hn!^*}+fr>rJ*+GQN{ ziKp9Zda}CgnbNv#9^^&{MChK=E|Wr}tk?tP#Q?iZ%$2k;Eo9~}^tmv?g~PW^C$`N)|awe=5m{Xqd!M=ST?2~(mWjdOsXK#yVMN(qP6`q#tg+rQexf|*BeIU)a z^WuJyPR4WVsATp2E{*y77*kZ9 zEB{*SRHSVGm8ThtES`9!v{E``H)^3d+TG_?{b|eytE1cy^QbPxY3KFTWh&NZi`C?O z;777FMti@+U+IRl7B{=SCc93nKp`>jeW38muw(9T3AqySM#x@9G|p?N;IiNy(KN7? zMz3hIS5SaXrGqD(NIR0ZMnJT%%^~}|cG(Ez!3#)*o{{QjPUIVFOQ%dccgC0*WnAJW zL*1k^HZ5-%bN;%C&2vpW`=;dB5iu4SR48yF$;K8{SY`7mu6c z@q{10W=zwHuav3wid&;5tHCUlUgeVf&>wKuUfEVuUsS%XZ2RPvr>;HI=<(RACmN-M zR8(DJD^lePC9|rUrFgR?>hO#VkFo8}zA@jt{ERalZl$!LP4-GTT`1w}QNUcvuEFRv z`)NyzRG!e-04~~Y1DK>70lGq9rD4J}>V(1*UxcCtBUmyi-Y8Q$NOTQ&VfJIlBRI;7 z5Dr6QNIl|8NTfO>Jf|kZVh7n>hL^)`@3r1BaPIKjxrLrjf8A>RDaI{wYlKG)6-7R~ zsZQ}Kk{T~BDVLo#Zm@cc<&x{X<~boVS5(zfvp1s3RbASf6EKpp>+IFV9s`#Yx#+I& zMz5zL9IUgaqrnG*_=_qm|JBcwfl`bw=c=uU^R>Nm%k4_TeDjy|&K2eKwx!u8 z9&lbdJ?yJ@)>!NgE_vN8+*}$8+Uxk4EBNje>!s2_nOCtE+ie>zl!9&!!I)?QPMD&P zm$5sb#Le|%L<#tZbz%~WWv&yUZH6NLl>OK#CBOp{e~$&fuqQd03DJfLrcWa}IvMu* zy;z7L)WxyINd`m}Fh=l&6EWmHUGLkeP{6Vc;Xq->+AS`1T*b9>SJ#<2Cf!N<)o7Ms z!Gj)CiteiY$f@_OT4C*IODVyil4|R)+8nCf&tw%_BEv!z3RSN|pG(k%hYGrU_Ec^& zNRpzS-nJ*v_QHeHPu}Iub>F_}G1*vdGR~ZSdaG(JEwXM{Df;~AK)j(<_O<)u)`qw* zQduoY)s+$7NdtxaGEAo-cGn7Z5yN#ApXWD1&-5uowpb7bR54QcA7kWG@gybdQQa&cxCKxup2Av3_#{04Z^J#@M&a}P$M<((Zx{A8 z!Ue=%xTpWEzWzKIhsO_xc?e$$ai{S63-$76>gtB?9usV&`qp=Kn*GE5C&Tx`^uyza zw{^ImGi-hkYkP`^0r5vgoSL$EjuxaoKBh2L;dk#~x%`TgefEDi7^(~cmE)UEw*l#i+5f-;!v^P%ZowUbhH*3Av)CifOJX7KS6#d|_83fqJ#8VL=h2KMI zGYTbGm=Q=0lfc{$IDTn;IxIgLZ(Z?)#!mln$0r3A(um zzBIGw6?zmj=H#CkvRoT+C{T=_kfQQ!%8T;loQ5;tH?lZ%M{aG+z75&bhJE`sNSO`$ z`0eget1V7SqB@uA;kQ4UkJ-235xxryG*uzwDPikrWOi1;8WASslh$U4RY{JHgggsL zMaZ|PI2Ise8dMEpuPnW`XYJY^W$n>4PxVOPCO#DnHKfqe+Y7BA6(=QJn}un5MkM7S zkL?&Gvnj|DI!4xt6BV*t)Zv0YV-+(%$}7QcBMZ01jlLEiPk>A3;M^g%K=cNDF6d!7 z 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