Path: blob/master/thirdparty/jolt_physics/Jolt/Renderer/DebugRendererSimple.cpp
9906 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2024 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#include <Jolt/Jolt.h>56#ifdef JPH_DEBUG_RENDERER78#include <Jolt/Renderer/DebugRendererSimple.h>910JPH_NAMESPACE_BEGIN1112DebugRendererSimple::DebugRendererSimple()13{14Initialize();15}1617DebugRenderer::Batch DebugRendererSimple::CreateTriangleBatch(const Triangle *inTriangles, int inTriangleCount)18{19BatchImpl *batch = new BatchImpl;20if (inTriangles == nullptr || inTriangleCount == 0)21return batch;2223batch->mTriangles.assign(inTriangles, inTriangles + inTriangleCount);24return batch;25}2627DebugRenderer::Batch DebugRendererSimple::CreateTriangleBatch(const Vertex *inVertices, int inVertexCount, const uint32 *inIndices, int inIndexCount)28{29BatchImpl *batch = new BatchImpl;30if (inVertices == nullptr || inVertexCount == 0 || inIndices == nullptr || inIndexCount == 0)31return batch;3233// Convert indexed triangle list to triangle list34batch->mTriangles.resize(inIndexCount / 3);35for (size_t t = 0; t < batch->mTriangles.size(); ++t)36{37Triangle &triangle = batch->mTriangles[t];38triangle.mV[0] = inVertices[inIndices[t * 3 + 0]];39triangle.mV[1] = inVertices[inIndices[t * 3 + 1]];40triangle.mV[2] = inVertices[inIndices[t * 3 + 2]];41}4243return batch;44}4546void DebugRendererSimple::DrawGeometry(RMat44Arg inModelMatrix, const AABox &inWorldSpaceBounds, float inLODScaleSq, ColorArg inModelColor, const GeometryRef &inGeometry, ECullMode inCullMode, ECastShadow inCastShadow, EDrawMode inDrawMode)47{48// Figure out which LOD to use49const LOD *lod = inGeometry->mLODs.data();50if (mCameraPosSet)51lod = &inGeometry->GetLOD(Vec3(mCameraPos), inWorldSpaceBounds, inLODScaleSq);5253// Draw the batch54const BatchImpl *batch = static_cast<const BatchImpl *>(lod->mTriangleBatch.GetPtr());55for (const Triangle &triangle : batch->mTriangles)56{57RVec3 v0 = inModelMatrix * Vec3(triangle.mV[0].mPosition);58RVec3 v1 = inModelMatrix * Vec3(triangle.mV[1].mPosition);59RVec3 v2 = inModelMatrix * Vec3(triangle.mV[2].mPosition);60Color color = inModelColor * triangle.mV[0].mColor;6162switch (inDrawMode)63{64case EDrawMode::Wireframe:65DrawLine(v0, v1, color);66DrawLine(v1, v2, color);67DrawLine(v2, v0, color);68break;6970case EDrawMode::Solid:71DrawTriangle(v0, v1, v2, color, inCastShadow);72break;73}74}75}7677JPH_NAMESPACE_END7879#endif // JPH_DEBUG_RENDERER808182