diff options
author | Jacques Lucke <jacques@blender.org> | 2020-06-08 16:41:41 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-06-08 16:49:17 +0300 |
commit | 6f96dfabe5cbf6966282decd2307ade9aacdeaee (patch) | |
tree | 01529fbad8453faf81a62877d03373eaf0b77b57 /source/blender/makesdna/DNA_simulation_types.h | |
parent | bf4198cdaf7d4fa1a5f91526fb6bbe84d2fa2a37 (diff) |
Simulations: initial simulation state and cache
The current particle state is stored in a `CustomData` instance and
the cache is stored in `PointCache`.
The current state exists on the copy-on-write copies of the simulation,
while the cache only exists in the original data block.
This patch implements a temporary trivial particle simulation that does not
use the node system yet. It is used for testing and will be replaced soon.
`PointCache` still has some limitations that need to be overcome using
separate refactorings. For example, we need to be able to store the number
of particles in the point cache. Also we need to change which attributes
are stored for a particle system more dynamically than is currently possible afaik.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D7836
Diffstat (limited to 'source/blender/makesdna/DNA_simulation_types.h')
-rw-r--r-- | source/blender/makesdna/DNA_simulation_types.h | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/source/blender/makesdna/DNA_simulation_types.h b/source/blender/makesdna/DNA_simulation_types.h index 113c301bb9e..93ba9c425f0 100644 --- a/source/blender/makesdna/DNA_simulation_types.h +++ b/source/blender/makesdna/DNA_simulation_types.h @@ -22,6 +22,7 @@ #define __DNA_SIMULATION_TYPES_H__ #include "DNA_ID.h" +#include "DNA_customdata_types.h" typedef struct Simulation { ID id; @@ -30,12 +31,49 @@ typedef struct Simulation { struct bNodeTree *nodetree; int flag; - int _pad1[1]; + int _pad; + + /** List containing SimulationState objects. */ + struct ListBase states; } Simulation; +typedef struct SimulationState { + struct SimulationState *next; + struct SimulationState *prev; + + /** This is only initialized on cow copies of the simulation. It points to the state on the + * original data block. That is where the cache is stored. */ + struct SimulationState *orig_state; + + /** eSimulationStateType */ + int type; + int _pad; + + char name[64]; +} SimulationState; + +typedef struct ParticleSimulationState { + SimulationState head; + + /** Contains the state of the particles at time current_frame. */ + float current_frame; + int tot_particles; + struct CustomData attributes; + + /** Caches the state of the particles over time. The cache only exists on the original data + * block, not on cow copies. */ + struct PointCache *point_cache; + struct ListBase ptcaches; +} ParticleSimulationState; + /* Simulation.flag */ enum { SIM_DS_EXPAND = (1 << 0), }; +/* SimulationCache.type */ +typedef enum eSimulationStateType { + SIM_STATE_TYPE_PARTICLES = 0, +} eSimulationStateType; + #endif /* __DNA_SIMULATION_TYPES_H__ */ |