diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 73379dcb..ceaba7b4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,5 +1,5 @@
-name: OSPRay Studio Main CI
+name: (Internal) OSPRay Studio Main CI
# XXX This uses FetchContent on the other components' release packages
# XXX not their devel branches.
@@ -33,15 +33,6 @@ jobs:
artifact-out: build-centos8
artifact-path: build
- build-ubuntu18-04:
- secrets: inherit
- uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
- with:
- image: ubuntu:18.04
- cmd: gitlab/build.sh
- artifact-out: build-ubuntu18-04
- artifact-path: build
-
build-ubuntu20-04:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
@@ -118,12 +109,12 @@ jobs:
needs: build-rocky8-7
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
- # Run the rocky8-7 build on the ubuntu 18.04 image as a test, and because it has vncserver installed
- image: rockylinux:8.7-tgt-rebuild
+ image: rockylinux:8.7
pre-cmd: yum -y install tigervnc-server mesa-libGLU
cmd: |
module load intel/2023.0
build/ospStudio --verify_install
+ mkdir build/model-results # in case run-dev tests fail artifacts will still upload
gitlab/run-dev.sh
gitlab/run-dev-img-cmp.sh
artifact-in: build-rocky8-7
@@ -134,8 +125,7 @@ jobs:
### Devel Coverity Job ###
static-analysis:
secrets: inherit
- #uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/static_analysis.yml@main
- uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/static_analysis.yml@tgt/coverity_env
+ uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/static_analysis.yml@main
with:
project: OSPRay Studio
prebuild: >
diff --git a/.github/workflows/external.ci.yml b/.github/workflows/external.ci.yml
new file mode 100644
index 00000000..b44d0757
--- /dev/null
+++ b/.github/workflows/external.ci.yml
@@ -0,0 +1,133 @@
+## Copyright 2024 Intel Corporation
+## SPDX-License-Identifier: Apache-2.0
+
+name: OSPRay Studio CI
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+permissions:
+ contents: read
+
+jobs:
+
+ build-rocky-8:
+ runs-on: ubuntu-latest
+ container:
+ image: rockylinux:8
+
+ steps:
+ - name: Install packages
+ run: |
+ echo "Installing build dependencies..."
+ dnf update -y
+ dnf install -y git cmake mesa-libGL-devel libXrandr-devel libXinerama-devel libXcursor-devel libXi-devel python3.11-devel
+ dnf group install -y "Development Tools"
+ - name: Checkout Repository
+ uses: actions/checkout@v4
+
+ - name: Build
+ run: |
+ mkdir build
+ cd build
+ cmake ..
+ make -j$(nproc) install
+ - name: Upload build
+ uses: actions/upload-artifact@v4
+ with:
+ name: build-rocky-8
+ path: build/install
+
+ test-rocky-8:
+ needs: build-rocky-8
+ runs-on: ubuntu-latest
+ container:
+ image: rockylinux:8
+
+ steps:
+ - name: Install packages
+ run: |
+ dnf update -y
+ dnf install -y mesa-libGL mesa-dri-drivers xorg-x11-server-Xvfb
+ - name: Download build
+ uses: actions/download-artifact@v4
+ with:
+ name: build-rocky-8
+
+ - name: Run tests
+ run: |
+ chmod +x ./bin/*
+ set +e
+ timeout --preserve-status 10s xvfb-run ./bin/ospStudio
+ exitCode=$?
+ set -e
+ if [ "${exitCode}" -eq 143 ]; then
+ echo "code 143 is SIGTERM, which we expect from terminating the studio GUI"
+ exitCode=0
+ fi
+ echo "Exit code: ${exitCode}"
+ exit $exitCode
+ build-ubuntu-2204:
+ runs-on: ubuntu-latest
+ container:
+ image: ubuntu:22.04
+
+ steps:
+ - name: Install packages
+ run: |
+ echo "Installing build dependencies..."
+ apt update
+ apt upgrade -y
+ apt install -y build-essential cmake ninja-build libglfw3-dev libgl1-mesa-dev libxinerama-dev libxcursor-dev libxi-dev git python3-dev
+ - name: Checkout Repository
+ uses: actions/checkout@v4
+
+ - name: Build
+ run: |
+ mkdir build
+ cd build
+ cmake ..
+ make -j$(nproc) install
+ - name: Upload build
+ uses: actions/upload-artifact@v4
+ with:
+ name: build-ubuntu-2204
+ path: build/install
+
+ test-ubuntu-2204:
+ needs: build-ubuntu-2204
+ runs-on: ubuntu-latest
+ container:
+ image: ubuntu:22.04
+
+ steps:
+ - name: Install packages
+ run: |
+ echo "Installing build dependencies..."
+ apt update
+ apt upgrade -y
+ apt install -y libglfw3 xvfb
+ - name: Download build
+ uses: actions/download-artifact@v4
+ with:
+ name: build-ubuntu-2204
+
+ - name: Run tests
+ run: |
+ chmod +x ./bin/*
+ set +e
+ timeout --preserve-status 10s xvfb-run ./bin/ospStudio
+ exitCode=$?
+ set -e
+ if [ "${exitCode}" -eq 143 ]; then
+ echo "code 143 is SIGTERM, which we expect from terminating the studio GUI"
+ exitCode=0
+ fi
+ echo "Exit code: ${exitCode}"
+ exit $exitCode
\ No newline at end of file
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 5d0a0056..7fcc7a62 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,5 +1,5 @@
-name: OSPRay Studio Release
+name: (Internal) OSPRay Studio Release
# XXX This uses FetchContent on the other components' release packages
# XXX not their devel branches.
@@ -28,8 +28,7 @@ jobs:
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
force-delete: true # guarantees .gitattributes are respected in working dir
-# image: rockylinux:8.7
- image: ubuntu:22.04 # temp, to use OSPRay v3.0.0 SYCL build
+ image: ubuntu:22.04
cmd: |
module load cmake/3.25.3
module load intel/2023.0
@@ -58,7 +57,7 @@ jobs:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
- runs-on: '[ "macOS", "sign", "x86_64" ]'
+ runs-on: '[ "sign", "x86_64" ]'
cmd: |
gitlab/macos.sh package
artifact-out: release-macos
@@ -70,10 +69,7 @@ jobs:
needs: release-linux
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
- # Run the rockylinux 8.7 build on the ubuntu 18.04 image as a test, and because it has vncserver installed
- #image: ubuntu:18.04
- #image: rockylinux:8.7-tgt-rebuild
- image: ubuntu:22.04 # temp, to use OSPRay v3.0.0 SYCL build
+ image: ubuntu:22.04
#pre-cmd: yum -y install tigervnc-server mesa-libGLU
cmd: |
module load intel/2023.0
@@ -125,10 +121,10 @@ jobs:
needs: release-macos
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
- runs-on: '[ "macOS", "sign", "x86_64" ]'
+ runs-on: '[ "sign", "x86_64" ]'
cmd: |
unzip $GITHUB_WORKSPACE/build-macos/package/*.zip
- $SIGN_FILE_MAC -t $GITHUB_WORKSPACE/ospray_studio-*/bin/* $GITHUB_WORKSPACE/ospray_studio-*/lib/*.dylib $GITHUB_WORKSPACE/build-macos/package/*.pkg
+ sign-path-verify: ospray_studio-*/bin/* ospray_studio-*/lib/*.dylib build-macos/package/*.pkg
artifact-in: release-macos
### Scan Jobs ###
@@ -139,8 +135,7 @@ jobs:
static-analysis:
secrets: inherit
- #uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/static_analysis.yml@main
- uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/static_analysis.yml@tgt/coverity_env
+ uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/static_analysis.yml@main
with:
coverity: true
image: rockylinux:8.7
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c927765f..50aa3f4c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,37 @@
Version History
---------------
+### Changes in OSPRay Studio v1.1.0
+
+- Compatible with OSPRay release v3.2.0
+
+- Features and Improvements
+ - Add support for new OSPRay functionality:
+ - Blue noise sampling enabled through setting `accumLimit`
+ - Tonemapper post-process adjustments without re-rendering
+ - OpenImageDenoise quality settings and denoise alpha channel through UI and
+ new command line parameters:
+ - "--denoiseQuality" {low, medium, high} sets the final frame quality
+ - "--denoiseAlpha" enables denoising the alpha channel
+ - Half-float texture format supported for EXR textures
+ - Support for new OSPRay param `limitIndirectLightSamples` optimization
+ which limits the number of light samples after the first non-specular
+ (i.e., diffuse and glossy) bounce to at most one.
+ - Added glTF importer support for EXT_mesh_gpu_instancing to allow loading of
+ highly instanced scenes.
+
+
+- Cleanup and bug fixes:
+ - Fixes for glTF PBR materials:
+ - normal channel, previously used default normal
+ that affects all layers, including coat. Now baseNormal and coatNormal
+ are considered separately.
+ - `sheenColorTexture` parameter was not applied correctly
+ - Removed `thicknessTexture` from KHR_materials_volume to allow ray-depth
+ to determine thickness.
+ - Fix verify install condition to report ospInit errors correctly
+ - Update 3rd party dependencies
+
### Changes in OSPRay Studio v1.0.0
- Compatible with OSPRay release v3.1.0
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cca5a1e4..1c559000 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,7 +3,7 @@
cmake_minimum_required(VERSION 3.15)
-project(ospray_studio VERSION 1.0.0 LANGUAGES CXX C)
+project(ospray_studio VERSION 1.1.0 LANGUAGES CXX C)
include(GNUInstallDirs)
include(ProcessorCount)
diff --git a/README.md b/README.md
index 1a8b110b..3c647d0a 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# OSPRay Studio
-This is release v1.0.0 of IntelĀ® OSPRay Studio. It is released under the
+This is release v1.1.0 of IntelĀ® OSPRay Studio. It is released under the
Apache 2.0 license.
Visit [**OSPRay Studio**](http://www.ospray.org/ospray_studio)
@@ -72,21 +72,21 @@ listed in OS-specific building process below.
### Required dependencies
- [CMake](https://www.cmake.org) (v3.15+) and any C++14 compiler
-- Intel [OSPRay](https://www.github.com/ospray/ospray) (v3.1.0) and its
+- Intel [OSPRay](https://www.github.com/ospray/ospray) (v3.2.0) and its
dependencies - OSPRay Studio builds on top of OSPRay. Instructions on
building OSPRay are provided
[here](http://www.ospray.org/downloads.html#building-and-finding-ospray).
OSPRay and OSPRay Studio have the following common dependencies which Studio
can hence leverage from an OSPRay build.
- - Intel oneAPI Rendering Toolkit common library
- [rkcommon](https://www.github.com/ospray/rkcommon) (v1.13.0)
+ - Intel Rendering Toolkit common library
+ [rkcommon](https://www.github.com/ospray/rkcommon) (v1.14.0)
- Intel [Threading Building Blocks](https://www.threadingbuildingblocks.org/)
-- OpenGL and [GLFW](https://www.glfw.org) (v3.3.9) - for the windowing environment
+- OpenGL and [GLFW](https://www.glfw.org) (v3.3.10) - for the windowing environment
### Optional Dependencies
-- Intel [Open Image Denoise](https://openimagedenoise.github.io) - (v2.2.0 or
+- Intel [Open Image Denoise](https://openimagedenoise.github.io) - (v2.3.0 or
newer) for denoising frames. To use with OSPRay Studio, OSPRay must be built
with `-DBUILD_OIDN=ON` in CMake.
- [OpenVDB](https://www.openvdb.org/) to support loading VDB formatted volume files.
diff --git a/app/Batch.cpp b/app/Batch.cpp
index f6dbf417..5b47863b 100644
--- a/app/Batch.cpp
+++ b/app/Batch.cpp
@@ -370,17 +370,23 @@ void BatchContext::render()
void BatchContext::renderFrame()
{
+ auto &fb = frame->childAs("framebuffer");
+ auto &v = frame->childAs("renderer")["varianceThreshold"];
+ auto varianceThreshold = v.valueAs();
+ float fbVariance{inf};
+
if (studioCommon.denoiserAvailable && optDenoiser) {
frame->denoiseFB = true;
frame->denoiseFBFinalFrame = true;
+ // Set denoiser final frame quality and denoiseAlpha command line options
+ auto denoiser = fb.getDenoiser();
+ if (denoiser) {
+ denoiser->child("final") = optDenoiseQuality;
+ denoiser->child("denoiseAlpha") = optDenoiseAlpha;
+ }
}
frame->immediatelyWait = true;
- auto &fb = frame->childAs("framebuffer");
- auto &v = frame->childAs("renderer")["varianceThreshold"];
- auto varianceThreshold = v.valueAs();
- float fbVariance{inf};
-
// continue accumulation till variance threshold or accumulation limit is
// reached
do {
diff --git a/app/GUIContext.cpp b/app/GUIContext.cpp
index 36b28676..95198c64 100644
--- a/app/GUIContext.cpp
+++ b/app/GUIContext.cpp
@@ -86,6 +86,12 @@ void GUIContext::start()
frame->denoiseFB = true;
frame->denoiseFBFinalFrame = optDenoiseFinalFrame;
framebuffer->child("floatFormat") = true;
+ // Set denoiser final frame quality and denoiseAlpha command line options
+ auto denoiser = framebuffer->getDenoiser();
+ if (denoiser) {
+ denoiser->child("final") = optDenoiseQuality;
+ denoiser->child("denoiseAlpha") = optDenoiseAlpha;
+ }
framebuffer->commit();
}
refreshRenderer();
diff --git a/app/MainMenuBuilder.h b/app/MainMenuBuilder.h
index aca3ec44..01cac378 100644
--- a/app/MainMenuBuilder.h
+++ b/app/MainMenuBuilder.h
@@ -308,6 +308,10 @@ void MainMenuBuilder::buildMainMenuView()
GenerateWidget(renderer["varianceThreshold"]);
GenerateWidget(renderer["backgroundColor"]);
+ // Backplate can also be changed directly by changing the renderer
+ // parameter. Keep them in sync.
+ ctx->backPlateTexture = renderer["backplate_filename"].valueAs();
+
if (ImGui::MenuItem("Set background texture..."))
showFileBrowser = true;
if (!ctx->backPlateTexture.str().empty()) {
@@ -443,6 +447,8 @@ void MainMenuBuilder::buildMainMenuView()
if (!fileList.empty()) {
ctx->backPlateTexture = fileList[0];
+ auto &renderer = ctx->frame->childAs("renderer");
+ renderer["backplate_filename"] = ctx->backPlateTexture;
ctx->refreshRenderer();
}
}
diff --git a/app/Plugin.h b/app/Plugin.h
index a5286797..113593b6 100644
--- a/app/Plugin.h
+++ b/app/Plugin.h
@@ -18,6 +18,8 @@
#endif
#endif
+using json = nlohmann::json;
+
namespace ospray {
struct Plugin
@@ -29,9 +31,11 @@ struct Plugin
PanelList panels;
std::string name() const;
+ virtual void sendToPlugin(json &data);
+ bool supportsSendToPlugin{false};
protected:
- Plugin(const std::string &pluginName);
+ Plugin(const std::string &pluginName, const bool &supportsSendToPlugin);
private:
std::string pluginName;
@@ -44,6 +48,11 @@ inline std::string Plugin::name() const
return pluginName;
}
-inline Plugin::Plugin(const std::string &_name) : pluginName(_name) {}
+inline Plugin::Plugin(
+ const std::string &_name, const bool &sendToPlugin = false)
+ : pluginName(_name), supportsSendToPlugin(sendToPlugin)
+{}
+
+inline void Plugin::sendToPlugin(json &data) {}
} // namespace ospray
diff --git a/app/WindowsBuilder.h b/app/WindowsBuilder.h
index 7b8f063c..4f3af932 100644
--- a/app/WindowsBuilder.h
+++ b/app/WindowsBuilder.h
@@ -322,35 +322,43 @@ void WindowsBuilder::buildWindowFrameBufferEditor()
ImVec4(.5f, .5f, .5f, 1.f), "Enable float format for more buffers");
}
- // Only float buffers will be inverted
- ImGui::SameLine();
- ImGui::NewLine();
- if (fb.isFloatFormat())
- ImGui::Checkbox("Invert values##displayInverted", &invertBuffer);
+ // Only float buffers will be inverted
+ ImGui::SameLine();
+ ImGui::NewLine();
+ if (fb.isFloatFormat())
+ ImGui::Checkbox("Invert values##displayInverted", &invertBuffer);
- ctx->selectBuffer(whichBuffer, invertBuffer);
+ ctx->selectBuffer(whichBuffer, invertBuffer);
ImGui::Separator();
ImGui::Text("Post-processing");
- ImGui::Checkbox("Tonemap", &ctx->frame->toneMapFB);
- ImGui::SameLine();
- ImGui::Checkbox("Tonemap nav", &ctx->frame->toneMapNavFB);
-
- if (ctx->studioCommon.denoiserAvailable) {
- ImGui::Checkbox("Denoise", &ctx->frame->denoiseFB);
- ImGui::SameLine();
- ImGui::Checkbox("Denoise nav", &ctx->frame->denoiseNavFB);
- }
- if (ctx->frame->denoiseFB || ctx->frame->denoiseNavFB) {
- ImGui::Checkbox("Denoise only PathTracer", &ctx->frame->denoiseOnlyPathTracer);
- ImGui::Checkbox("Denoise on final frame", &ctx->frame->denoiseFBFinalFrame);
- ImGui::SameLine();
- // Add accum here for convenience with final-frame denoising
- ImGui::SetNextItemWidth(5 * ImGui::GetFontSize());
- ImGui::DragInt(
- "Limit accumulation", &ctx->frame->accumLimit, 1, 0, INT_MAX, "%d frames");
- }
+ ImGui::Checkbox("Tonemap", &ctx->frame->toneMapFB);
+ if (ctx->frame->toneMapFB && fb.getToneMapper())
+ fb.getToneMapper()->traverse(
+ sg::TreeState::ALLOPEN);
+
+ if (ctx->studioCommon.denoiserAvailable) {
+ ImGui::Checkbox("Denoise", &ctx->frame->denoiseFB);
+ ImGui::SameLine();
+ ImGui::Checkbox("Denoise nav", &ctx->frame->denoiseNavFB);
+ }
+ if (ctx->frame->denoiseFB || ctx->frame->denoiseNavFB) {
+ if (fb.getDenoiser())
+ fb.getDenoiser()->traverse(
+ sg::TreeState::ALLOPEN);
+ ImGui::Checkbox("Denoise only PathTracer", &ctx->frame->denoiseOnlyPathTracer);
+ ImGui::Checkbox("Denoise on final frame", &ctx->frame->denoiseFBFinalFrame);
+ ImGui::SameLine();
+ // Add accum here for convenience with final-frame denoising
+ ImGui::SetNextItemWidth(5 * ImGui::GetFontSize());
+ ImGui::DragInt("Limit accumulation",
+ &ctx->frame->accumLimit,
+ 1,
+ 0,
+ INT_MAX,
+ "%d frames");
+ }
ImGui::Separator();
diff --git a/app/ospStudio.cpp b/app/ospStudio.cpp
index fb98e4ee..9cf62e8d 100644
--- a/app/ospStudio.cpp
+++ b/app/ospStudio.cpp
@@ -245,6 +245,26 @@ void StudioContext::addToCommandLine(std::shared_ptr app)
optDenoiseFinalFrame,
"Denoise only when accum limit is reached"
)->check(CLI::IsMember({true, false}));
+ app->add_option(
+ "--denoiseQuality",
+ [&](const std::vector val) {
+ std::map quality =
+ {{"low", OSP_DENOISER_QUALITY_LOW},
+ {"medium", OSP_DENOISER_QUALITY_MEDIUM},
+ {"high", OSP_DENOISER_QUALITY_HIGH}};
+ if (quality.count(val[0]) == 0)
+ return false;
+ else
+ optDenoiseQuality = quality[val[0]];
+ return true;
+ },
+ "Denoiser final frame quality"
+ )->check(CLI::IsMember({"low", "medium", "high"}));
+ app->add_flag(
+ "--denoiseAlpha",
+ optDenoiseAlpha,
+ "Denoise the alpha channel as well"
+ )->check(CLI::IsMember({true, false}));
app->add_option(
"--camera",
optCameraRange,
@@ -366,10 +386,6 @@ int main(int argc, const char *argv[])
// Initialize OSPRay
OSPError error = initializeOSPRay(argc, argv, use_mpi);
- if (error != OSP_NO_ERROR) {
- std::cerr << " OSPRay Initialization Error: " << error << std::endl;
- return error;
- }
// Verify install then exit
if (verify_install) {
@@ -378,6 +394,9 @@ int main(int argc, const char *argv[])
std::cout << " OSPRay Studio install " << (fail ? "failed" : "verified")
<< std::endl;
return fail;
+ } else if (error != OSP_NO_ERROR) {
+ std::cerr << " OSPRay Initialization Error: " << error << std::endl;
+ return error;
}
// Check for module denoiser support after iniaitlizing OSPRay
diff --git a/app/ospStudio.h b/app/ospStudio.h
index 435e18bb..f2daa47c 100644
--- a/app/ospStudio.h
+++ b/app/ospStudio.h
@@ -172,6 +172,8 @@ class StudioContext : public std::enable_shared_from_this
OSPPixelFilterType optPF{OSP_PIXELFILTER_GAUSS};
bool optDenoiser{false};
bool optDenoiseFinalFrame{false};
+ OSPDenoiserQuality optDenoiseQuality{OSP_DENOISER_QUALITY_MEDIUM};
+ bool optDenoiseAlpha{false};
bool optGridEnable{false};
vec3i optGridSize{1, 1, 1};
OSPStereoMode optStereoMode{OSP_STEREO_NONE};
diff --git a/app/widgets/GenerateImGuiWidgets.h b/app/widgets/GenerateImGuiWidgets.h
index 8b74b6ad..6ae4e943 100644
--- a/app/widgets/GenerateImGuiWidgets.h
+++ b/app/widgets/GenerateImGuiWidgets.h
@@ -588,6 +588,7 @@ static std::map widgetGenerators = {
{"OSPCurveBasis", generateWidget_int},
{"OSPCurveType", generateWidget_int},
{"OSPDataType", generateWidget_int},
+ {"OSPDenoiserQuality", generateWidget_int},
{"OSPDeviceProperty", generateWidget_int},
{"OSPError", generateWidget_int},
{"OSPFrameBufferChannel", generateWidget_int},
diff --git a/cmake/benchmark.cmake b/cmake/benchmark.cmake
index 38714254..5da22663 100644
--- a/cmake/benchmark.cmake
+++ b/cmake/benchmark.cmake
@@ -6,7 +6,7 @@
##
if(NOT DEFINED BENCHMARK_VERSION)
- set(BENCHMARK_VERSION 1.8.3)
+ set(BENCHMARK_VERSION 1.8.5)
endif()
##
diff --git a/cmake/glfw.cmake b/cmake/glfw.cmake
index 0dbc76e1..a8d1c3ed 100644
--- a/cmake/glfw.cmake
+++ b/cmake/glfw.cmake
@@ -6,7 +6,7 @@ if(glfw3_FOUND)
endif()
if(NOT DEFINED GLFW_VERSION)
- set(GLFW_VERSION 3.3.9)
+ set(GLFW_VERSION 3.3.10)
endif()
## Look for any available version
diff --git a/cmake/glfw.patch b/cmake/glfw.patch
index 929fd816..742b663d 100644
--- a/cmake/glfw.patch
+++ b/cmake/glfw.patch
@@ -12,10 +12,10 @@ index 708975d1..d916b922 100644
#define _glfw_dlsym(handle, name) GetProcAddress((HMODULE) handle, name)
#else
diff --git a/src/wgl_context.c b/src/wgl_context.c
-index eebf6cd5..8a72d676 100644
+index b245b292..042e0f25 100644
--- a/src/wgl_context.c
+++ b/src/wgl_context.c
-@@ -405,7 +405,7 @@ GLFWbool _glfwInitWGL(void)
+@@ -422,7 +422,7 @@ GLFWbool _glfwInitWGL(void)
if (_glfw.wgl.instance)
return GLFW_TRUE;
diff --git a/cmake/ospray.cmake b/cmake/ospray.cmake
index e625e9fd..82b29efe 100644
--- a/cmake/ospray.cmake
+++ b/cmake/ospray.cmake
@@ -10,7 +10,7 @@ message(STATUS "Looking for OSPRay...")
find_package(ospray QUIET)
if(NOT DEFINED OSPRAY_VERSION)
- set(OSPRAY_VERSION 3.1.0)
+ set(OSPRAY_VERSION 3.2.0)
endif()
if(ospray_FOUND)
diff --git a/cmake/pybind11.cmake b/cmake/pybind11.cmake
index 68b4ff9f..07c3367f 100644
--- a/cmake/pybind11.cmake
+++ b/cmake/pybind11.cmake
@@ -6,7 +6,7 @@
##
if(NOT DEFINED PYBIND11_VERSION)
- set(PYBIND11_VERSION 2.11.1)
+ set(PYBIND11_VERSION 2.13.1)
endif()
##
diff --git a/cmake/rkcommon.cmake b/cmake/rkcommon.cmake
index 1589f407..c6b7a61a 100644
--- a/cmake/rkcommon.cmake
+++ b/cmake/rkcommon.cmake
@@ -13,7 +13,7 @@ message(STATUS "Looking for rkcommon...")
find_package(rkcommon QUIET)
if(NOT DEFINED RKCOMMON_VERSION)
- set(RKCOMMON_VERSION 1.13.0)
+ set(RKCOMMON_VERSION 1.14.0)
endif()
if(rkcommon_FOUND)
diff --git a/cmake/tbb.cmake b/cmake/tbb.cmake
index bd6d063e..9cbbea9a 100644
--- a/cmake/tbb.cmake
+++ b/cmake/tbb.cmake
@@ -6,7 +6,7 @@ if(TBB_FOUND)
endif()
if(NOT DEFINED TBB_VERSION)
- set(TBB_VERSION 2021.11.0)
+ set(TBB_VERSION 2021.13.0)
endif()
option(FORCE_TBB_VERSION "Force CMake to find ${TBB_VERSION} (typically for compatibility with pre-built OSPRay)" OFF)
diff --git a/docs/components/download.markdown b/docs/components/download.markdown
index 97ae9caa..74147c32 100644
--- a/docs/components/download.markdown
+++ b/docs/components/download.markdown
@@ -3,7 +3,7 @@
OSPRay Studio is available for Linux, macOS, and Windows.
Binary packages of the latest release of OSPRay Studio can be downloaded as a
-part of [Intel oneAPI Rendering
+part of [Intel Rendering
Toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/download.html#renderkit).
OSPRay Studio sources can be downloaded from the default `master` branch of
diff --git a/docs/quickstart.md b/docs/quickstart.md
index f6002fbe..bb193a23 100644
--- a/docs/quickstart.md
+++ b/docs/quickstart.md
@@ -10,8 +10,7 @@
OSPRay Studio is available for Linux, macOS, and Windows.
Binary packages of the latest release of OSPRay Studio can be downloaded
-as a part of [Intel oneAPI Rendering
-Toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/download.html#renderkit).
+from [GitHub Releases](https://github.com/RenderKit/ospray-studio/releases).
OSPRay Studio sources can be downloaded from the default `master` branch
of [OSPRay Studio Github
@@ -31,7 +30,7 @@ OSPRay Studio has the following required and optional dependencies.
- Intel [Open VKL](https://www.github.com/openvkl/openvkl)
(v0.12.0)
- Intel [Embree](https://www.github.com/embree/embree) (v3.12.0)
- - Intel oneAPI Rendering Toolkit common library
+ - Intel Rendering Toolkit common library
[rkcommon](https://www.github.com/ospray/rkcommon) (v1.6.0)
- Intel [Threading Building
Blocks](https://www.threadingbuildingblocks.org/)
diff --git a/external/cli11/CLI11.hpp b/external/cli11/CLI11.hpp
index 02b9e0b6..8a5b4c54 100644
--- a/external/cli11/CLI11.hpp
+++ b/external/cli11/CLI11.hpp
@@ -1,11 +1,11 @@
-// CLI11: Version 2.4.0
+// CLI11: Version 2.4.2
// Originally designed by Henry Schreiner
// https://github.com/CLIUtils/CLI11
//
// This is a standalone header file generated by MakeSingleHeader.py in CLI11/scripts
-// from: v2.4.0
+// from: v2.4.2
//
-// CLI11 2.4.0 Copyright (c) 2017-2024 University of Cincinnati, developed by Henry
+// CLI11 2.4.2 Copyright (c) 2017-2024 University of Cincinnati, developed by Henry
// Schreiner under NSF AWARD 1414736. All rights reserved.
//
// Redistribution and use in source and binary forms of CLI11, with or without
@@ -66,8 +66,8 @@
#define CLI11_VERSION_MAJOR 2
#define CLI11_VERSION_MINOR 4
-#define CLI11_VERSION_PATCH 0
-#define CLI11_VERSION "2.4.0"
+#define CLI11_VERSION_PATCH 2
+#define CLI11_VERSION "2.4.2"
@@ -1451,22 +1451,22 @@ class RequiredError : public ParseError {
if((min_option == 1) && (max_option == 1) && (used == 0))
return RequiredError("Exactly 1 option from [" + option_list + "]");
if((min_option == 1) && (max_option == 1) && (used > 1)) {
- return {"Exactly 1 option from [" + option_list + "] is required and " + std::to_string(used) +
+ return {"Exactly 1 option from [" + option_list + "] is required but " + std::to_string(used) +
" were given",
ExitCodes::RequiredError};
}
if((min_option == 1) && (used == 0))
return RequiredError("At least 1 option from [" + option_list + "]");
if(used < min_option) {
- return {"Requires at least " + std::to_string(min_option) + " options used and only " +
- std::to_string(used) + "were given from [" + option_list + "]",
+ return {"Requires at least " + std::to_string(min_option) + " options used but only " +
+ std::to_string(used) + " were given from [" + option_list + "]",
ExitCodes::RequiredError};
}
if(max_option == 1)
return {"Requires at most 1 options be given from [" + option_list + "]", ExitCodes::RequiredError};
- return {"Requires at most " + std::to_string(max_option) + " options be used and " + std::to_string(used) +
- "were given from [" + option_list + "]",
+ return {"Requires at most " + std::to_string(max_option) + " options be used but " + std::to_string(used) +
+ " were given from [" + option_list + "]",
ExitCodes::RequiredError};
}
};
@@ -1633,6 +1633,23 @@ template <> struct IsMemberType {
using type = std::string;
};
+namespace adl_detail {
+/// Check for existence of user-supplied lexical_cast.
+///
+/// This struct has to be in a separate namespace so that it doesn't see our lexical_cast overloads in CLI::detail.
+/// Standard says it shouldn't see them if it's defined before the corresponding lexical_cast declarations, but this
+/// requires a working implementation of two-phase lookup, and not all compilers can boast that (msvc, ahem).
+template class is_lexical_castable {
+ template
+ static auto test(int) -> decltype(lexical_cast(std::declval(), std::declval()), std::true_type());
+
+ template static auto test(...) -> std::false_type;
+
+ public:
+ static constexpr bool value = decltype(test(0))::value;
+};
+} // namespace adl_detail
+
namespace detail {
// These are utilities for IsMember and other transforming objects
@@ -1714,7 +1731,7 @@ template class is_direct_constructible {
#pragma diag_suppress 2361
#endif
#endif
- TT{std::declval()}
+ TT{std::declval()}
#ifdef __CUDACC__
#ifdef __NVCC_DIAG_PRAGMA_SUPPORT__
#pragma nv_diag_default 2361
@@ -1722,8 +1739,8 @@ template class is_direct_constructible {
#pragma diag_default 2361
#endif
#endif
- ,
- std::is_move_assignable());
+ ,
+ std::is_move_assignable());
template static auto test(int, std::false_type) -> std::false_type;
@@ -2793,13 +2810,24 @@ bool lexical_cast(const std::string &input, T &output) {
/// Non-string parsable by a stream
template ::value == object_category::other && !std::is_assignable::value,
+ enable_if_t::value == object_category::other && !std::is_assignable::value &&
+ is_istreamable::value,
detail::enabler> = detail::dummy>
bool lexical_cast(const std::string &input, T &output) {
- static_assert(is_istreamable::value,
+ return from_stream(input, output);
+}
+
+/// Fallback overload that prints a human-readable error for types that we don't recognize and that don't have a
+/// user-supplied lexical_cast overload.
+template ::value == object_category::other && !std::is_assignable::value &&
+ !is_istreamable::value && !adl_detail::is_lexical_castable::value,
+ detail::enabler> = detail::dummy>
+bool lexical_cast(const std::string & /*input*/, T & /*output*/) {
+ static_assert(!std::is_same::value, // Can't just write false here.
"option object type must have a lexical cast overload or streaming input operator(>>) defined, if it "
"is convertible from another type use the add_option(...) with XC being the known type");
- return from_stream(input, output);
+ return false;
}
/// Assign a value through lexical cast operations
@@ -7097,6 +7125,10 @@ class App {
/// Check to see if a subcommand is part of this command (text version)
CLI11_NODISCARD App *get_subcommand(std::string subcom) const;
+ /// Get a subcommand by name (noexcept non-const version)
+ /// returns null if subcommand doesn't exist
+ CLI11_NODISCARD App *get_subcommand_no_throw(std::string subcom) const noexcept;
+
/// Get a pointer to subcommand by index
CLI11_NODISCARD App *get_subcommand(int index = 0) const;
@@ -7271,8 +7303,9 @@ class App {
}
/// Check with name instead of pointer to see if subcommand was selected
- CLI11_NODISCARD bool got_subcommand(std::string subcommand_name) const {
- return get_subcommand(subcommand_name)->parsed_ > 0;
+ CLI11_NODISCARD bool got_subcommand(std::string subcommand_name) const noexcept {
+ App *sub = get_subcommand_no_throw(subcommand_name);
+ return (sub != nullptr) ? (sub->parsed_ > 0) : false;
}
/// Sets excluded options for the subcommand
@@ -7402,7 +7435,7 @@ class App {
std::vector