1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
- // SPDX-FileCopyrightText: 2024 Jorrit Rouwe
- // SPDX-License-Identifier: MIT
- #include <Jolt/Jolt.h>
- #ifdef JPH_DEBUG_RENDERER
- #include <Jolt/Renderer/DebugRendererSimple.h>
- JPH_NAMESPACE_BEGIN
- DebugRendererSimple::DebugRendererSimple()
- {
- Initialize();
- }
- DebugRenderer::Batch DebugRendererSimple::CreateTriangleBatch(const Triangle *inTriangles, int inTriangleCount)
- {
- BatchImpl *batch = new BatchImpl;
- if (inTriangles == nullptr || inTriangleCount == 0)
- return batch;
- batch->mTriangles.assign(inTriangles, inTriangles + inTriangleCount);
- return batch;
- }
- DebugRenderer::Batch DebugRendererSimple::CreateTriangleBatch(const Vertex *inVertices, int inVertexCount, const uint32 *inIndices, int inIndexCount)
- {
- BatchImpl *batch = new BatchImpl;
- if (inVertices == nullptr || inVertexCount == 0 || inIndices == nullptr || inIndexCount == 0)
- return batch;
- // Convert indexed triangle list to triangle list
- batch->mTriangles.resize(inIndexCount / 3);
- for (size_t t = 0; t < batch->mTriangles.size(); ++t)
- {
- Triangle &triangle = batch->mTriangles[t];
- triangle.mV[0] = inVertices[inIndices[t * 3 + 0]];
- triangle.mV[1] = inVertices[inIndices[t * 3 + 1]];
- triangle.mV[2] = inVertices[inIndices[t * 3 + 2]];
- }
- return batch;
- }
- void DebugRendererSimple::DrawGeometry(RMat44Arg inModelMatrix, const AABox &inWorldSpaceBounds, float inLODScaleSq, ColorArg inModelColor, const GeometryRef &inGeometry, ECullMode inCullMode, ECastShadow inCastShadow, EDrawMode inDrawMode)
- {
- // Figure out which LOD to use
- const LOD *lod = inGeometry->mLODs.data();
- if (mCameraPosSet)
- lod = &inGeometry->GetLOD(Vec3(mCameraPos), inWorldSpaceBounds, inLODScaleSq);
- // Draw the batch
- const BatchImpl *batch = static_cast<const BatchImpl *>(lod->mTriangleBatch.GetPtr());
- for (const Triangle &triangle : batch->mTriangles)
- {
- RVec3 v0 = inModelMatrix * Vec3(triangle.mV[0].mPosition);
- RVec3 v1 = inModelMatrix * Vec3(triangle.mV[1].mPosition);
- RVec3 v2 = inModelMatrix * Vec3(triangle.mV[2].mPosition);
- Color color = inModelColor * triangle.mV[0].mColor;
- switch (inDrawMode)
- {
- case EDrawMode::Wireframe:
- DrawLine(v0, v1, color);
- DrawLine(v1, v2, color);
- DrawLine(v2, v0, color);
- break;
- case EDrawMode::Solid:
- DrawTriangle(v0, v1, v2, color, inCastShadow);
- break;
- }
- }
- }
- JPH_NAMESPACE_END
- #endif // JPH_DEBUG_RENDERER
|