first pass at moving physx debug from gEnv->pRenderer to DebugDisplayRequestBus (#600)

main
amzn-sean 5 years ago committed by GitHub
parent cb5cedd7fe
commit cb44a7ebb2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -39,14 +39,9 @@
namespace PhysXDebug
{
const float SystemComponent::m_maxCullingBoxSize = 150.0f;
const ColorB CreateColorFromU32(AZ::u32 color)
namespace Internal
{
const AZ::u8 a = static_cast<AZ::u8>((color & 0xFF000000) >> 24);
const AZ::u8 b = static_cast<AZ::u8>((color & 0x00FF0000) >> 16);
const AZ::u8 g = static_cast<AZ::u8>((color & 0x0000FF00) >> 8);
const AZ::u8 r = static_cast<AZ::u8>(color & 0x000000FF);
return ColorB(r, g, b, a);
const AZ::Crc32 VewportId = 0; // was AzFramework::g_defaultSceneEntityDebugDisplayId but it didn't render to the viewport.
}
bool UseEditorPhysicsScene()
@ -338,18 +333,18 @@ namespace PhysXDebug
}
}
void SystemComponent::BuildColorPickingMenuItem(const AZStd::string& label, ColorB& color)
void SystemComponent::BuildColorPickingMenuItem(const AZStd::string& label, AZ::Color& color)
{
float col[3] = {color.r / 255.0f, color.g / 255.0f, color.b / 255.0f};
float col[3] = {color.GetR(), color.GetG(), color.GetB()};
if (ImGui::ColorEdit3(label.c_str(), col, ImGuiColorEditFlags_NoAlpha))
{
const float r = AZ::GetClamp(col[0] * 255.0f, 0.0f, 255.0f);
const float g = AZ::GetClamp(col[1] * 255.0f, 0.0f, 255.0f);
const float b = AZ::GetClamp(col[2] * 255.0f, 0.0f, 255.0f);
const float r = AZ::GetClamp(col[0], 0.0f, 1.0f);
const float g = AZ::GetClamp(col[1], 0.0f, 1.0f);
const float b = AZ::GetClamp(col[2], 0.0f, 1.0f);
color.r = static_cast<AZ::u8>(r);
color.g = static_cast<AZ::u8>(g);
color.b = static_cast<AZ::u8>(b);
color.SetR(r);
color.SetG(g);
color.SetB(b);
}
}
#endif // IMGUI_ENABLED
@ -511,16 +506,34 @@ namespace PhysXDebug
void SystemComponent::RenderBuffers()
{
if (gEnv && gEnv->pRenderer && !m_linePoints.empty())
if (!m_linePoints.empty() || !m_trianglePoints.empty())
{
AZ_Assert(m_linePoints.size() == m_lineColors.size(), "Lines: Expected an equal number of points to colors.");
gEnv->pRenderer->GetIRenderAuxGeom()->DrawLines(m_linePoints.begin(), m_linePoints.size(), m_lineColors.begin(), 1.0f);
}
if (gEnv && gEnv->pRenderer && !m_trianglePoints.empty())
{
AZ_Assert(m_trianglePoints.size() == m_triangleColors.size(), "Triangles: Expected an equal number of points to colors.");
gEnv->pRenderer->GetIRenderAuxGeom()->DrawTriangles(m_trianglePoints.begin(), m_trianglePoints.size(), m_triangleColors.begin());
AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus;
AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, Internal::VewportId);
AZ_Assert(debugDisplayBus, "Invalid DebugDisplayRequestBus.");
AzFramework::DebugDisplayRequests* debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus);
if (debugDisplay)
{
if (!m_linePoints.empty())
{
AZ_Assert(m_linePoints.size() == m_lineColors.size(), "Lines: Expected an equal number of points to colors.");
const size_t minLen = AZ::GetMin(m_linePoints.size(), m_lineColors.size());
for (size_t i = 0; i < minLen; i += 2)
{
debugDisplay->DrawLine(m_linePoints[i], m_linePoints[i + 1], m_lineColors[i].GetAsVector4(), m_lineColors[i + 1].GetAsVector4());
}
}
if (!m_trianglePoints.empty())
{
AZ_Assert(m_trianglePoints.size() == m_triangleColors.size(), "Triangles: Expected an equal number of points to colors.");
const size_t minLen = AZ::GetMin(m_trianglePoints.size(), m_triangleColors.size());
for (size_t i = 0; i < minLen; i += 3)
{
debugDisplay->SetColor(m_triangleColors[i]);
debugDisplay->DrawTri(m_trianglePoints[i], m_trianglePoints[i + 1], m_trianglePoints[i + 2]);
}
}
}
}
}
@ -677,8 +690,8 @@ namespace PhysXDebug
if (!cameraTranslation.IsClose(AZ::Vector3::CreateZero()))
{
physx::PxVec3 min = PxMathConvert(cameraTranslation - AZ::Vector3(m_culling.m_boxSize));
physx::PxVec3 max = PxMathConvert(cameraTranslation + AZ::Vector3(m_culling.m_boxSize));
const physx::PxVec3 min = PxMathConvert(cameraTranslation - AZ::Vector3(m_culling.m_boxSize));
const physx::PxVec3 max = PxMathConvert(cameraTranslation + AZ::Vector3(m_culling.m_boxSize));
m_cullingBox = physx::PxBounds3(min, max);
if (m_culling.m_boxWireframe)
@ -813,8 +826,8 @@ namespace PhysXDebug
for (size_t lineIndex = 0; lineIndex < jointLineBufferSize / 2; lineIndex++)
{
m_linePoints.emplace_back(AZVec3ToLYVec3(jointWorldTransform.TransformPoint(m_jointLineBuffer[2 * lineIndex])));
m_linePoints.emplace_back(AZVec3ToLYVec3(jointWorldTransform.TransformPoint(m_jointLineBuffer[2 * lineIndex + 1])));
m_linePoints.emplace_back(jointWorldTransform.TransformPoint(m_jointLineBuffer[2 * lineIndex]));
m_linePoints.emplace_back(jointWorldTransform.TransformPoint(m_jointLineBuffer[2 * lineIndex + 1]));
m_lineColors.emplace_back(m_colorMappings.m_green);
m_lineColors.emplace_back(m_colorMappings.m_green);
}
@ -829,16 +842,21 @@ namespace PhysXDebug
{
AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::Physics);
if (gEnv && gEnv->pRenderer && m_settings.m_visualizationEnabled && m_culling.m_boxWireframe)
if (m_settings.m_visualizationEnabled && m_culling.m_boxWireframe)
{
ColorB wireframeColor = MapOriginalPhysXColorToUserDefinedValues(1);
AABB lyAABB(AZAabbToLyAABB(cullingBoxAabb));
gEnv->pRenderer->GetIRenderAuxGeom()->DrawAABB(lyAABB, false, wireframeColor, EBoundingBoxDrawStyle::eBBD_Extremes_Color_Encoded);
AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus;
AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, Internal::VewportId);
AZ_Assert(debugDisplayBus, "Invalid DebugDisplayRequestBus.");
if (AzFramework::DebugDisplayRequests* debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus))
{
const AZ::Color wireframeColor = MapOriginalPhysXColorToUserDefinedValues(1);
debugDisplay->SetColor(wireframeColor.GetAsVector4());
debugDisplay->DrawWireBox(cullingBoxAabb.GetMin(), cullingBoxAabb.GetMax());
}
}
}
ColorB SystemComponent::MapOriginalPhysXColorToUserDefinedValues(const physx::PxU32& originalColor)
AZ::Color SystemComponent::MapOriginalPhysXColorToUserDefinedValues(const physx::PxU32& originalColor)
{
AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::Physics);
@ -877,18 +895,18 @@ namespace PhysXDebug
void SystemComponent::InitPhysXColorMappings()
{
AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::Physics);
m_colorMappings.m_defaultColor = CreateColorFromU32(physx::PxDebugColor::eARGB_GREEN);
m_colorMappings.m_black = CreateColorFromU32(physx::PxDebugColor::eARGB_BLACK);
m_colorMappings.m_red = CreateColorFromU32(physx::PxDebugColor::eARGB_RED);
m_colorMappings.m_green = CreateColorFromU32(physx::PxDebugColor::eARGB_GREEN);
m_colorMappings.m_blue = CreateColorFromU32(physx::PxDebugColor::eARGB_BLUE);
m_colorMappings.m_yellow = CreateColorFromU32(physx::PxDebugColor::eARGB_YELLOW);
m_colorMappings.m_magenta = CreateColorFromU32(physx::PxDebugColor::eARGB_MAGENTA);
m_colorMappings.m_cyan = CreateColorFromU32(physx::PxDebugColor::eARGB_CYAN);
m_colorMappings.m_white = CreateColorFromU32(physx::PxDebugColor::eARGB_WHITE);
m_colorMappings.m_grey = CreateColorFromU32(physx::PxDebugColor::eARGB_GREY);
m_colorMappings.m_darkRed = CreateColorFromU32(physx::PxDebugColor::eARGB_DARKRED);
m_colorMappings.m_darkGreen = CreateColorFromU32(physx::PxDebugColor::eARGB_DARKGREEN);
m_colorMappings.m_darkBlue = CreateColorFromU32(physx::PxDebugColor::eARGB_DARKBLUE);
m_colorMappings.m_defaultColor.FromU32(physx::PxDebugColor::eARGB_GREEN);
m_colorMappings.m_black.FromU32(physx::PxDebugColor::eARGB_BLACK);
m_colorMappings.m_red.FromU32(physx::PxDebugColor::eARGB_RED);
m_colorMappings.m_green.FromU32(physx::PxDebugColor::eARGB_GREEN);
m_colorMappings.m_blue.FromU32(physx::PxDebugColor::eARGB_BLUE);
m_colorMappings.m_yellow.FromU32(physx::PxDebugColor::eARGB_YELLOW);
m_colorMappings.m_magenta.FromU32(physx::PxDebugColor::eARGB_MAGENTA);
m_colorMappings.m_cyan.FromU32(physx::PxDebugColor::eARGB_CYAN);
m_colorMappings.m_white.FromU32(physx::PxDebugColor::eARGB_WHITE);
m_colorMappings.m_grey.FromU32(physx::PxDebugColor::eARGB_GREY);
m_colorMappings.m_darkRed.FromU32(physx::PxDebugColor::eARGB_DARKRED);
m_colorMappings.m_darkGreen.FromU32(physx::PxDebugColor::eARGB_DARKGREEN);
m_colorMappings.m_darkBlue.FromU32(physx::PxDebugColor::eARGB_DARKBLUE);
}
}

@ -87,19 +87,19 @@ namespace PhysXDebug
{
AZ_RTTI(ColorMappings, "{021E40A6-568E-430A-9332-EF180DACD3C0}");
// user defined colors for physx debug primitives
ColorB m_defaultColor;
ColorB m_black;
ColorB m_red;
ColorB m_green;
ColorB m_blue;
ColorB m_yellow;
ColorB m_magenta;
ColorB m_cyan;
ColorB m_white;
ColorB m_grey;
ColorB m_darkRed;
ColorB m_darkGreen;
ColorB m_darkBlue;
AZ::Color m_defaultColor;
AZ::Color m_black;
AZ::Color m_red;
AZ::Color m_green;
AZ::Color m_blue;
AZ::Color m_yellow;
AZ::Color m_magenta;
AZ::Color m_cyan;
AZ::Color m_white;
AZ::Color m_grey;
AZ::Color m_darkRed;
AZ::Color m_darkGreen;
AZ::Color m_darkBlue;
};
class SystemComponent
@ -156,7 +156,7 @@ namespace PhysXDebug
/// Convert from PhysX Visualization debug colors to user defined colors.
/// @param originalColor a color from the PhysX debug visualization data.
/// @return a user specified color mapping (defaulting to the original PhysX color).
ColorB MapOriginalPhysXColorToUserDefinedValues(const physx::PxU32& originalColor);
AZ::Color MapOriginalPhysXColorToUserDefinedValues(const physx::PxU32& originalColor);
/// Initialise the PhysX debug draw colors based on defaults.
void InitPhysXColorMappings();
@ -194,7 +194,7 @@ namespace PhysXDebug
#ifdef IMGUI_ENABLED
/// Build a specific color picker menu option.
void BuildColorPickingMenuItem(const AZStd::string& label, ColorB& color);
void BuildColorPickingMenuItem(const AZStd::string& label, AZ::Color& color);
#endif // IMGUI_ENABLED
physx::PxScene* GetCurrentPxScene();
@ -209,10 +209,10 @@ namespace PhysXDebug
bool m_editorPhysicsSceneDirty = true;
static const float m_maxCullingBoxSize;
AZStd::vector<Vec3> m_linePoints;
AZStd::vector<ColorB> m_lineColors;
AZStd::vector<Vec3> m_trianglePoints;
AZStd::vector<ColorB> m_triangleColors;
AZStd::vector<AZ::Vector3> m_linePoints;
AZStd::vector<AZ::Color> m_lineColors;
AZStd::vector<AZ::Vector3> m_trianglePoints;
AZStd::vector<AZ::Color> m_triangleColors;
// joint limit buffers
AZStd::vector<AZ::Vector3> m_jointVertexBuffer;

Loading…
Cancel
Save