diff --git a/CMakeLists.txt b/CMakeLists.txt index 66d1b4ad..eaf1ddad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,7 @@ endif() # Declare the project. project(HydraViewportToolbox - VERSION 0.25.08.0 + VERSION 0.25.11.0 DESCRIPTION "Utilities to support graphics viewports using OpenUSD Hydra" LANGUAGES CXX HOMEPAGE_URL https://github.com/Autodesk/hydra-viewport-toolbox diff --git a/include/hvt/engine/taskUtils.h b/include/hvt/engine/taskUtils.h index 7bbebbcf..fb56bceb 100644 --- a/include/hvt/engine/taskUtils.h +++ b/include/hvt/engine/taskUtils.h @@ -60,7 +60,7 @@ HVT_API PXR_NS::TfToken GetRenderingBackendName(PXR_NS::HdRenderIndex const* ren /// Sets the blend state for the given material tag in the render task parameters. HVT_API extern void SetBlendStateForMaterialTag( - PXR_NS::TfToken const& materialTag, PXR_NS::HdxRenderTaskParams* renderParams); + PXR_NS::TfToken const& materialTag, PXR_NS::HdxRenderTaskParams& renderParams); /// Gets the render task path for the given controller and material tag. HVT_API extern PXR_NS::SdfPath GetRenderTaskPath( diff --git a/source/engine/taskCreationHelpers.cpp b/source/engine/taskCreationHelpers.cpp index 9b185c17..112a78d1 100644 --- a/source/engine/taskCreationHelpers.cpp +++ b/source/engine/taskCreationHelpers.cpp @@ -743,6 +743,8 @@ SdfPath CreateRenderTask(TaskManagerPtr& pTaskManager, TfToken const& taskName, PXR_NS::SdfPath const& atPos = SdfPath::EmptyPath(), TaskManager::InsertionOrder order = TaskManager::InsertionOrder::insertAtEnd) { + // Intermediate variable to avoid the capture of the following lambda to take + // the ownership of the variable. TaskManager& taskManager = *pTaskManager; auto fnCommit = @@ -755,7 +757,7 @@ SdfPath CreateRenderTask(TaskManagerPtr& pTaskManager, HdxRenderTaskParams params = getLayerSettings()->renderParams; // Set blend state and depth mask according to material tag (additive, masked, etc). - SetBlendStateForMaterialTag(materialTag, ¶ms); + SetBlendStateForMaterialTag(materialTag, params); // NOTE: According to pxr::HdxRenderTaskParams, viewport is only used if framing is // invalid. @@ -837,7 +839,7 @@ SdfPath CreateRenderTask(TaskManagerPtr& pTaskManager, HdxRenderTaskParams renderParams = getLayerSettings()->renderParams; // Set the blend state based on material tag. - SetBlendStateForMaterialTag(materialTag, &renderParams); + SetBlendStateForMaterialTag(materialTag, renderParams); return taskManager.AddRenderTask(taskName, renderParams, fnCommit, atPos, order); } diff --git a/source/engine/taskUtils.cpp b/source/engine/taskUtils.cpp index ccbe74b0..5ebfd42f 100644 --- a/source/engine/taskUtils.cpp +++ b/source/engine/taskUtils.cpp @@ -64,18 +64,12 @@ TfToken GetRenderingBackendName(HdRenderIndex const* renderIndex) return HgiTokens->OpenGL; } -void SetBlendStateForMaterialTag(TfToken const& materialTag, HdxRenderTaskParams* renderParams) +void SetBlendStateForMaterialTag(TfToken const& materialTag, HdxRenderTaskParams& renderParams) { - if (!TF_VERIFY( - renderParams, "SetBlendStateForMaterialTag: The renderParams parameter is null.")) - { - return; - } - if (materialTag == HdStMaterialTagTokens->additive) { // Additive blend -- so no sorting of drawItems is needed - renderParams->blendEnable = true; + renderParams.blendEnable = true; // For color, we are setting all factors to ONE. // // This means we are expecting pre-multiplied alpha coming out @@ -84,25 +78,25 @@ void SetBlendStateForMaterialTag(TfToken const& materialTag, HdxRenderTaskParams // shader side, since it means we would force a pre-multiplied // alpha step on the color coming out of the shader. // - renderParams->blendColorOp = HdBlendOpAdd; - renderParams->blendColorSrcFactor = HdBlendFactorOne; - renderParams->blendColorDstFactor = HdBlendFactorOne; + renderParams.blendColorOp = HdBlendOpAdd; + renderParams.blendColorSrcFactor = HdBlendFactorOne; + renderParams.blendColorDstFactor = HdBlendFactorOne; // For alpha, we set the factors so that the alpha in the // framebuffer won't change. Recall that the geometry in the // additive render pass is supposed to be emitting light but // be fully transparent, that is alpha = 0, so that the order // in which it is drawn doesn't matter. - renderParams->blendAlphaOp = HdBlendOpAdd; - renderParams->blendAlphaSrcFactor = HdBlendFactorZero; - renderParams->blendAlphaDstFactor = HdBlendFactorOne; + renderParams.blendAlphaOp = HdBlendOpAdd; + renderParams.blendAlphaSrcFactor = HdBlendFactorZero; + renderParams.blendAlphaDstFactor = HdBlendFactorOne; // Translucent objects should not block each other in depth buffer - renderParams->depthMaskEnable = false; + renderParams.depthMaskEnable = false; // Since we are using alpha blending, we disable screen door // transparency for this renderpass. - renderParams->enableAlphaToCoverage = false; + renderParams.enableAlphaToCoverage = false; #if defined(DRAW_ORDER) } @@ -110,21 +104,21 @@ void SetBlendStateForMaterialTag(TfToken const& materialTag, HdxRenderTaskParams { // ResultColor = SrcColor * SrcAlpha + DestColor * (1-SrcAlpha) - renderParams->blendEnable = true; - renderParams->blendColorOp = HdBlendOpAdd; - renderParams->blendColorSrcFactor = HdBlendFactorSrcAlpha; - renderParams->blendColorDstFactor = HdBlendFactorOneMinusSrcAlpha; + renderParams.blendEnable = true; + renderParams.blendColorOp = HdBlendOpAdd; + renderParams.blendColorSrcFactor = HdBlendFactorSrcAlpha; + renderParams.blendColorDstFactor = HdBlendFactorOneMinusSrcAlpha; - renderParams->blendAlphaOp = HdBlendOpAdd; - renderParams->blendAlphaSrcFactor = HdBlendFactorOne; - renderParams->blendAlphaDstFactor = HdBlendFactorZero; + renderParams.blendAlphaOp = HdBlendOpAdd; + renderParams.blendAlphaSrcFactor = HdBlendFactorOne; + renderParams.blendAlphaDstFactor = HdBlendFactorZero; // Disable depth buffer for draworder. - renderParams->depthMaskEnable = false; + renderParams.depthMaskEnable = false; // Since we are using alpha blending, we disable screen door // transparency for this renderpass. - renderParams->enableAlphaToCoverage = false; + renderParams.enableAlphaToCoverage = false; #endif } else if (materialTag == HdStMaterialTagTokens->defaultMaterialTag || @@ -134,9 +128,9 @@ void SetBlendStateForMaterialTag(TfToken const& materialTag, HdxRenderTaskParams // we classify them as separate because in the general case, masked // materials use fragment shader discards while the defaultMaterialTag // should not. - renderParams->blendEnable = false; - renderParams->depthMaskEnable = true; - renderParams->enableAlphaToCoverage = true; + renderParams.blendEnable = false; + renderParams.depthMaskEnable = true; + renderParams.enableAlphaToCoverage = true; } } diff --git a/test/RenderingFramework/CMakeLists.txt b/test/RenderingFramework/CMakeLists.txt index 8e811b3f..8fdff5cb 100644 --- a/test/RenderingFramework/CMakeLists.txt +++ b/test/RenderingFramework/CMakeLists.txt @@ -74,7 +74,9 @@ target_compile_definitions(${_TARGET} ) # Where to find all the data files for the unit tests. -cmake_path(SET hvt_test_data_normalized NORMALIZE "${CMAKE_CURRENT_SOURCE_DIR}/..") +cmake_path(SET hvt_test_data_normalized NORMALIZE "${CMAKE_CURRENT_SOURCE_DIR}/../test") +# Remove the last '/' if any. +get_filename_component(hvt_test_data_normalized "${hvt_test_data_normalized}" DIRECTORY) target_compile_definitions(${_TARGET} PRIVATE HVT_TEST_DATA_PATH=${hvt_test_data_normalized} @@ -82,6 +84,8 @@ target_compile_definitions(${_TARGET} # Where to output any processing results. cmake_path(SET test_data_output_normalized NORMALIZE "${CMAKE_CURRENT_BINARY_DIR}/..") +# Remove the last '/' if any. +get_filename_component(test_data_output_normalized "${test_data_output_normalized}" DIRECTORY) target_compile_definitions(${_TARGET} PRIVATE TEST_DATA_OUTPUT_PATH=${test_data_output_normalized} diff --git a/test/RenderingFramework/TestHelpers.cpp b/test/RenderingFramework/TestHelpers.cpp index bbd2c6bf..58e468cf 100644 --- a/test/RenderingFramework/TestHelpers.cpp +++ b/test/RenderingFramework/TestHelpers.cpp @@ -66,7 +66,7 @@ const std::filesystem::path inAssetsPath = getenv("HVT_TEST_ASSETS"); const std::string resFullpath = getenv("HVT_RESOURCES"); std::filesystem::path inBaselinePath = getenv("HVT_BASELINES"); #else -const auto outFullpath = std::filesystem::path(TOSTRING(TEST_DATA_OUTPUT_PATH)) / "computed"; +const std::filesystem::path outFullpath = TOSTRING(TEST_DATA_OUTPUT_PATH) + "/computed"; const std::filesystem::path inAssetsPath = TOSTRING(HVT_TEST_DATA_PATH) + "/data/assets"; const std::string resFullpath = TOSTRING(HVT_RESOURCE_PATH); std::filesystem::path inBaselinePath = TOSTRING(HVT_TEST_DATA_PATH) + "/data/baselines"; diff --git a/test/data/baselines/howTo/useSkyDomeTask.png b/test/data/baselines/howTo/useSkyDomeTask.png index 126cc9f5..1b6a4c92 100644 Binary files a/test/data/baselines/howTo/useSkyDomeTask.png and b/test/data/baselines/howTo/useSkyDomeTask.png differ diff --git a/test/data/baselines/howTo/useSkyDomeTask_osx.png b/test/data/baselines/howTo/useSkyDomeTask_osx.png index 7ce61777..aaae5096 100644 Binary files a/test/data/baselines/howTo/useSkyDomeTask_osx.png and b/test/data/baselines/howTo/useSkyDomeTask_osx.png differ diff --git a/test/data/baselines/origin_dev/02511/howTo/useSkyDomeTask.png b/test/data/baselines/origin_dev/02511/howTo/useSkyDomeTask.png new file mode 100644 index 00000000..126cc9f5 Binary files /dev/null and b/test/data/baselines/origin_dev/02511/howTo/useSkyDomeTask.png differ diff --git a/test/data/baselines/origin_dev/02511/howTo/useSkyDomeTask_osx.png b/test/data/baselines/origin_dev/02511/howTo/useSkyDomeTask_osx.png new file mode 100644 index 00000000..7ce61777 Binary files /dev/null and b/test/data/baselines/origin_dev/02511/howTo/useSkyDomeTask_osx.png differ diff --git a/test/howTos/howTo11_UseSkyDomeTask.cpp b/test/howTos/howTo11_UseSkyDomeTask.cpp index 470e7dc2..e69c9d6f 100644 --- a/test/howTos/howTo11_UseSkyDomeTask.cpp +++ b/test/howTos/howTo11_UseSkyDomeTask.cpp @@ -139,6 +139,10 @@ HVT_TEST(howTo, useSkyDomeTask) // Validates the rendering result. - // OGSMOD-8325 - WebGPU & Linux needs a small threshold to use baseline images. - ASSERT_TRUE(context->validateImages(computedImageName, imageFile, 20)); + std::string newImageName = imageFile; +#if PXR_VERSION >= 2511 && !defined(ENABLE_ADSK_OPENUSD_PENDING) + newImageName = "origin_dev/02511/" + imageFile; +#endif + + ASSERT_TRUE(context->validateImages(computedImageName, newImageName)); }