1f9b284de2
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> # Conflicts: # Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin_precompiled.h # Code/Editor/Plugins/EditorCommon/EditorCommon_precompiled.h # Code/Editor/Plugins/EditorCommon/stdafx.cpp # Code/Editor/Plugins/FFMPEGPlugin/FFMPEGPlugin_precompiled.h # Code/Editor/Plugins/PerforcePlugin/PerforcePlugin_precompiled.h # Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsTool_precompiled.h # Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFramework_precompiled.h # Code/Tools/AssetProcessor/native/precompiled.h # Code/Tools/Standalone/StandaloneTools_precompiled.h # Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer_precompiled.h # Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageProcessing_precompiled.h # Gems/Atom/RHI/DX12/Code/Source/RHI/Atom_RHI_DX12_precompiled.h # Gems/Atom/RHI/Metal/Code/Include/Platform/Mac/Atom_RHI_Metal_precompiled_Platform.h # Gems/Atom/RHI/Metal/Code/Include/Platform/iOS/Atom_RHI_Metal_precompiled_Platform.h # Gems/Atom/RHI/Metal/Code/Source/Atom_RHI_Metal_precompiled.h # Gems/Atom/RHI/Metal/Code/atom_rhi_metal_common_files.cmake # Gems/Atom/RHI/Null/Code/Source/Atom_RHI_Null_precompiled.h # Gems/Atom/RHI/Null/Code/atom_rhi_null_common_files.cmake # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Android/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Mac/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Windows/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Source/Atom_RHI_Vulkan_precompiled.h # Gems/Atom/RHI/Vulkan/Code/Source/RHI/SwapChain.cpp # Gems/Atom/RHI/Vulkan/Code/atom_rhi_vulkan_common_files.cmake # Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/AtomFont_precompiled.h # Gems/Blast/Code/Source/StdAfx.cpp # Gems/Camera/Code/Source/Camera_precompiled.h # Gems/EMotionFX/Code/Source/EMotionFX_precompiled.h # Gems/FastNoise/Code/Source/FastNoise_precompiled.h # Gems/Gestures/Code/Source/Gestures_precompiled.h # Gems/GradientSignal/Code/Source/GradientSignal_precompiled.h # Gems/GraphCanvas/Code/precompiled.h # Gems/ImGui/Code/Source/ImGui_precompiled.h # Gems/InAppPurchases/Code/Source/InAppPurchases_precompiled.h # Gems/LmbrCentral/Code/Source/LmbrCentral_precompiled.h # Gems/LmbrCentral/Code/Tests/ShapeGeometryUtilTest.cpp # Gems/LyShine/Code/Editor/UiCanvasEditor_precompiled.h # Gems/LyShine/Code/Source/Animation/LyShine_precompiled.h # Gems/LyShine/Code/Source/LyShine_precompiled.h # Gems/LyShineExamples/Code/Source/LyShineExamples_precompiled.h # Gems/Maestro/Code/Source/Cinematics/Maestro_precompiled.h # Gems/Maestro/Code/Source/Maestro_precompiled.h # Gems/MessagePopup/Code/Source/MessagePopup_precompiled.h # Gems/Metastream/Code/Source/Metastream_precompiled.h # Gems/Microphone/Code/Source/Microphone_precompiled.h # Gems/Multiplayer/Code/Source/Multiplayer_precompiled.h # Gems/PhysX/Code/NumericalMethods/Source/NumericalMethods_precompiled.h # Gems/PhysX/Code/Source/PhysXUnsupported_precompiled.h # Gems/PhysX/Code/Source/PhysX_precompiled.h # Gems/PhysX/Code/physx_unsupported_files.cmake # Gems/PhysXDebug/Code/Source/PhysXDebugUnsupported_precompiled.h # Gems/PhysXDebug/Code/Source/PhysXDebug_precompiled.h # Gems/ScriptCanvas/Code/Editor/precompiled.h # Gems/ScriptCanvas/Code/Source/precompiled.h # Gems/ScriptCanvasDeveloper/Code/Source/precompiled.h # Gems/ScriptCanvasPhysics/Code/Source/ScriptCanvasPhysics_precompiled.h # Gems/ScriptEvents/Code/Source/precompiled.h # Gems/ScriptEvents/Code/Tests/Editor/EditorTests.cpp # Gems/ScriptedEntityTweener/Code/Source/ScriptedEntityTweener_precompiled.h # Gems/SliceFavorites/Code/Source/SliceFavorites_precompiled.h # Gems/StartingPointCamera/Code/Source/StartingPointCamera_precompiled.h # Gems/StartingPointInput/Code/Source/StartingPointInput_precompiled.h # Gems/StartingPointMovement/Code/Source/StartingPointMovement_precompiled.h # Gems/SurfaceData/Code/Source/SurfaceData_precompiled.h # Gems/TextureAtlas/Code/Source/TextureAtlas_precompiled.h # Gems/TickBusOrderViewer/Code/Source/TickBusOrderViewer_precompiled.h # Gems/Twitch/Code/Source/Twitch_precompiled.h # Gems/VirtualGamepad/Code/Source/VirtualGamepad_precompiled.h # Gems/WhiteBox/Code/Source/WhiteBoxUnsupported_precompiled.h # Gems/WhiteBox/Code/Source/WhiteBox_precompiled.h
182 lines
6.3 KiB
C++
182 lines
6.3 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/Component/ComponentApplicationBus.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;
|
|
AZ::ComponentApplicationBus::BroadcastResult(rootDirectory, &AZ::ComponentApplicationRequests::GetAppRoot);
|
|
|
|
// 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
|