7#ifndef JPH_DEBUG_RENDERER
8 #error This file should only be included when JPH_DEBUG_RENDERER is defined
11#ifndef JPH_DEBUG_RENDERER_EXPORT
13 #define JPH_DEBUG_RENDERER_EXPORT JPH_EXPORT
82 template <
class VERTEX_ARRAY>
83 void DrawWirePolygon(
RMat44Arg inTransform,
const VERTEX_ARRAY &inVertices,
ColorArg inColor,
float inArrowSize = 0.0f) {
for (
typename VERTEX_ARRAY::size_type i = 0; i < inVertices.size(); ++i)
DrawArrow(inTransform * inVertices[i], inTransform * inVertices[(i + 1) % inVertices.size()], inColor, inArrowSize); }
86 void DrawWireSphere(
RVec3Arg inCenter,
float inRadius,
ColorArg inColor,
int inLevel = 3);
232 if (dist_sq <= inLODScaleSq *
Square(lod.mDistance))
281 void DrawGeometry(
RMat44Arg inModelMatrix,
ColorArg inModelColor,
const GeometryRef &inGeometry,
ECullMode inCullMode =
ECullMode::CullBackFace,
ECastShadow inCastShadow =
ECastShadow::On,
EDrawMode inDrawMode =
EDrawMode::Solid) {
DrawGeometry(inModelMatrix, inGeometry->mBounds.Transformed(inModelMatrix), max(max(inModelMatrix.
GetAxisX().
LengthSq(), inModelMatrix.
GetAxisY().
LengthSq()), inModelMatrix.
GetAxisZ().
LengthSq()), inModelColor, inGeometry, inCullMode, inCastShadow, inDrawMode); }
298 void Create8thSphereRecursive(
Array<uint32> &ioIndices,
Array<Vertex> &ioVertices,
Vec3Arg inDir1,
uint32 &ioIdx1,
Vec3Arg inDir2,
uint32 &ioIdx2,
Vec3Arg inDir3,
uint32 &ioIdx3,
const Float2 &inUV,
SupportFunction inGetSupport,
int inLevel);
302 Batch CreateCylinder(
float inTop,
float inBottom,
float inTopRadius,
float inBottomRadius,
int inLevel);
305 Geometry * CreateSwingLimitGeometry(
int inNumSegments,
const Vec3 *inVertices);
316 struct SwingConeLimits
318 bool operator == (
const SwingConeLimits &inRHS)
const
320 return mSwingYHalfAngle == inRHS.mSwingYHalfAngle
321 && mSwingZHalfAngle == inRHS.mSwingZHalfAngle;
324 float mSwingYHalfAngle;
325 float mSwingZHalfAngle;
328 JPH_MAKE_HASH_STRUCT(SwingConeLimits, SwingConeLimitsHasher, t.mSwingYHalfAngle, t.mSwingZHalfAngle)
330 using SwingConeBatches = UnorderedMap<SwingConeLimits, GeometryRef, SwingConeLimitsHasher>;
331 SwingConeBatches mSwingConeLimits;
332 SwingConeBatches mPrevSwingConeLimits;
334 struct SwingPyramidLimits
336 bool operator == (
const SwingPyramidLimits &inRHS)
const
338 return mMinSwingYAngle == inRHS.mMinSwingYAngle
339 && mMaxSwingYAngle == inRHS.mMaxSwingYAngle
340 && mMinSwingZAngle == inRHS.mMinSwingZAngle
341 && mMaxSwingZAngle == inRHS.mMaxSwingZAngle;
344 float mMinSwingYAngle;
345 float mMaxSwingYAngle;
346 float mMinSwingZAngle;
347 float mMaxSwingZAngle;
350 JPH_MAKE_HASH_STRUCT(SwingPyramidLimits, SwingPyramidLimitsHasher, t.mMinSwingYAngle, t.mMaxSwingYAngle, t.mMinSwingZAngle, t.mMaxSwingZAngle)
352 using SwingPyramidBatches = UnorderedMap<SwingPyramidLimits, GeometryRef, SwingPyramidLimitsHasher>;
353 SwingPyramidBatches mSwingPyramidLimits;
354 SwingPyramidBatches mPrevSwingPyramidLimits;
356 using PieBatces = UnorderedMap<
float, GeometryRef>;
357 PieBatces mPieLimits;
358 PieBatces mPrevPieLimits;
364 return mTop == inRHS.mTop
365 && mBottom == inRHS.mBottom
366 && mTopRadius == inRHS.mTopRadius
367 && mBottomRadius == inRHS.mBottomRadius;
378 using TaperedCylinderBatces = UnorderedMap<
TaperedCylinder, GeometryRef, TaperedCylinderHasher>;
379 TaperedCylinderBatces mTaperedCylinders;
380 TaperedCylinderBatces mPrevTaperedCylinders;
Color ColorArg
Type to use for passing arguments to a function.
Definition Color.h:12
#define JPH_NAMESPACE_END
Definition Core.h:425
std::uint32_t uint32
Definition Core.h:503
#define JPH_NAMESPACE_BEGIN
Definition Core.h:419
#define JPH_DEBUG_RENDERER_EXPORT
Definition DebugRenderer.h:13
Array< Float3 > VertexList
Definition Float3.h:43
#define JPH_MAKE_HASH_STRUCT(type, name,...)
Definition HashCombine.h:198
Array< IndexedTriangleNoMaterial > IndexedTriangleNoMaterialList
Definition IndexedTriangle.h:123
JPH_INLINE constexpr T Square(T inV)
Square a value.
Definition Math.h:55
const Vec3 Vec3Arg
Definition MathTypes.h:19
#define JPH_OVERRIDE_NEW_DELETE
Macro to override the new and delete functions.
Definition Memory.h:50
@ Off
Motor is off.
Definition MotorSettings.h:18
Vec3Arg RVec3Arg
Definition Real.h:30
Mat44Arg RMat44Arg
Definition Real.h:32
@ TaperedCylinder
Definition Shape.h:123
@ Triangle
Definition Shape.h:81
Axis aligned box.
Definition AABox.h:16
float GetSqDistanceTo(Vec3Arg inPoint) const
Get the squared distance between inPoint and this box (will be 0 if in Point is inside the box).
Definition AABox.h:303
bool empty() const
Returns true if there are no elements in the array.
Definition Array.h:391
size_type size() const
Returns amount of elements in the array.
Definition Array.h:397
Class that holds an RGBA color with 8-bits per component.
Definition Color.h:16
static const Color sWhite
Definition Color.h:81
A geometry primitive containing triangle batches for various lods.
Definition DebugRenderer.h:215
AABox mBounds
Bounding box that encapsulates all LODs.
Definition DebugRenderer.h:242
const LOD & GetLOD(Vec3Arg inCameraPosition, const AABox &inWorldSpaceBounds, float inLODScaleSq) const
Definition DebugRenderer.h:228
Array< LOD > mLODs
All level of details for this mesh.
Definition DebugRenderer.h:239
JPH_OVERRIDE_NEW_DELETE Geometry(const AABox &inBounds)
Constructor.
Definition DebugRenderer.h:220
Geometry(const Batch &inBatch, const AABox &inBounds)
Definition DebugRenderer.h:221
A single level of detail.
Definition DebugRenderer.h:207
Batch mTriangleBatch
Definition DebugRenderer.h:209
float mDistance
Definition DebugRenderer.h:210
A single triangle.
Definition DebugRenderer.h:193
Vertex mV[3]
Definition DebugRenderer.h:199
Vertex format used by the triangle renderer.
Definition DebugRenderer.h:183
Float3 mPosition
Definition DebugRenderer.h:185
Float2 mUV
Definition DebugRenderer.h:187
Color mColor
Definition DebugRenderer.h:188
Float3 mNormal
Definition DebugRenderer.h:186
Batch CreateTriangleBatchForConvex(SupportFunction inGetSupport, int inLevel, AABox *outBounds=nullptr)
Definition DebugRenderer.cpp:677
virtual void DrawText3D(RVec3Arg inPosition, const string_view &inString, ColorArg inColor=Color::sWhite, float inHeight=0.5f)=0
Draw text.
static AABox sCalculateBounds(const Vertex *inVertices, int inVertexCount)
Calculate bounding box for a batch of triangles.
Definition DebugRenderer.cpp:630
GeometryRef CreateTriangleGeometryForConvex(SupportFunction inGetSupport)
Definition DebugRenderer.cpp:698
void DrawCapsule(RMat44Arg inMatrix, float inHalfHeightOfCylinder, float inRadius, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Definition DebugRenderer.cpp:757
Ref< RefTargetVirtual > Batch
Handle for a batch of triangles.
Definition DebugRenderer.h:203
void DrawMarker(RVec3Arg inPosition, ColorArg inColor, float inSize)
Draw a marker on a position.
Definition DebugRenderer.cpp:172
void DrawPlane(RVec3Arg inPoint, Vec3Arg inNormal, ColorArg inColor, float inSize)
Draw a plane through inPoint with normal inNormal.
Definition DebugRenderer.cpp:215
Ref< Geometry > GeometryRef
Handle for a lodded triangle batch.
Definition DebugRenderer.h:246
void Initialize()
Initialize the system, must be called from the constructor of the DebugRenderer implementation.
Definition DebugRenderer.cpp:463
void DrawBox(const AABox &inBox, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Draw a box.
Definition DebugRenderer.cpp:723
void DrawTaperedCylinder(RMat44Arg inMatrix, float inTop, float inBottom, float inTopRadius, float inBottomRadius, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Definition DebugRenderer.cpp:1067
void DrawWireTriangle(RVec3Arg inV1, RVec3Arg inV2, RVec3Arg inV3, ColorArg inColor)
Draw wireframe triangle.
Definition DebugRenderer.cpp:242
ECullMode
Determines which polygons are culled.
Definition DebugRenderer.h:265
@ CullBackFace
Don't draw backfacing polygons.
Definition DebugRenderer.h:266
void DrawSphere(RVec3Arg inCenter, float inRadius, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Draw a sphere.
Definition DebugRenderer.cpp:741
JPH_OVERRIDE_NEW_DELETE DebugRenderer()
Constructor.
Definition DebugRenderer.cpp:72
void DrawCoordinateSystem(RMat44Arg inTransform, float inSize=1.0f)
Draw coordinate system (3 arrows, x = red, y = green, z = blue).
Definition DebugRenderer.cpp:206
virtual Batch CreateTriangleBatch(const Vertex *inVertices, int inVertexCount, const uint32 *inIndices, int inIndexCount)=0
virtual Batch CreateTriangleBatch(const Triangle *inTriangles, int inTriangleCount)=0
Create a batch of triangles that can be drawn efficiently.
virtual void DrawGeometry(RMat44Arg inModelMatrix, const AABox &inWorldSpaceBounds, float inLODScaleSq, ColorArg inModelColor, const GeometryRef &inGeometry, ECullMode inCullMode=ECullMode::CullBackFace, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)=0
void DrawPie(RVec3Arg inCenter, float inRadius, Vec3Arg inNormal, Vec3Arg inAxis, float inMinAngle, float inMaxAngle, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Definition DebugRenderer.cpp:1001
ECastShadow
Enum that determines if a shadow should be cast or not.
Definition DebugRenderer.h:91
@ On
This shape should cast a shadow.
Definition DebugRenderer.h:92
@ Off
This shape should not cast a shadow.
Definition DebugRenderer.h:93
static DebugRenderer * sInstance
Singleton instance.
Definition DebugRenderer.h:179
void DrawWireBox(const AABox &inBox, ColorArg inColor)
Draw wireframe box.
Definition DebugRenderer.cpp:85
Batch CreateTriangleBatch(const Array< Triangle > &inTriangles)
Definition DebugRenderer.h:254
EDrawMode
Determines how triangles are drawn.
Definition DebugRenderer.h:98
@ Solid
Draw as a solid shape.
Definition DebugRenderer.h:99
void DrawOpenCone(RVec3Arg inTop, Vec3Arg inAxis, Vec3Arg inPerpendicular, float inHalfAngle, float inLength, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Definition DebugRenderer.cpp:791
Batch CreateTriangleBatch(const Array< Vertex > &inVertices, const Array< uint32 > &inIndices)
Definition DebugRenderer.h:255
void DrawGeometry(RMat44Arg inModelMatrix, ColorArg inModelColor, const GeometryRef &inGeometry, ECullMode inCullMode=ECullMode::CullBackFace, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Definition DebugRenderer.h:281
void DrawWirePolygon(RMat44Arg inTransform, const VERTEX_ARRAY &inVertices, ColorArg inColor, float inArrowSize=0.0f)
Draw a wireframe polygon.
Definition DebugRenderer.h:83
void NextFrame()
Call once after frame is complete. Releases unused dynamically generated geometry assets.
Definition DebugRenderer.cpp:1090
virtual void DrawLine(RVec3Arg inFrom, RVec3Arg inTo, ColorArg inColor)=0
Draw line.
void DrawArrow(RVec3Arg inFrom, RVec3Arg inTo, ColorArg inColor, float inSize)
Draw an arrow.
Definition DebugRenderer.cpp:184
void DrawCylinder(RMat44Arg inMatrix, float inHalfHeight, float inRadius, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Definition DebugRenderer.cpp:781
void DrawSwingPyramidLimits(RMat44Arg inMatrix, float inMinSwingYAngle, float inMaxSwingYAngle, float inMinSwingZAngle, float inMaxSwingZAngle, float inEdgeLength, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Definition DebugRenderer.cpp:950
void DrawSwingConeLimits(RMat44Arg inMatrix, float inSwingYHalfAngle, float inSwingZHalfAngle, float inEdgeLength, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Definition DebugRenderer.cpp:866
function< Vec3(Vec3Arg inDirection)> SupportFunction
Create a primitive for a convex shape using its support function.
Definition DebugRenderer.h:259
void DrawUnitSphere(RMat44Arg inMatrix, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::On, EDrawMode inDrawMode=EDrawMode::Solid)
Definition DebugRenderer.cpp:750
virtual void DrawTriangle(RVec3Arg inV1, RVec3Arg inV2, RVec3Arg inV3, ColorArg inColor, ECastShadow inCastShadow=ECastShadow::Off)=0
Draw a single back face culled triangle.
Class that holds 2 floats, used as a storage class mainly.
Definition Float2.h:11
Class that holds 3 floats. Used as a storage class. Convert to Vec3 for calculations.
Definition Float3.h:13
JPH_INLINE Vec3 GetAxisY() const
Definition Mat44.h:148
JPH_INLINE Vec3 GetAxisZ() const
Definition Mat44.h:150
JPH_INLINE Vec3 GetAxisX() const
Access to the columns.
Definition Mat44.h:146
Oriented box.
Definition OrientedBox.h:18
Definition Reference.h:107
JPH_INLINE float LengthSq() const
Squared length of vector.
Definition Vec3.inl:666