Files
o3de/Gems/PhysX/Code/Source/Debug/PhysXDebug.cpp
T
lumberyard-employee-dm 5fc4551ac0 [LYN-8041] Enable relocation of the Project Game Release Layout (#5380)
* Enable relocation of the Project Game Release Layout

Relocating the Project Game Release Layout to another directory on the file system failed due to the querying of the engine root failing due to the ComponentApplication::m_engineRoot not using the project path stored in the SettingsRegisry if the engine root cannot be detected

Removed the ApplicationRequestBus GetEngineRoot function.
The ComponentApplicationRequestBus has a function of the same name that returns the same path.

Removed the deprecated GetAppRoot function.
The path it returns has no defined value. It was not the engine root or the project root.
Removed unused CFileUtil and CFileUtil_impl functions that were invoking the ApplicationREquestBus GetEngineRoot function.
On the way to update the functions it was discovered that they aren't called

Added a CalculateBranchToken overload that can populate a fixed_string to avoid heap allocations

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Protect against an empty list of artifacts to remove when generating the
engine.pak

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
2021-11-09 12:03:52 -06:00

181 lines
6.2 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include <AzCore/std/functional.h>
#include <Debug/PhysXDebug.h>
#include <AzFramework/API/ApplicationAPI.h>
#include <AzFramework/StringFunc/StringFunc.h>
#include <AzCore/std/string/conversions.h>
#include <PxPhysicsAPI.h>
#include <AzCore/Utils/Utils.h>
namespace PhysX
{
namespace Debug
{
physx::PxPvd* PhysXDebug::InitializePhysXPvd([[maybe_unused]] physx::PxFoundation* foundation)
{
#ifdef AZ_PHYSICS_DEBUG_ENABLED
m_pvd = PxCreatePvd(*foundation);
return m_pvd;
#else
return nullptr;
#endif
}
void PhysXDebug::ShutdownPhysXPvd()
{
DisconnectFromPvd();
if (m_pvd)
{
m_pvd->release();
m_pvd = nullptr;
}
}
void PhysXDebug::Initialize(const DebugConfiguration& config)
{
m_config = config;
}
void PhysXDebug::UpdateDebugConfiguration(const DebugConfiguration& config)
{
const bool signalDebugDataChanged = m_config.m_debugDisplayData != config.m_debugDisplayData;
const bool signalPvdConfigChanged = m_config.m_pvdConfigurationData != config.m_pvdConfigurationData;
if (signalDebugDataChanged || signalPvdConfigChanged)
{
m_config = config;
if (signalDebugDataChanged)
{
m_debugDisplayDataChangedEvent.Signal(config.m_debugDisplayData);
}
if (signalPvdConfigChanged)
{
m_pvdConfigurationChangedEvent.Signal(config.m_pvdConfigurationData);
}
}
}
const DebugConfiguration& PhysXDebug::GetDebugConfiguration() const
{
return m_config;
}
const PvdConfiguration& PhysXDebug::GetPhysXPvdConfiguration() const
{
return m_config.m_pvdConfigurationData;
}
const DebugDisplayData& PhysXDebug::GetDebugDisplayData() const
{
return m_config.m_debugDisplayData;
}
void PhysXDebug::UpdateColliderProximityVisualization(const ColliderProximityVisualization& data)
{
if (m_config.m_debugDisplayData.m_colliderProximityVisualization != data)
{
m_config.m_debugDisplayData.m_colliderProximityVisualization = data;
m_colliderProximityVisualizationChangedEvent.Signal(data);
}
}
bool PhysXDebug::ConnectToPvd()
{
#ifdef AZ_PHYSICS_DEBUG_ENABLED
DisconnectFromPvd();
// Select current PhysX Pvd debug type
switch (m_config.m_pvdConfigurationData.m_transportType)
{
case PhysX::Debug::PvdTransportType::File:
{
// Use current timestamp in the filename.
AZ::u64 currentTimeStamp = AZStd::GetTimeUTCMilliSecond() / 1000;
// Strip any filename used as .pxd2 forced (only .pvd or .px2 valid for PVD version 3.2016.12.21494747)
AzFramework::StringFunc::Path::StripExtension(m_config.m_pvdConfigurationData.m_fileName);
// Create output filename (format: <TimeStamp>-<FileName>.pxd2)
AZStd::string filename = AZStd::to_string(currentTimeStamp);
AzFramework::StringFunc::Append(filename, "-");
AzFramework::StringFunc::Append(filename, m_config.m_pvdConfigurationData.m_fileName.c_str());
AzFramework::StringFunc::Append(filename, ".pxd2");
AZStd::string rootDirectory{ AZStd::string_view(AZ::Utils::GetEnginePath()) };
// Create the full filepath.
AZStd::string safeFilePath;
AzFramework::StringFunc::Path::Join
(
rootDirectory.c_str(),
filename.c_str(),
safeFilePath
);
m_pvdTransport = physx::PxDefaultPvdFileTransportCreate(safeFilePath.c_str());
break;
}
case PhysX::Debug::PvdTransportType::Network:
{
m_pvdTransport = physx::PxDefaultPvdSocketTransportCreate
(
m_config.m_pvdConfigurationData.m_host.c_str(),
m_config.m_pvdConfigurationData.m_port,
m_config.m_pvdConfigurationData.m_timeoutInMilliseconds
);
break;
}
default:
{
AZ_Error("PhysX", false, "Invalid PhysX Visual Debugger (PVD) Debug Type used %d.", m_config.m_pvdConfigurationData.m_transportType);
break;
}
}
bool pvdConnectionSuccessful = false;
if (m_pvd && m_pvdTransport)
{
pvdConnectionSuccessful = m_pvd->connect(*m_pvdTransport, physx::PxPvdInstrumentationFlag::eALL);
if (pvdConnectionSuccessful)
{
AZ_Printf("PhysX", "Successfully connected to the PhysX Visual Debugger (PVD).\n");
}
else
{
AZ_Printf("PhysX", "Failed to connect to the PhysX Visual Debugger (PVD).\n");
}
}
return pvdConnectionSuccessful;
#else
return false;
#endif // AZ_PHYSICS_DEBUG_ENABLED
}
void PhysXDebug::DisconnectFromPvd()
{
#ifdef AZ_PHYSICS_DEBUG_ENABLED
if (m_pvd)
{
m_pvd->disconnect();
}
if (m_pvdTransport)
{
m_pvdTransport->release();
m_pvdTransport = nullptr;
AZ_Printf("PhysX", "Successfully disconnected from the PhysX Visual Debugger (PVD).\n");
}
#endif
}
}// namespace Debug
}// namespace PhysX