|
@@ -866,6 +866,12 @@ void DebugRenderer::DrawSwingConeLimits(RMat44Arg inMatrix, float inSwingYHalfAn
|
|
|
SwingConeLimits limits { inSwingYHalfAngle, inSwingZHalfAngle };
|
|
|
GeometryRef &geometry = mSwingConeLimits[limits];
|
|
|
if (geometry == nullptr)
|
|
|
+ {
|
|
|
+ SwingConeBatches::iterator it = mPrevSwingConeLimits.find(limits);
|
|
|
+ if (it != mPrevSwingConeLimits.end())
|
|
|
+ geometry = it->second;
|
|
|
+ }
|
|
|
+ if (geometry == nullptr)
|
|
|
{
|
|
|
// Number of segments to draw the cone with
|
|
|
const int num_segments = 64;
|
|
@@ -943,6 +949,12 @@ void DebugRenderer::DrawSwingPyramidLimits(RMat44Arg inMatrix, float inMinSwingY
|
|
|
SwingPyramidLimits limits { inMinSwingYAngle, inMaxSwingYAngle, inMinSwingZAngle, inMaxSwingZAngle };
|
|
|
GeometryRef &geometry = mSwingPyramidLimits[limits];
|
|
|
if (geometry == nullptr)
|
|
|
+ {
|
|
|
+ SwingPyramidBatches::iterator it = mPrevSwingPyramidLimits.find(limits);
|
|
|
+ if (it != mPrevSwingPyramidLimits.end())
|
|
|
+ geometry = it->second;
|
|
|
+ }
|
|
|
+ if (geometry == nullptr)
|
|
|
{
|
|
|
// Number of segments to draw the cone with
|
|
|
const int num_segments = 64;
|
|
@@ -991,6 +1003,12 @@ void DebugRenderer::DrawPie(RVec3Arg inCenter, float inRadius, Vec3Arg inNormal,
|
|
|
float delta_angle = inMaxAngle - inMinAngle;
|
|
|
GeometryRef &geometry = mPieLimits[delta_angle];
|
|
|
if (geometry == nullptr)
|
|
|
+ {
|
|
|
+ PieBatces::iterator it = mPrevPieLimits.find(delta_angle);
|
|
|
+ if (it != mPrevPieLimits.end())
|
|
|
+ geometry = it->second;
|
|
|
+ }
|
|
|
+ if (geometry == nullptr)
|
|
|
{
|
|
|
int num_parts = (int)ceil(64.0f * delta_angle / (2.0f * JPH_PI));
|
|
|
|
|
@@ -1036,6 +1054,18 @@ void DebugRenderer::DrawPie(RVec3Arg inCenter, float inRadius, Vec3Arg inNormal,
|
|
|
DrawGeometry(matrix, inColor, geometry, ECullMode::Off, inCastShadow, inDrawMode);
|
|
|
}
|
|
|
|
|
|
+void DebugRenderer::NextFrame()
|
|
|
+{
|
|
|
+ mPrevSwingConeLimits.clear();
|
|
|
+ std::swap(mSwingConeLimits, mPrevSwingConeLimits);
|
|
|
+
|
|
|
+ mPrevSwingPyramidLimits.clear();
|
|
|
+ std::swap(mSwingPyramidLimits, mPrevSwingPyramidLimits);
|
|
|
+
|
|
|
+ mPrevPieLimits.clear();
|
|
|
+ std::swap(mPieLimits, mPrevPieLimits);
|
|
|
+}
|
|
|
+
|
|
|
JPH_NAMESPACE_END
|
|
|
|
|
|
#endif // JPH_DEBUG_RENDERER
|