Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
StateRecorder Class Reference

#include <StateRecorder.h>

Inheritance diagram for StateRecorder:
StreamIn StreamOut NonCopyable NonCopyable StateRecorderImpl

Public Member Functions

 StateRecorder ()=default
 Constructor.
 
 StateRecorder (const StateRecorder &inRHS)
 
void SetValidating (bool inValidating)
 
bool IsValidating () const
 
void SetIsLastPart (bool inIsLastPart)
 
bool IsLastPart () const
 
- Public Member Functions inherited from StreamIn
virtual ~StreamIn ()=default
 Virtual destructor.
 
virtual void ReadBytes (void *outData, size_t inNumBytes)=0
 Read a string of bytes from the binary stream.
 
virtual bool IsEOF () const =0
 Returns true when an attempt has been made to read past the end of the file.
 
virtual bool IsFailed () const =0
 Returns true if there was an IO failure.
 
template<class T , std::enable_if_t< std::is_trivially_copyable_v< T >, bool > = true>
void Read (T &outT)
 Read a primitive (e.g. float, int, etc.) from the binary stream.
 
template<class T , class A , std::enable_if_t< std::is_trivially_copyable_v< T >, bool > = true>
void Read (Array< T, A > &outT)
 Read a vector of primitives from the binary stream.
 
template<class Type , class Traits , class Allocator >
void Read (std::basic_string< Type, Traits, Allocator > &outString)
 Read a string from the binary stream (reads the number of characters and then the characters)
 
template<class T , class A , typename F >
void Read (Array< T, A > &outT, const F &inReadElement)
 Read a vector of primitives from the binary stream using a custom function to read the elements.
 
void Read (Vec3 &outVec)
 Read a Vec3 (don't read W)
 
void Read (DVec3 &outVec)
 Read a DVec3 (don't read W)
 
void Read (DMat44 &outVec)
 Read a DMat44 (don't read W component of translation)
 
- Public Member Functions inherited from NonCopyable
 NonCopyable ()=default
 
 NonCopyable (const NonCopyable &)=delete
 
void operator= (const NonCopyable &)=delete
 
- Public Member Functions inherited from StreamOut
virtual ~StreamOut ()=default
 Virtual destructor.
 
virtual void WriteBytes (const void *inData, size_t inNumBytes)=0
 Write a string of bytes to the binary stream.
 
virtual bool IsFailed () const =0
 Returns true if there was an IO failure.
 
template<class T , std::enable_if_t< std::is_trivially_copyable_v< T >, bool > = true>
void Write (const T &inT)
 Write a primitive (e.g. float, int, etc.) to the binary stream.
 
template<class T , class A , std::enable_if_t< std::is_trivially_copyable_v< T >, bool > = true>
void Write (const Array< T, A > &inT)
 Write a vector of primitives to the binary stream.
 
template<class Type , class Traits , class Allocator >
void Write (const std::basic_string< Type, Traits, Allocator > &inString)
 Write a string to the binary stream (writes the number of characters and then the characters)
 
template<class T , class A , typename F >
void Write (const Array< T, A > &inT, const F &inWriteElement)
 Write a vector of primitives to the binary stream using a custom write function.
 
void Write (const Vec3 &inVec)
 Write a Vec3 (don't write W)
 
void Write (const DVec3 &inVec)
 Write a DVec3 (don't write W)
 
void Write (const DMat44 &inVec)
 Write a DMat44 (don't write W component of translation)
 

Detailed Description

Class that records the state of a physics system. Can be used to check if the simulation is deterministic by putting the recorder in validation mode. Can be used to restore the state to an earlier point in time. Note that only the state that is modified by the simulation is saved, configuration settings like body friction or restitution, motion quality etc. are not saved and need to be saved by the user if desired.

Constructor & Destructor Documentation

◆ StateRecorder() [1/2]

StateRecorder::StateRecorder ( )
default

Constructor.

◆ StateRecorder() [2/2]

StateRecorder::StateRecorder ( const StateRecorder inRHS)
inline

Member Function Documentation

◆ IsLastPart()

bool StateRecorder::IsLastPart ( ) const
inline

◆ IsValidating()

bool StateRecorder::IsValidating ( ) const
inline

◆ SetIsLastPart()

void StateRecorder::SetIsLastPart ( bool  inIsLastPart)
inline

This allows splitting the state in multiple parts. While restoring, only the last part should have this flag set to true. Note that you should ensure that the different parts contain information for disjoint sets of bodies, constraints and contacts. E.g. if you restore the same contact twice, you get undefined behavior. In order to create disjoint sets you can use the StateRecorderFilter. Note that validation is not compatible with restoring a simulation state in multiple parts.

◆ SetValidating()

void StateRecorder::SetValidating ( bool  inValidating)
inline

Sets the stream in validation mode. In this case the physics system ensures that before it calls ReadBytes that it will ensure that those bytes contain the current state. This makes it possible to step and save the state, restore to the previous step and step again and when the recorded state is not the same it can restore the expected state and any byte that changes due to a ReadBytes function can be caught to find out which part of the simulation is not deterministic. Note that validation only works when saving the full state of the simulation (EStateRecorderState::All, StateRecorderFilter == nullptr).


The documentation for this class was generated from the following file: