From 33768b129ef6b92cd7f5cedf439d0d25e953d5e4 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 20 Oct 2023 10:44:52 +0100 Subject: [PATCH 1/2] Moved the viewer.compile() to after the WorldNot::initialize(..). Added extra --sd maxShadowDistance control for shadow maps to worldviewer command line. --- src/applications/worldviewer/worldviewer.cpp | 20 +++++++++++++++++--- src/vsgCs/WorldNode.cpp | 2 -- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/applications/worldviewer/worldviewer.cpp b/src/applications/worldviewer/worldviewer.cpp index 9155e0c..e93f9aa 100644 --- a/src/applications/worldviewer/worldviewer.cpp +++ b/src/applications/worldviewer/worldviewer.cpp @@ -134,7 +134,9 @@ int main(int argc, char** argv) } } bool useHeadlight = arguments.read({"--headlight"}); - auto shadowMaps = arguments.value(0, "--shadow-maps"); + auto shadowMaps = arguments.value(0, "--shadow-maps"); + auto maxShadowDistance = arguments.value(10000.0, "--sd"); + if (arguments.errors()) { return arguments.writeErrorMessages(std::cerr); @@ -261,6 +263,7 @@ int main(int argc, char** argv) commandGraph->addChild(renderGraph); auto view = vsg::View::create(camera); + view->viewDependentState->maxShadowDistance = maxShadowDistance; if (useHeadlight) { view->addChild(vsg::createHeadlight()); @@ -270,14 +273,25 @@ int main(int argc, char** argv) // Attach the ImGui graphical interface renderGraph->addChild(ui->getImGui()); viewer->assignRecordAndSubmitTaskAndPresentation({commandGraph}); - // Compile everything we can at this point. - viewer->compile(); + // Perform any late initialization of TilesetNode objects. Most importantly, this tracks VSG // cameras so that they can be used by cesium-native to determine visible tiles. worldNode->initialize(viewer); + + // Compile everything we can at this point. + // + // best practice is to tell the viewer what resources to allocate in the viewer.compile() call via ResourceHints + // + // auto resourceHints = vsg::ResourceHints::create(); + // resourceHints->numShadowMapsRange = {shadowMaps, 64}; + // resourceHints->maxSlot = 4; + // viewer->compile(resourceHints); + viewer->compile(); + auto lastAct = gsl::finally([worldNode]() { vsgCs::shutdown(); worldNode->shutdown();}); + // rendering main loop while (viewer->advanceToNextFrame() && (numFrames < 0 || (numFrames--) > 0)) { diff --git a/src/vsgCs/WorldNode.cpp b/src/vsgCs/WorldNode.cpp index f1fc0f6..5817bd9 100644 --- a/src/vsgCs/WorldNode.cpp +++ b/src/vsgCs/WorldNode.cpp @@ -86,8 +86,6 @@ bool WorldNode::initialize(const vsg::ref_ptr& viewer) genv->overlayPipelineLayout, pbr::WORLD_DESCRIPTOR_SET, descriptorBuilder->descriptorSets[pbr::WORLD_DESCRIPTOR_SET]); stateGroup->add(bindDescriptorSet); - // Overkill; better to just compile the stateGroup - viewer->compile(); return result; } From 327a075ae91c30675eadb25f39912aed538568ad Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 20 Oct 2023 10:46:55 +0100 Subject: [PATCH 2/2] Changed the inclusion of the VSG, vsgXchange and vsgImGui to use find_package first then if that fails resort to FetchContext. --- CMakeLists.txt | 61 +++++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index faee2fa..92a43e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,33 +34,48 @@ if (VULKAN_SDK) endif() set(VSG_MIN_VERSION 1.1.0) - -FetchContent_Declare(vsg - GIT_REPOSITORY https://github.com/vsg-dev/VulkanSceneGraph.git - GIT_TAG master - GIT_PROGRESS TRUE - FIND_PACKAGE_ARGS ${VSG_MIN_VERSION} -) - -FetchContent_MakeAvailable(vsg) -# find_package(vsg) includes vsgMacros -if (vsg_SOURCE_DIR) - SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${vsg_SOURCE_DIR}/cmake") - include("vsgMacros") +find_package(vsg ${VSG_MIN_VERSION}) +if (NOT vsg_FOUND) + FetchContent_Declare(vsg + GIT_REPOSITORY https://github.com/vsg-dev/VulkanSceneGraph.git + GIT_TAG master + GIT_PROGRESS TRUE + FIND_PACKAGE_ARGS ${VSG_MIN_VERSION} + ) + + FetchContent_MakeAvailable(vsg) + # find_package(vsg) includes vsgMacros + if (vsg_SOURCE_DIR) + SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${vsg_SOURCE_DIR}/cmake") + include("vsgMacros") + endif() endif() -#find_package(vsgXchange) +set(VSGXCHANGE_MIN_VERSION 1.0.5) +find_package(vsgXchange ${VSGXCHANGE_MIN_VERSION}) +if (NOT vsgXchange_FOUND) + FetchContent_Declare(vsgXchange + GIT_REPOSITORY https://github.com/vsg-dev/vsgXchange.git + GIT_TAG master + GIT_PROGRESS TRUE + FIND_PACKAGE_ARGS ${VSGXCHANGE_MIN_VERSION} + ) + + FetchContent_MakeAvailable(vsgXchange) +endif() set(VSGIMGUI_MIN_VERSION 0.1.0) - -FetchContent_Declare(vsgImGui - GIT_REPOSITORY https://github.com/vsg-dev/vsgImGui.git - GIT_TAG v0.1.0 - GIT_PROGRESS TRUE - FIND_PACKAGE_ARGS ${VSGIMGUI_MIN_VERSION} -) - -FetchContent_MakeAvailable(vsgImGui) +find_package(vsgImGui ${VSGIMGUI_MIN_VERSION}) +if (NOT vsgImGui_FOUND) + FetchContent_Declare(vsgImGui + GIT_REPOSITORY https://github.com/vsg-dev/vsgImGui.git + GIT_TAG v0.1.0 + GIT_PROGRESS TRUE + FIND_PACKAGE_ARGS ${VSGIMGUI_MIN_VERSION} + ) + + FetchContent_MakeAvailable(vsgImGui) +endif() # Wrangle Cesium's dependencies into shape i.e., install them! option(GSL_INSTALL "Generate and install GSL target" ON)