diff --git a/extra/vtk/.SRCINFO b/extra/vtk/.SRCINFO index ea2944f4b..09338fe73 100644 --- a/extra/vtk/.SRCINFO +++ b/extra/vtk/.SRCINFO @@ -1,7 +1,7 @@ pkgbase = vtk pkgdesc = Software system for 3D computer graphics, image processing, and visualization pkgver = 9.3.0 - pkgrel = 6 + pkgrel = 7 url = https://www.vtk.org/ arch = x86_64 license = BSD @@ -108,8 +108,10 @@ pkgbase = vtk source = https://www.vtk.org//files/release/9.3/VTK-9.3.0.tar.gz source = vtk-occt.patch source = https://gitlab.kitware.com/vtk/vtk/-/commit/5055371e.patch + source = ospray-3.patch sha256sums = fdc7b9295225b34e4fdddc49cd06e66e94260cb00efee456e0f66568c9681be9 sha256sums = df958eabc7dc4f5b33383ce0fb0f90a3ba202c1c2a24d3b5b9e7cfb1fb38b011 sha256sums = 54861a8667c505fedb96b49283521ce62af62148b629e953bbd065f831f02d04 + sha256sums = faf3fd2eea2f73a07f5dcbd67920161a07ae554e008ad1e4099153fec2882278 pkgname = vtk diff --git a/extra/vtk/PKGBUILD b/extra/vtk/PKGBUILD index d7510fa75..7f732552b 100644 --- a/extra/vtk/PKGBUILD +++ b/extra/vtk/PKGBUILD @@ -16,7 +16,7 @@ pkgname=vtk # May need bootstrapping on upgrades due to circular vtk <-> opencascade dependency pkgver=9.3.0 -pkgrel=6 +pkgrel=7 pkgdesc="Software system for 3D computer graphics, image processing, and visualization" arch=(x86_64) url="https://www.vtk.org/" @@ -126,10 +126,12 @@ optdepends=( options=(staticlibs) source=(${url}/files/release/${pkgver%.*}/VTK-${pkgver}.tar.gz vtk-occt.patch - https://gitlab.kitware.com/vtk/vtk/-/commit/5055371e.patch) + https://gitlab.kitware.com/vtk/vtk/-/commit/5055371e.patch + ospray-3.patch) sha256sums=('fdc7b9295225b34e4fdddc49cd06e66e94260cb00efee456e0f66568c9681be9' 'df958eabc7dc4f5b33383ce0fb0f90a3ba202c1c2a24d3b5b9e7cfb1fb38b011' - '54861a8667c505fedb96b49283521ce62af62148b629e953bbd065f831f02d04') + '54861a8667c505fedb96b49283521ce62af62148b629e953bbd065f831f02d04' + 'faf3fd2eea2f73a07f5dcbd67920161a07ae554e008ad1e4099153fec2882278') prepare() { cd ${pkgname^^}-${pkgver} @@ -137,6 +139,7 @@ prepare() { patch -Np1 -i "$srcdir"/vtk-occt.patch patch -Np1 -i ../5055371e.patch # Fix link to PDAL 2.6 + patch -Np1 -i ../ospray-3.patch # Fix build with ospray 3.0 } build() { diff --git a/extra/vtk/ospray-3.patch b/extra/vtk/ospray-3.patch new file mode 100644 index 000000000..a97414608 --- /dev/null +++ b/extra/vtk/ospray-3.patch @@ -0,0 +1,412 @@ +From 6fa86e668c67015e961e2c4667f2fbc719d6188b Mon Sep 17 00:00:00 2001 +From: "David E. DeMarle" +Date: Tue, 19 Sep 2023 21:27:45 -0400 +Subject: [PATCH 1/2] bump VTK to OSPRay 3 API + +Change CMake script to look for 3. +Stop using previously deprecated OSPRay APIs, they are removed in 3.0. +Use new parameter signatures including: + uint for enums + box1f instead of vec2f for ranges + "valueRanges" TransferFunction parameter is now "value". + linear2d for texture transforms +ospNewMaterial no longer accepts renderertype first argument +Implicit isocontours now take their appearance settings from + GeometricModel instead of VolumetricModel. +--- + Rendering/RayTracing/CMakeLists.txt | 2 +- + Rendering/RayTracing/RTWrapper/Backend.h | 5 ++- + .../RTWrapper/OSPRay/OSPRayBackend.h | 25 ++++++++++----- + Rendering/RayTracing/RTWrapper/RTWrapper.h | 3 ++ + .../RayTracing/vtkOSPRayMaterialHelpers.cxx | 9 +++--- + .../vtkOSPRayMoleculeMapperNode.cxx | 8 ++--- + .../vtkOSPRayPointGaussianMapperNode.cxx | 2 +- + .../vtkOSPRayPolyDataMapperNode.cxx | 32 +++++++++---------- + .../vtkOSPRayUnstructuredVolumeMapperNode.cxx | 2 +- + .../RayTracing/vtkOSPRayVolumeMapperNode.cxx | 24 ++++++++++++-- + .../RayTracing/vtkOSPRayVolumeMapperNode.h | 1 + + 11 files changed, 73 insertions(+), 40 deletions(-) + +diff --git a/Rendering/RayTracing/CMakeLists.txt b/Rendering/RayTracing/CMakeLists.txt +index 9d5ad4dd828..baa3078065e 100644 +--- a/Rendering/RayTracing/CMakeLists.txt ++++ b/Rendering/RayTracing/CMakeLists.txt +@@ -58,7 +58,7 @@ vtk_module_add_module(VTK::RenderingRayTracing + if (VTK_ENABLE_OSPRAY) + vtk_module_find_package(PRIVATE_IF_SHARED + PACKAGE ospray +- VERSION 2.1) ++ VERSION 3.0) + + vtk_module_link(VTK::RenderingRayTracing + PRIVATE +diff --git a/Rendering/RayTracing/RTWrapper/Backend.h b/Rendering/RayTracing/RTWrapper/Backend.h +index e35e789f345..ba13a89cb7c 100644 +--- a/Rendering/RayTracing/RTWrapper/Backend.h ++++ b/Rendering/RayTracing/RTWrapper/Backend.h +@@ -30,7 +30,7 @@ VTK_ABI_NAMESPACE_BEGIN + virtual RTWGroup NewGroup() = 0; + virtual RTWTexture NewTexture(const char* type) = 0; + virtual RTWLight NewLight(const char *light_type) = 0; +- virtual RTWMaterial NewMaterial(const char *renderer_type, const char *material_type) = 0; ++ virtual RTWMaterial NewMaterial(const char *material_type) = 0; + virtual RTWVolume NewVolume(const char *type) = 0; + virtual RTWVolumetricModel NewVolumetricModel(RTWVolume volume) = 0; + virtual RTWTransferFunction NewTransferFunction(const char *type) = 0; +@@ -49,13 +49,16 @@ VTK_ABI_NAMESPACE_BEGIN + virtual void SetObjectAsData(RTWObject target, const char *id, RTWDataType type, RTWObject obj) = 0; + virtual void SetParam(RTWObject, const char *id, RTWDataType type, const void* mem) = 0; + virtual void SetBool(RTWObject, const char *id, bool x) = 0; ++ virtual void SetBox1f(RTWObject, const char *id, float x, float y) = 0; + virtual void SetInt(RTWObject, const char *id, int32_t x) = 0; ++ virtual void SetUInt(RTWObject, const char *id, uint32_t x) = 0; + virtual void SetVec2i(RTWObject, const char *id, int32_t x, int32_t y) = 0; + virtual void SetFloat(RTWObject, const char *id, float x) = 0; + virtual void SetVec2f(RTWObject, const char *id, float x, float y) = 0; + virtual void SetVec3i(RTWObject, const char *id, int x, int y, int z) = 0; + virtual void SetVec3f(RTWObject, const char *id, float x, float y, float z) = 0; + virtual void SetVec4f(RTWObject, const char *id, float x, float y, float z, float w) = 0; ++ virtual void SetLinear2f(RTWObject, const char *id, float x, float y, float z, float w) = 0; + + virtual void RemoveParam(RTWObject, const char *id) = 0; + +diff --git a/Rendering/RayTracing/RTWrapper/OSPRay/OSPRayBackend.h b/Rendering/RayTracing/RTWrapper/OSPRay/OSPRayBackend.h +index 4ee1be32282..f3fe5209b7b 100644 +--- a/Rendering/RayTracing/RTWrapper/OSPRay/OSPRayBackend.h ++++ b/Rendering/RayTracing/RTWrapper/OSPRay/OSPRayBackend.h +@@ -84,15 +84,9 @@ VTK_ABI_NAMESPACE_BEGIN + { + std::runtime_error("OSPRay device could not be fetched!"); + } +-#if OSPRAY_VERSION_MINOR > 1 + ospDeviceSetErrorCallback(device, [](void *, OSPError, const char *errorDetails) { + std::cerr << "OSPRay ERROR: " << errorDetails << std::endl; + }, nullptr); +-#else +- ospDeviceSetErrorFunc(device, [](OSPError, const char *errorDetails) { +- std::cerr << "OSPRay ERROR: " << errorDetails << std::endl; +- }); +-#endif + once = true; + } + return ret; +@@ -199,9 +193,9 @@ VTK_ABI_NAMESPACE_BEGIN + return reinterpret_cast(ospNewLight(light_type)); + } + +- RTWMaterial NewMaterial(const char *renderer_type, const char *material_type) override ++ RTWMaterial NewMaterial(const char *material_type) override + { +- return reinterpret_cast(ospNewMaterial(renderer_type, material_type)); ++ return reinterpret_cast(ospNewMaterial(material_type)); + } + + RTWVolume NewVolume(const char *type) override +@@ -280,6 +274,11 @@ VTK_ABI_NAMESPACE_BEGIN + ospSetInt(reinterpret_cast(object), id, x); + } + ++ void SetUInt(RTWObject object, const char *id, uint32_t x) override ++ { ++ ospSetUInt(reinterpret_cast(object), id, x); ++ } ++ + void SetBool(RTWObject object, const char *id, bool x) override + { + ospSetBool(reinterpret_cast(object), id, x); +@@ -290,6 +289,16 @@ VTK_ABI_NAMESPACE_BEGIN + ospSetFloat(reinterpret_cast(object), id, x); + } + ++ void SetLinear2f(RTWObject object, const char *id, float x, float y, float z, float w) override ++ { ++ ospSetLinear2f(reinterpret_cast(object), id, x, y, z, w); ++ } ++ ++ void SetBox1f(RTWObject object, const char *id, float x, float y) override ++ { ++ ospSetBox1f(reinterpret_cast(object), id, x, y); ++ } ++ + void SetVec2f(RTWObject object, const char *id, float x, float y) override + { + ospSetVec2f(reinterpret_cast(object), id, x, y); +diff --git a/Rendering/RayTracing/RTWrapper/RTWrapper.h b/Rendering/RayTracing/RTWrapper/RTWrapper.h +index 1bbdb893a42..ebbe18aef99 100644 +--- a/Rendering/RayTracing/RTWrapper/RTWrapper.h ++++ b/Rendering/RayTracing/RTWrapper/RTWrapper.h +@@ -140,7 +140,10 @@ std::set rtwGetAvailableBackends(); + + #define ospSetFloat backend->SetFloat + #define ospSetBool backend->SetBool ++#define ospSetBox1f backend->SetBox1f + #define ospSetInt backend->SetInt ++#define ospSetLinear2f backend->SetLinear2f ++#define ospSetUInt backend->SetUInt + #define ospSetVec2i backend->SetVec2i + #define ospSetVec3i backend->SetVec3i + #define ospSetVec2f backend->SetVec2f +diff --git a/Rendering/RayTracing/vtkOSPRayMaterialHelpers.cxx b/Rendering/RayTracing/vtkOSPRayMaterialHelpers.cxx +index 12fb6aaf98d..e21a761253b 100644 +--- a/Rendering/RayTracing/vtkOSPRayMaterialHelpers.cxx ++++ b/Rendering/RayTracing/vtkOSPRayMaterialHelpers.cxx +@@ -70,10 +70,10 @@ OSPTexture NewTexture2D(RTW::Backend* backend, const osp::vec2i& size, const OSP + ospSetObject(texture, "data", data_handle); + ospRelease(data_handle); + +- ospSetInt(texture, "format", static_cast(type)); ++ ospSetUInt(texture, "format", type); + if (flags & OSP_TEXTURE_FILTER_NEAREST) + { +- ospSetInt(texture, "filter", OSP_TEXTURE_FILTER_NEAREST); ++ ospSetUInt(texture, "filter", OSP_TEXTURE_FILTER_NEAREST); + } + ospCommit(texture); + +@@ -362,14 +362,13 @@ OSPMaterial NewMaterial(vtkOSPRayRendererNode* orn, OSPRenderer oRenderer, std:: + return result; + + (void)oRenderer; +- const std::string rendererType = vtkOSPRayRendererNode::GetRendererType(orn->GetRenderer()); +- result = ospNewMaterial(rendererType.c_str(), ospMatName.c_str()); ++ result = ospNewMaterial(ospMatName.c_str()); + + if (!result) + { + vtkGenericWarningMacro( + "OSPRay failed to create material: " << ospMatName << ". Trying obj instead."); +- result = ospNewMaterial(rendererType.c_str(), "obj"); ++ result = ospNewMaterial("obj"); + } + + ospCommit(result); +diff --git a/Rendering/RayTracing/vtkOSPRayMoleculeMapperNode.cxx b/Rendering/RayTracing/vtkOSPRayMoleculeMapperNode.cxx +index 5c0f36de21b..3ae794ed0f0 100644 +--- a/Rendering/RayTracing/vtkOSPRayMoleculeMapperNode.cxx ++++ b/Rendering/RayTracing/vtkOSPRayMoleculeMapperNode.cxx +@@ -292,8 +292,8 @@ void vtkOSPRayMoleculeMapperNode::Render(bool prepass) + ospRelease(oMaterial); + } + +- ospSetInt(bonds, "type", OSP_ROUND); +- ospSetInt(bonds, "basis", OSP_BEZIER); ++ ospSetUInt(bonds, "type", OSP_ROUND); ++ ospSetUInt(bonds, "basis", OSP_BEZIER); + + this->GeometricModels.emplace_back(bondsModel); + ospCommit(bonds); +@@ -394,8 +394,8 @@ void vtkOSPRayMoleculeMapperNode::Render(bool prepass) + ocolor[3] = opacity; + ospSetVec3f(latticeModel, "color", ocolor[0], ocolor[1], ocolor[2]); + +- ospSetInt(lattice, "type", OSP_ROUND); +- ospSetInt(lattice, "basis", OSP_LINEAR); ++ ospSetUInt(lattice, "type", OSP_ROUND); ++ ospSetUInt(lattice, "basis", OSP_LINEAR); + + this->GeometricModels.emplace_back(latticeModel); + ospCommit(lattice); +diff --git a/Rendering/RayTracing/vtkOSPRayPointGaussianMapperNode.cxx b/Rendering/RayTracing/vtkOSPRayPointGaussianMapperNode.cxx +index f294bf4b2f8..be040f627c5 100644 +--- a/Rendering/RayTracing/vtkOSPRayPointGaussianMapperNode.cxx ++++ b/Rendering/RayTracing/vtkOSPRayPointGaussianMapperNode.cxx +@@ -280,7 +280,7 @@ OSPVolumetricModel RenderAsParticles(osp::vec3f* vertices, std::vector(wRange[0]), static_cast(wRange[1])); ++ ospSetBox1f(oTF, "value", static_cast(wRange[0]), static_cast(wRange[1])); + ospCommit(oTF); + ospRelease(_Colors); + ospRelease(_AlphaData); +diff --git a/Rendering/RayTracing/vtkOSPRayPolyDataMapperNode.cxx b/Rendering/RayTracing/vtkOSPRayPolyDataMapperNode.cxx +index 8031b169f3f..3f5fb31fd17 100644 +--- a/Rendering/RayTracing/vtkOSPRayPolyDataMapperNode.cxx ++++ b/Rendering/RayTracing/vtkOSPRayPolyDataMapperNode.cxx +@@ -304,8 +304,8 @@ OSPGeometricModel RenderAsCylinders(std::vector& vertices, + _mdata = ospNewCopyData1D(mdata.data(), OSP_VEC4F, mdata.size()); + ospCommit(_mdata); + ospSetObject(ospMesh, "vertex.position_radius", _mdata); +- ospSetInt(ospMesh, "type", OSP_ROUND); +- ospSetInt(ospMesh, "basis", OSP_BEZIER); ++ ospSetUInt(ospMesh, "type", OSP_ROUND); ++ ospSetUInt(ospMesh, "basis", OSP_BEZIER); + } + else + { +@@ -319,8 +319,8 @@ OSPGeometricModel RenderAsCylinders(std::vector& vertices, + ospCommit(_mdata); + ospSetObject(ospMesh, "vertex.position", _mdata); + ospSetFloat(ospMesh, "radius", lineWidth); +- ospSetInt(ospMesh, "type", OSP_ROUND); +- ospSetInt(ospMesh, "basis", OSP_LINEAR); ++ ospSetUInt(ospMesh, "type", OSP_ROUND); ++ ospSetUInt(ospMesh, "basis", OSP_LINEAR); + } + + std::vector indices; +@@ -530,13 +530,13 @@ OSPGeometricModel RenderAsTriangles(OSPData vertices, std::vector& + if (interpolationType == VTK_PBR) + { + ospSetObject(actorMaterial, "map_normal", t2d); +- ospSetVec4f(actorMaterial, "map_normal.transform", textureTransform.x, textureTransform.y, +- textureTransform.z, textureTransform.w); ++ ospSetLinear2f(actorMaterial, "map_normal.transform", textureTransform.x, ++ textureTransform.y, textureTransform.z, textureTransform.w); + } + else + { + ospSetObject(actorMaterial, "map_Bump", t2d); +- ospSetVec4f(actorMaterial, "map_Bump.transform", textureTransform.x, textureTransform.y, ++ ospSetLinear2f(actorMaterial, "map_Bump.transform", textureTransform.x, textureTransform.y, + textureTransform.z, textureTransform.w); + } + ospCommit(actorMaterial); +@@ -562,13 +562,13 @@ OSPGeometricModel RenderAsTriangles(OSPData vertices, std::vector& + + OSPTexture t2dR = vtkOSPRayMaterialHelpers::VTKToOSPTexture(backend, vRoughnessTextureMap); + ospSetObject(actorMaterial, "map_roughness", t2dR); +- ospSetVec4f(actorMaterial, "map_roughness.transform", textureTransform.x, ++ ospSetLinear2f(actorMaterial, "map_roughness.transform", textureTransform.x, + textureTransform.y, textureTransform.z, textureTransform.w); + + OSPTexture t2dM = vtkOSPRayMaterialHelpers::VTKToOSPTexture(backend, vMetallicTextureMap); + ospSetObject(actorMaterial, "map_metallic", t2dM); +- ospSetVec4f(actorMaterial, "map_metallic.transform", textureTransform.x, textureTransform.y, +- textureTransform.z, textureTransform.w); ++ ospSetLinear2f(actorMaterial, "map_metallic.transform", textureTransform.x, ++ textureTransform.y, textureTransform.z, textureTransform.w); + + ospCommit(actorMaterial); + ospRelease(t2dR); +@@ -593,14 +593,14 @@ OSPGeometricModel RenderAsTriangles(OSPData vertices, std::vector& + OSPTexture t2dA = + vtkOSPRayMaterialHelpers::VTKToOSPTexture(backend, vAnisotropyValueTextureMap); + ospSetObject(actorMaterial, "map_anisotropy", t2dA); +- ospSetVec4f(actorMaterial, "map_anisotropy.transform", textureTransform.x, ++ ospSetLinear2f(actorMaterial, "map_anisotropy.transform", textureTransform.x, + textureTransform.y, textureTransform.z, textureTransform.w); + + OSPTexture t2dR = + vtkOSPRayMaterialHelpers::VTKToOSPTexture(backend, vAnisotropyRotationTextureMap); + ospSetObject(actorMaterial, "map_rotation", t2dR); +- ospSetVec4f(actorMaterial, "map_rotation.transform", textureTransform.x, textureTransform.y, +- textureTransform.z, textureTransform.w); ++ ospSetLinear2f(actorMaterial, "map_rotation.transform", textureTransform.x, ++ textureTransform.y, textureTransform.z, textureTransform.w); + ospCommit(actorMaterial); + ospRelease(t2dA); + ospRelease(t2dR); +@@ -610,7 +610,7 @@ OSPGeometricModel RenderAsTriangles(OSPData vertices, std::vector& + { + OSPTexture t2d = vtkOSPRayMaterialHelpers::VTKToOSPTexture(backend, vCoatNormalTextureMap); + ospSetObject(actorMaterial, "map_coatNormal", t2d); +- ospSetVec4f(actorMaterial, "map_coatNormal.transform", textureTransform.x, ++ ospSetLinear2f(actorMaterial, "map_coatNormal.transform", textureTransform.x, + textureTransform.y, textureTransform.z, textureTransform.w); + ospCommit(actorMaterial); + ospRelease(t2d); +@@ -624,13 +624,13 @@ OSPGeometricModel RenderAsTriangles(OSPData vertices, std::vector& + if (interpolationType == VTK_PBR) + { + ospSetObject(actorMaterial, "map_baseColor", ((OSPTexture)(t2d))); +- ospSetVec4f(actorMaterial, "map_baseColor.transform", textureTransform.x, ++ ospSetLinear2f(actorMaterial, "map_baseColor.transform", textureTransform.x, + textureTransform.y, textureTransform.z, textureTransform.w); + } + else + { + ospSetObject(actorMaterial, "map_kd", ((OSPTexture)(t2d))); +- ospSetVec4f(actorMaterial, "map_kd.transform", textureTransform.x, textureTransform.y, ++ ospSetLinear2f(actorMaterial, "map_kd.transform", textureTransform.x, textureTransform.y, + textureTransform.z, textureTransform.w); + } + ospCommit(actorMaterial); +diff --git a/Rendering/RayTracing/vtkOSPRayUnstructuredVolumeMapperNode.cxx b/Rendering/RayTracing/vtkOSPRayUnstructuredVolumeMapperNode.cxx +index 2662d7ac045..c764314c061 100644 +--- a/Rendering/RayTracing/vtkOSPRayUnstructuredVolumeMapperNode.cxx ++++ b/Rendering/RayTracing/vtkOSPRayUnstructuredVolumeMapperNode.cxx +@@ -355,7 +355,7 @@ void vtkOSPRayUnstructuredVolumeMapperNode::Render(bool prepass) + OSPData tfAlphaData = ospNewCopyData1D(&tfOVals[0], OSP_FLOAT, NumColors); + ospCommit(tfAlphaData); + ospSetObject(oTF, "opacity", tfAlphaData); +- ospSetVec2f(oTF, "valueRange", range[0], range[1]); ++ ospSetBox1f(oTF, "value", (float)range[0], (float)range[1]); + ospCommit(oTF); + + ospRelease(colorData); +diff --git a/Rendering/RayTracing/vtkOSPRayVolumeMapperNode.cxx b/Rendering/RayTracing/vtkOSPRayVolumeMapperNode.cxx +index 564a8be1eb4..dc65c5ac9a3 100644 +--- a/Rendering/RayTracing/vtkOSPRayVolumeMapperNode.cxx ++++ b/Rendering/RayTracing/vtkOSPRayVolumeMapperNode.cxx +@@ -322,7 +322,7 @@ void vtkOSPRayVolumeMapperNode::Render(bool prepass) + ospCommit(isosurfaces); + + ospSetObject(OSPRayIsosurface, "isovalue", isosurfaces); +- ospSetObject(OSPRayIsosurface, "volume", this->OSPRayVolumeModel); ++ ospSetObject(OSPRayIsosurface, "volume", this->OSPRayVolume); + ospCommit(OSPRayIsosurface); + ospRelease(isosurfaces); + +@@ -330,12 +330,15 @@ void vtkOSPRayVolumeMapperNode::Render(bool prepass) + OSPInstance instance = ospNewInstance(group); + + OSPGeometricModel OSPRayGeometricModel = ospNewGeometricModel(OSPRayIsosurface); +- ++ OSPData ospIsoColors = ospNewCopyData1D(this->IsoColors.data(), OSP_VEC4F, nbContours); ++ ospCommit(ospIsoColors); ++ ospSetObject(OSPRayGeometricModel, "color", ospIsoColors); + OSPMaterial material = + vtkOSPRayMaterialHelpers::NewMaterial(orn, orn->GetORenderer(), "obj"); + ospCommit(material); + ospSetObjectAsData(OSPRayGeometricModel, "material", OSP_MATERIAL, material); + ospCommit(OSPRayGeometricModel); ++ ospRelease(ospIsoColors); + ospRelease(material); + ospRelease(OSPRayIsosurface); + +@@ -417,7 +420,7 @@ void vtkOSPRayVolumeMapperNode::UpdateTransferFunction( + ospCommit(colorData); + ospSetObject(this->TransferFunction, "color", colorData); + +- ospSetVec2f(this->TransferFunction, "valueRange", tfRange.x, tfRange.y); ++ ospSetBox1f(this->TransferFunction, "value", tfRange.x, tfRange.y); + + OSPData tfAlphaData = ospNewCopyData1D(&this->TFOVals[0], OSP_FLOAT, this->NumColors); + ospCommit(tfAlphaData); +@@ -427,6 +430,21 @@ void vtkOSPRayVolumeMapperNode::UpdateTransferFunction( + ospRelease(colorData); + ospRelease(tfAlphaData); + ++ vtkContourValues* contours = volProperty->GetIsoSurfaceValues(); ++ this->IsoColors.clear(); ++ if (contours) ++ { ++ double* p = contours->GetValues(); ++ for (auto i = 0; i < contours->GetNumberOfContours(); ++i) ++ { ++ double* ncol = colorTF->GetColor(p[i]); ++ this->IsoColors.push_back(ncol[0]); ++ this->IsoColors.push_back(ncol[1]); ++ this->IsoColors.push_back(ncol[2]); ++ this->IsoColors.push_back(scalarTF->GetValue(p[i])); ++ } ++ } ++ + this->PropertyTime.Modified(); + } + VTK_ABI_NAMESPACE_END +diff --git a/Rendering/RayTracing/vtkOSPRayVolumeMapperNode.h b/Rendering/RayTracing/vtkOSPRayVolumeMapperNode.h +index 267875f057b..7769aece01c 100644 +--- a/Rendering/RayTracing/vtkOSPRayVolumeMapperNode.h ++++ b/Rendering/RayTracing/vtkOSPRayVolumeMapperNode.h +@@ -68,6 +68,7 @@ protected: + + std::vector TFVals; + std::vector TFOVals; ++ std::vector IsoColors; + + vtkOSPRayCache* Cache; + +-- +GitLab