Move BuildDebugSceneGraph function out of SceneProcessing gem (#3290)
Moved BuildDebugSceneGraph out of SceneProcessing gem and into DebugOutput class to allow the function to be shared, which ensures the same dbgsg format is outputted among any calls to the function. * Move BuildDebugSceneGraph function, update all calls to this function Signed-off-by: Victor Huang <huavicto@amazon.com> * Remove unused includes Signed-off-by: Victor Huang <huavicto@amazon.com> * Remove z Signed-off-by: Victor Huang <huavicto@amazon.com>
This commit is contained in:
@@ -10,9 +10,7 @@
|
||||
#include <AzCore/IO/FileIO.h>
|
||||
#include <AzCore/IO/SystemFile.h>
|
||||
#include <AzCore/Serialization/Utils.h>
|
||||
#include <SceneAPI/SceneCore/Containers/Views/PairIterator.h>
|
||||
#include <SceneAPI/SceneCore/DataTypes/IGraphObject.h>
|
||||
#include <SceneAPI/SceneCore/Containers/Views/SceneGraphDownwardsIterator.h>
|
||||
#include <AzCore/Serialization/SerializeContext.h>
|
||||
#include <AzCore/std/containers/set.h>
|
||||
#include <AzFramework/Application/Application.h>
|
||||
@@ -306,7 +304,10 @@ namespace SceneBuilder
|
||||
|
||||
if (itr != request.m_jobDescription.m_jobParameters.end() && itr->second == "true")
|
||||
{
|
||||
BuildDebugSceneGraph(outputFolder.c_str(), productList, scene);
|
||||
AZStd::string productName;
|
||||
AzFramework::StringFunc::Path::GetFullFileName(scene->GetSourceFilename().c_str(), productName);
|
||||
AzFramework::StringFunc::Path::ReplaceExtension(productName, "dbgsg");
|
||||
AZ::SceneAPI::Utilities::DebugOutput::BuildDebugSceneGraph(outputFolder.c_str(), productList, scene, productName);
|
||||
}
|
||||
|
||||
AZ_TracePrintf(Utilities::LogWindow, "Collecting and registering products.\n");
|
||||
@@ -371,66 +372,4 @@ namespace SceneBuilder
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
void WriteAndLog(AZ::IO::SystemFile& dbgFile, const char* strToWrite)
|
||||
{
|
||||
AZ_TracePrintf(AZ::SceneAPI::Utilities::LogWindow, "%s", strToWrite);
|
||||
dbgFile.Write(strToWrite, strlen(strToWrite));
|
||||
dbgFile.Write("\n", strlen("\n"));
|
||||
|
||||
}
|
||||
|
||||
void SceneBuilderWorker::BuildDebugSceneGraph(const char* outputFolder, AZ::SceneAPI::Events::ExportProductList& productList, const AZStd::shared_ptr<AZ::SceneAPI::Containers::Scene>& scene) const
|
||||
{
|
||||
const int debugSceneGraphVersion = 1;
|
||||
AZStd::string productName, debugSceneFile;
|
||||
|
||||
AzFramework::StringFunc::Path::GetFullFileName(scene->GetSourceFilename().c_str(), productName);
|
||||
AzFramework::StringFunc::Path::ReplaceExtension(productName, "dbgsg");
|
||||
AzFramework::StringFunc::Path::ConstructFull(outputFolder, productName.c_str(), debugSceneFile);
|
||||
AZ_TracePrintf(AZ::SceneAPI::Utilities::LogWindow, "outputFolder %s, name %s.\n", outputFolder, productName.c_str());
|
||||
|
||||
AZ::IO::SystemFile dbgFile;
|
||||
if (dbgFile.Open(debugSceneFile.c_str(), AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY))
|
||||
{
|
||||
WriteAndLog(dbgFile, AZStd::string::format("ProductName: %s", productName.c_str()).c_str());
|
||||
WriteAndLog(dbgFile, AZStd::string::format("debugSceneGraphVersion: %d", debugSceneGraphVersion).c_str());
|
||||
WriteAndLog(dbgFile, scene->GetName().c_str());
|
||||
|
||||
const AZ::SceneAPI::Containers::SceneGraph& sceneGraph = scene->GetGraph();
|
||||
auto names = sceneGraph.GetNameStorage();
|
||||
auto content = sceneGraph.GetContentStorage();
|
||||
auto pairView = AZ::SceneAPI::Containers::Views::MakePairView(names, content);
|
||||
auto view = AZ::SceneAPI::Containers::Views::MakeSceneGraphDownwardsView<
|
||||
AZ::SceneAPI::Containers::Views::BreadthFirst>(
|
||||
sceneGraph, sceneGraph.GetRoot(), pairView.cbegin(), true);
|
||||
|
||||
for (auto&& viewIt : view)
|
||||
{
|
||||
if (viewIt.second == nullptr)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
AZ::SceneAPI::DataTypes::IGraphObject* graphObject = const_cast<AZ::SceneAPI::DataTypes::IGraphObject*>(viewIt.second.get());
|
||||
|
||||
WriteAndLog(dbgFile, AZStd::string::format("Node Name: %s", viewIt.first.GetName()).c_str());
|
||||
WriteAndLog(dbgFile, AZStd::string::format("Node Path: %s", viewIt.first.GetPath()).c_str());
|
||||
WriteAndLog(dbgFile, AZStd::string::format("Node Type: %s", graphObject->RTTI_GetTypeName()).c_str());
|
||||
|
||||
AZ::SceneAPI::Utilities::DebugOutput debugOutput;
|
||||
viewIt.second->GetDebugOutput(debugOutput);
|
||||
|
||||
if (!debugOutput.GetOutput().empty())
|
||||
{
|
||||
WriteAndLog(dbgFile, debugOutput.GetOutput().c_str());
|
||||
}
|
||||
}
|
||||
dbgFile.Close();
|
||||
|
||||
static const AZ::Data::AssetType dbgSceneGraphAssetType("{07F289D1-4DC7-4C40-94B4-0A53BBCB9F0B}");
|
||||
productList.AddProduct(productName, AZ::Uuid::CreateName(productName.c_str()), dbgSceneGraphAssetType,
|
||||
AZStd::nullopt, AZStd::nullopt);
|
||||
}
|
||||
}
|
||||
} // namespace SceneBuilder
|
||||
|
||||
@@ -55,9 +55,6 @@ namespace SceneBuilder
|
||||
void PopulateProductDependencies(const AZ::SceneAPI::Events::ExportProduct& exportProduct, const char* watchFolder, AssetBuilderSDK::JobProduct& jobProduct) const;
|
||||
|
||||
protected:
|
||||
|
||||
void BuildDebugSceneGraph(const char* outputFolder, AZ::SceneAPI::Events::ExportProductList& productList, const AZStd::shared_ptr<AZ::SceneAPI::Containers::Scene>& scene) const;
|
||||
|
||||
bool LoadScene(AZStd::shared_ptr<AZ::SceneAPI::Containers::Scene>& result,
|
||||
const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user