godot-module-template/engine/thirdparty/jolt_physics/Jolt/Renderer/DebugRendererSimple.h

89 lines
2.9 KiB
C++

// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
// SPDX-FileCopyrightText: 2024 Jorrit Rouwe
// SPDX-License-Identifier: MIT
#pragma once
#ifndef JPH_DEBUG_RENDERER
#error This file should only be included when JPH_DEBUG_RENDERER is defined
#endif // !JPH_DEBUG_RENDERER
#include <Jolt/Renderer/DebugRenderer.h>
JPH_NAMESPACE_BEGIN
/// Inherit from this class to simplify implementing a debug renderer, start with this implementation:
///
/// class MyDebugRenderer : public JPH::DebugRendererSimple
/// {
/// public:
/// virtual void DrawLine(JPH::RVec3Arg inFrom, JPH::RVec3Arg inTo, JPH::ColorArg inColor) override
/// {
/// // Implement
/// }
///
/// virtual void DrawTriangle(JPH::RVec3Arg inV1, JPH::RVec3Arg inV2, JPH::RVec3Arg inV3, JPH::ColorArg inColor, ECastShadow inCastShadow) override
/// {
/// // Implement
/// }
///
/// virtual void DrawText3D(JPH::RVec3Arg inPosition, const string_view &inString, JPH::ColorArg inColor, float inHeight) override
/// {
/// // Implement
/// }
/// };
///
/// Note that this class is meant to be a quick start for implementing a debug renderer, it is not the most efficient way to implement a debug renderer.
class JPH_DEBUG_RENDERER_EXPORT DebugRendererSimple : public DebugRenderer
{
public:
JPH_OVERRIDE_NEW_DELETE
/// Constructor
DebugRendererSimple();
/// Should be called every frame by the application to provide the camera position.
/// This is used to determine the correct LOD for rendering.
void SetCameraPos(RVec3Arg inCameraPos)
{
mCameraPos = inCameraPos;
mCameraPosSet = true;
}
/// Fallback implementation that uses DrawLine to draw a triangle (override this if you have a version that renders solid triangles)
virtual void DrawTriangle(RVec3Arg inV1, RVec3Arg inV2, RVec3Arg inV3, ColorArg inColor, ECastShadow inCastShadow) override
{
DrawLine(inV1, inV2, inColor);
DrawLine(inV2, inV3, inColor);
DrawLine(inV3, inV1, inColor);
}
protected:
/// Implementation of DebugRenderer interface
virtual Batch CreateTriangleBatch(const Triangle *inTriangles, int inTriangleCount) override;
virtual Batch CreateTriangleBatch(const Vertex *inVertices, int inVertexCount, const uint32 *inIndices, int inIndexCount) override;
virtual void DrawGeometry(RMat44Arg inModelMatrix, const AABox &inWorldSpaceBounds, float inLODScaleSq, ColorArg inModelColor, const GeometryRef &inGeometry, ECullMode inCullMode, ECastShadow inCastShadow, EDrawMode inDrawMode) override;
private:
/// Implementation specific batch object
class BatchImpl : public RefTargetVirtual
{
public:
JPH_OVERRIDE_NEW_DELETE
virtual void AddRef() override { ++mRefCount; }
virtual void Release() override { if (--mRefCount == 0) delete this; }
Array<Triangle> mTriangles;
private:
atomic<uint32> mRefCount = 0;
};
/// Last provided camera position
RVec3 mCameraPos;
bool mCameraPosSet = false;
};
JPH_NAMESPACE_END