Path: blob/master/thirdparty/jolt_physics/Jolt/Renderer/DebugRendererPlayback.cpp
9906 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2021 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#include <Jolt/Jolt.h>56#ifdef JPH_DEBUG_RENDERER78#include <Jolt/Renderer/DebugRendererPlayback.h>910JPH_NAMESPACE_BEGIN1112void DebugRendererPlayback::Parse(StreamIn &inStream)13{14using ECommand = DebugRendererRecorder::ECommand;1516for (;;)17{18// Read the next command19ECommand command;20inStream.Read(command);2122if (inStream.IsEOF() || inStream.IsFailed())23return;2425if (command == ECommand::CreateBatch)26{27uint32 id;28inStream.Read(id);2930uint32 triangle_count;31inStream.Read(triangle_count);3233DebugRenderer::Triangle *triangles = new DebugRenderer::Triangle [triangle_count];34inStream.ReadBytes(triangles, triangle_count * sizeof(DebugRenderer::Triangle));3536mBatches.insert({ id, mRenderer.CreateTriangleBatch(triangles, triangle_count) });3738delete [] triangles;39}40else if (command == ECommand::CreateBatchIndexed)41{42uint32 id;43inStream.Read(id);4445uint32 vertex_count;46inStream.Read(vertex_count);4748DebugRenderer::Vertex *vertices = new DebugRenderer::Vertex [vertex_count];49inStream.ReadBytes(vertices, vertex_count * sizeof(DebugRenderer::Vertex));5051uint32 index_count;52inStream.Read(index_count);5354uint32 *indices = new uint32 [index_count];55inStream.ReadBytes(indices, index_count * sizeof(uint32));5657mBatches.insert({ id, mRenderer.CreateTriangleBatch(vertices, vertex_count, indices, index_count) });5859delete [] indices;60delete [] vertices;61}62else if (command == ECommand::CreateGeometry)63{64uint32 geometry_id;65inStream.Read(geometry_id);6667AABox bounds;68inStream.Read(bounds.mMin);69inStream.Read(bounds.mMax);7071DebugRenderer::GeometryRef geometry = new DebugRenderer::Geometry(bounds);72mGeometries[geometry_id] = geometry;7374uint32 num_lods;75inStream.Read(num_lods);76for (uint32 l = 0; l < num_lods; ++l)77{78DebugRenderer::LOD lod;79inStream.Read(lod.mDistance);8081uint32 batch_id;82inStream.Read(batch_id);83lod.mTriangleBatch = mBatches.find(batch_id)->second;8485geometry->mLODs.push_back(lod);86}87}88else if (command == ECommand::EndFrame)89{90mFrames.push_back({});91Frame &frame = mFrames.back();9293// Read all lines94uint32 num_lines = 0;95inStream.Read(num_lines);96frame.mLines.resize(num_lines);97for (DebugRendererRecorder::LineBlob &line : frame.mLines)98{99inStream.Read(line.mFrom);100inStream.Read(line.mTo);101inStream.Read(line.mColor);102}103104// Read all triangles105uint32 num_triangles = 0;106inStream.Read(num_triangles);107frame.mTriangles.resize(num_triangles);108for (DebugRendererRecorder::TriangleBlob &triangle : frame.mTriangles)109{110inStream.Read(triangle.mV1);111inStream.Read(triangle.mV2);112inStream.Read(triangle.mV3);113inStream.Read(triangle.mColor);114inStream.Read(triangle.mCastShadow);115}116117// Read all texts118uint32 num_texts = 0;119inStream.Read(num_texts);120frame.mTexts.resize(num_texts);121for (DebugRendererRecorder::TextBlob &text : frame.mTexts)122{123inStream.Read(text.mPosition);124inStream.Read(text.mString);125inStream.Read(text.mColor);126inStream.Read(text.mHeight);127}128129// Read all geometries130uint32 num_geometries = 0;131inStream.Read(num_geometries);132frame.mGeometries.resize(num_geometries);133for (DebugRendererRecorder::GeometryBlob &geom : frame.mGeometries)134{135inStream.Read(geom.mModelMatrix);136inStream.Read(geom.mModelColor);137inStream.Read(geom.mGeometryID);138inStream.Read(geom.mCullMode);139inStream.Read(geom.mCastShadow);140inStream.Read(geom.mDrawMode);141}142}143else144JPH_ASSERT(false);145}146}147148void DebugRendererPlayback::DrawFrame(uint inFrameNumber) const149{150const Frame &frame = mFrames[inFrameNumber];151152for (const DebugRendererRecorder::LineBlob &line : frame.mLines)153mRenderer.DrawLine(line.mFrom, line.mTo, line.mColor);154155for (const DebugRendererRecorder::TriangleBlob &triangle : frame.mTriangles)156mRenderer.DrawTriangle(triangle.mV1, triangle.mV2, triangle.mV3, triangle.mColor, triangle.mCastShadow);157158for (const DebugRendererRecorder::TextBlob &text : frame.mTexts)159mRenderer.DrawText3D(text.mPosition, text.mString, text.mColor, text.mHeight);160161for (const DebugRendererRecorder::GeometryBlob &geom : frame.mGeometries)162mRenderer.DrawGeometry(geom.mModelMatrix, geom.mModelColor, mGeometries.find(geom.mGeometryID)->second, geom.mCullMode, geom.mCastShadow, geom.mDrawMode);163}164165JPH_NAMESPACE_END166167#endif // JPH_DEBUG_RENDERER168169170