VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtFxParticleSystemManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2019 VT MAK
3 ** All rights reserved.
4 ******************************************************************************/
5 
10 
11 #pragma once
12 
13 #include <vrvFx/vrvFx.h>
14 #include <osg/MatrixTransform>
15 
18 
20 
21 #include <diguyParticleSystem.h>
22 #include <diguyParticleManager.h>
23 #include <tbb/parallel_for.h>
24 
25 class bdiParticleDesc;
27 
28 namespace osg
29 {
30  class RenderInfo;
31 }
32 
33 namespace makVrv
34 {
35  class DtFxDebugDrawCallbackInterface;
36 
40  {
41  public:
43  DtFxApplyMTParticleUpdateFunction(DtFxParticleSystem** particle_array, float dt);
45  void operator()(const tbb::blocked_range<size_t>& r) const;
46 
47  protected:
49  float m_dt;
50 
51  };
52 
56  {
57  public:
59  DtFxApplyMTParticleVboPrepFunction(std::vector<DtFxParticleSystem*>& particle_array, const bdiFarPosition& eyePosition);
60 
62  void operator()(const tbb::blocked_range<size_t>& r) const;
63 
64  protected:
65  std::vector <DtFxParticleSystem*>& m_particle_array;
66  bdiFarPosition myEyePosition;
67  };
68 
69 
75  {
76 
77  public:
80  virtual ~DtFxParticleSystemManager();
81 
83  virtual bool get_scenario_owns_particle_manager();
84 
86  virtual void initialize_renderer();
87 
89  virtual DtFxOglParticleSystemRenderer* renderer();
90 
92  virtual void draw() { ; }
93 
95  virtual void draw(osg::RenderInfo& renderInfo);
96 
98  virtual void drawDebugVisuals(osg::RenderInfo& renderInfo);
99 
101  virtual void addImguiOverlay();
102 
104  virtual void addImguiStats();
105 
107  virtual diguyParticleSystem* create_particle_system(const char* desc_name);
108 
110  virtual void reinitialize(bool recreate_default_effect = true);
111 
113  virtual void update(float quantum);
114 
116  virtual void vrvUpdate(float quantum);
117 
119  virtual int load_entries(const char* fileName);
120 
122  virtual void add_desc(bdiParticleDesc *desc);
124  virtual void remove_desc(bdiParticleDesc* desc, int delete_desc = 1);
126  virtual void rename_desc(bdiParticleDesc* desc, const char* new_name);
127 
129  virtual DtFxParticleDesc* create_default_description();
130 
132  virtual int in_use(bdiParticleDesc* desc);
133 
135  virtual bdiParticleDescArray* get_descriptions();
137  bdiParticleDesc* get_description(int index);
139  bdiParticleDesc* find_description(const char * name);
140 
142  diguyParticleSystem* create(const char* desc_name);
144  diguyParticleSystem* create_transient_system(const char* desc_name, float life_time_override = -1.0f);
146  diguyParticleSystem* create_preview_system(const char* desc_name);
147 
149  diguyParticleSystem* find_system_with_character_pointer(diguyCharacter* character);
150 
152  virtual void remove_system(diguyParticleSystem* ps);
153 
155  virtual int get_number_of_systems();
157  virtual int get_number_of_transient_systems();
159  virtual diguyParticleSystem* get_system(int i);
160 
162  virtual bdiString get_unique_description_name(const char* prefix);
163 
165  virtual diguyParticleSystem* get_preview_system();
167  virtual void destroy_preview_system();
168 
170  virtual void reset();
171 
173  virtual void process_data_queue();
174 
176  virtual void set_draw_debug_visuals(int val);
178  virtual int get_draw_debug_visuals() const;
179 
181  virtual void set_global_wind(const bdiVec3f& wind);
183  virtual const bdiVec3f& get_global_wind() const;
184 
186  virtual void load_texture_map(bdiParticleDesc* desc);
187 
188 
192  virtual int get_enabled() const { return 1; }
194  virtual void set_enabled(int val);
196  virtual void start_emitting_for(diguyCharacter*, const bdiFarPosition& start_pos, const bdiVec3f& orient);
198  virtual void stop_emitting_for(diguyCharacter*);
200  virtual void stop_all_particles_for(diguyCharacter*);
201 
203  virtual void set_draw_placeholder(int draw) { }
205  virtual int get_draw_placeholder() const { return false; }
207  virtual void set_draw_placeholder_master_switch(int draw) { }
209  virtual int get_draw_placeholder_master_switch() const { return false; }
211  virtual int get_license_status() const { return 1; }
213  virtual int load_descs_library(bdiObjectLibrary* object_library);
215  virtual void unload_descs_library(bdiObjectLibrary* object_library);
217 
219  virtual void clear_derived_update_flag_on_next_update();
220 
222  virtual int get_num_systems_drawn() const;
224  virtual void increment_systems_drawn();
225 
226 
227  //VRV Additions
228  virtual bool isGeocentric();
229 
231  virtual void calcGeocentric(const bdiFarPosition & pos, bdiMat4f& mat, bdiMat4f* inversemat);
233  virtual void setOsgDrawable(osg::ref_ptr<DtFxOsgParticleDrawable>& drawable);
235  virtual osg::ref_ptr<DtFxOsgParticleDrawable>& osgDrawable();
236 
238  virtual void setWindSpeed(float metersPerSecond);
240  virtual void setWindDirection(float radians);
242  virtual void updateWind();
243 
245  virtual void setNumPreviewSystems(int value);
247  virtual void restartPreview();
249  virtual void setPreviewSystemsPosition(const bdiFarPosition& pos);
250 
252  DtDe& de();
253 
256  virtual void set_particle_module_disabled(int dis) { ; }
257  virtual void set_water_height(const float& water_height);
258  virtual float get_water_height() const;
259  virtual void sync_spawn_system_data(bdiParticleDesc* desc);
261 
262 
266  virtual osg::Node* getOrCreateSensorNode(int diguyMat);
267 
269  virtual DtFxCollisionVolumeInterface* addCollisionVolume();
270 
272  virtual void destroyCollisionVolume(DtFxCollisionVolumeInterface* volume);
273 
275  virtual DtFxForceInterface* addGlobalForce();
276 
278  virtual void destroyGlobalForce(DtFxForceInterface* volume);
280 
281 
282  DtFxParticleVertex* get_vertbuffer();
283 
284  virtual bool revertItem(DtFxParticleDesc* item);
285  virtual void saveItem(DtFxParticleDesc* item);
287  virtual std::string saveFiles();
288 
290  virtual void createDescBackups();
291 
293  static DtFxParticleSystemManager* instance(DtDe& de);
294 
296  virtual diguyParticleManager* getDiguyParticleManager();
297 
299  virtual void initSystem();
300 
302  virtual void createParticleDrawable();
303 
305  virtual bool hasDescription(const std::string& name);
307  virtual void slot_reloadShaders();
308 
310  virtual void setWireFrameMode(bool wireframeMode);
311 
313  virtual void setTextureMode(bool textureMode);
314 
316  virtual DtFxParticleSystem* createSystem(const std::string& name);
318  virtual void destroySystem(DtFxParticleSystem* system);
319 
321  virtual void updateParticles(double simTime);
322 
324  bool getTerrainOrPropIntersection(const osg::Vec3d& startPos, const osg::Vec3d& endPos,
325  osg::Vec3d& result) const;
326 
328  virtual void addGlobalForce(DtFxForce* force);
329 
331  virtual void removeGlobalForce(DtFxForce* force);
332 
334  const DtFxForceArray& globalForces() const;
335 
337  DtFxForceArray& globalForces();
338 
340  const DtFxCollisionObjectArray& collisionObjects() const;
341 
343  DtFxCollisionObjectArray* collisionObjectsPtr();
344 
345  virtual void addDescToTextureLoad(bdiParticleDesc* desc);
346 
348  tbb::mutex& systemDataMutex();
349 
351  tbb::mutex& lightMutex();
352 
354  const std::set<std::string>& fileNamesList();
355 
357  DtFxParticleSystemArray& previewArray();
358 
360  DtFxParticleSystemArray& systemArray();
361 
363  DtFxParticleSystemHolderArray& testHolderArray();
364 
366  virtual bool* previewAutoMovePtr();
368  virtual float* previewAutoMoveSpeedPtr();
369  virtual bdiVec3f* previewAutoMoveRadiusPtr();
370 
372  virtual void recompileScripts();
373 
375  virtual void addDebugDrawer(DtFxDebugDrawCallbackInterface* drawer);
376 
377 
378  protected:
379 
380  virtual diguyParticleSystem* create_transient_system(DtFxParticleDesc* desc, float life_time_override = -1.0f);
381  virtual diguyParticleSystem* create_preview_system(DtFxParticleDesc* desc);
382  virtual DtFxParticleSystem* shared_creation(DtFxParticleDesc* desc);
383  virtual void update_preview(const float quantum);
384  virtual void cull(DtFxParticleSystemArray& input, osg::Polytope& polytope, bool shadow_pass, std::vector< DtFxParticleSystem*>& results);
385 
387  virtual osg::ref_ptr<osg::Texture2D> loadTexture(const char* txName);
388 
389 
390  protected:
391  mutable tbb::mutex m_mutex_critical_data;
392 
393  mutable tbb::mutex m_mutex_texture_data;
394 
395  // this seems to be needs to protect the light manager
396  mutable tbb::mutex m_mutex_light_objects;
397 
398  bdiParticleDescArray m_descs;
399  bdiParticleDescArray m_backup_descs;
400 
401  bdiParticleDescArray m_init_texture_queue;
402 
403  DtFxParticleSystemArray m_psystems;
404 
405  DtFxParticleSystemArray m_trans_systems;
406 
407  DtFxParticleSystemArray m_preview_array;
408 
410  DtFxParticleSystemHolderArray m_test_holder_array;
411 
412  DtFxForceArray m_global_forces;
413 
415 
419 
420  // pointer from the gpu
422 
423  float myWindSpeed;
425 
427  bdiFarPosition myPreviewCenter;
428  std::set<std::string> myFileNamesList;
429  std::vector< DtFxParticleSystem*> myAllSystems;
430 
432 
435  std::map<int, osg::ref_ptr<osg::Node> > mySensorMap;
436  bdiFarPosition myEyePosition;
437 
438  DtFxCollisionObjectArray myCollisionObjects;
439 
440  // stats tracking
447 
450 
456 
457  std::vector<DtFxDebugDrawCallbackInterface*> myExtraDebugDrawObjects;
458  };
459 
460 
461 }
double myLastUpdateTime
Definition: DtFxParticleSystemManager.h:449
int myTotalVertCount
Definition: DtFxParticleSystemManager.h:444
class that executes low level OpenGL draw calls from the particle system data.
Definition: DtFxOglParticleSystemRenderer.h:30
bdiFarPosition myEyePosition
Definition: DtFxParticleSystemManager.h:66
class that allows clients to add global forces (no export of virtual base class)
Definition: DtFxForceInterface.h:19
int myTotalPrimCount
Definition: DtFxParticleSystemManager.h:445
bdiFarPosition myPreviewCenter
Definition: DtFxParticleSystemManager.h:427
tbb::mutex m_mutex_critical_data
Definition: DtFxParticleSystemManager.h:391
float m_dt
Definition: DtFxParticleSystemManager.h:49
DtFxParticleSystemManager is the manager for all the particle systems and descriptions diguy sdk comm...
Definition: DtFxParticleSystemManager.h:74
float myStatsUpdateTime
Definition: DtFxParticleSystemManager.h:441
DtFxParticleSystem **const m_particle_array
Definition: DtFxParticleSystemManager.h:48
float myWindDirection
Definition: DtFxParticleSystemManager.h:424
class that allows clients to add collision objects (no export of virtual base class) ...
Definition: DtFxCollisionVolumeInterface.h:18
bdiFarPosition myEyePosition
Definition: DtFxParticleSystemManager.h:436
float myStatsDrawLastTime
Definition: DtFxParticleSystemManager.h:443
void operator()(const tbb::blocked_range< size_t > &r) const
what gets run on each system
DT_DLL_tdbutil void ps(int indent_level)
bdiParticleDescArray m_descs
Definition: DtFxParticleSystemManager.h:398
Definition: featureContext.h:37
int m_draw_debug_visuals
Definition: DtFxParticleSystemManager.h:416
tbb::mutex m_mutex_texture_data
Definition: DtFxParticleSystemManager.h:393
DtFxParticleSystemArray m_preview_array
Definition: DtFxParticleSystemManager.h:407
virtual void set_draw_placeholder_master_switch(int draw)
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:207
#define DT_DLL_VRVFX
Definition: vrvFx.h:20
Contains DLL export macros.
osg::ref_ptr< DtFxOsgParticleDrawable > myOsgDrawable
Definition: DtFxParticleSystemManager.h:434
bdiParticleDescArray m_init_texture_queue
Definition: DtFxParticleSystemManager.h:401
virtual int get_draw_placeholder_master_switch() const
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:209
std::vector< DtFxDebugDrawCallbackInterface * > myExtraDebugDrawObjects
Definition: DtFxParticleSystemManager.h:457
float m_water_height
Definition: DtFxParticleSystemManager.h:417
DtFxParticleSystemArray m_trans_systems
Definition: DtFxParticleSystemManager.h:405
Contains particle system class.
DtFxParticleVertex * m_vertbuffer
Definition: DtFxParticleSystemManager.h:421
virtual void draw()
base class no-ops
Definition: DtFxParticleSystemManager.h:92
a gpu vbo representation of the particle
Definition: DtFxParticleSystem.h:354
ApplyMTParticleUpdateFunction updates particles in parallel.
Definition: DtFxParticleSystemManager.h:39
virtual int get_enabled() const
Definition: DtFxParticleSystemManager.h:192
DtDe & myDe
Definition: DtFxParticleSystemManager.h:433
DtFxCollisionObjectArray myCollisionObjects
Definition: DtFxParticleSystemManager.h:438
std::set< std::string > myFileNamesList
Definition: DtFxParticleSystemManager.h:428
DtSignalConnectionManager myConnections
Definition: DtFxParticleSystemManager.h:431
DtFxApplyMTParticleVboPrepFunction(std::vector< DtFxParticleSystem * > &particle_array, const bdiFarPosition &eyePosition)
CTOR.
bdiVec3f myPreviewAutoMoveRadius
Definition: DtFxParticleSystemManager.h:455
ApplyMTParticleUpdateFunction preps vbo in parallel.
Definition: DtFxParticleSystemManager.h:55
virtual void set_draw_placeholder(int draw)
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:203
void operator()(const tbb::blocked_range< size_t > &r) const
what gets run on each system
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:24
DtParticleSystem is implementation of the particle system, vrvOsg communicates with it via DtParticle...
Definition: DtFxParticleSystem.h:387
DtFxApplyMTParticleUpdateFunction(DtFxParticleSystem **particle_array, float dt)
CTOR.
int myNumPreviewSystems
Definition: DtFxParticleSystemManager.h:426
virtual int get_draw_placeholder() const
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:205
tbb::mutex m_mutex_light_objects
Definition: DtFxParticleSystemManager.h:396
DtFxParticleDesc * m_preview_desc
Definition: DtFxParticleSystemManager.h:414
bool myPreviewAutoMove
public to allow the UI to edit
Definition: DtFxParticleSystemManager.h:452
std::map< int, osg::ref_ptr< osg::Node > > mySensorMap
Definition: DtFxParticleSystemManager.h:435
forces to include that influence the particles movement /ingroup vrvFx
Definition: DtFxForce.h:35
virtual void set_particle_module_disabled(int dis)
Definition: DtFxParticleSystemManager.h:256
Base class to provide boost signal/slot management.
bdiParticleDescArray m_backup_descs
Definition: DtFxParticleSystemManager.h:399
class that wraps the particle manager in vrvFx in a vrv friendly layer
Definition: DtParticleSystemManagerInterface.h:35
float myStatsDrawTime
Definition: DtFxParticleSystemManager.h:442
A simple interface for allowing the qt particle editor to draw lines at the right time...
Definition: DtFxDebugDrawCallbackInterface.h:23
virtual int get_license_status() const
always true
Definition: DtFxParticleSystemManager.h:211
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
std::vector< DtFxParticleSystem * > & m_particle_array
Definition: DtFxParticleSystemManager.h:65
float myPreviewAutoMoveSpeed
public to allow the UI to edit
Definition: DtFxParticleSystemManager.h:454
osg::ref_ptr< osg::MatrixTransform > myParticleRendererGroup
Definition: DtFxParticleSystemManager.h:448
std::vector< DtFxParticleSystem * > myAllSystems
Definition: DtFxParticleSystemManager.h:429
DtFxParticleSystemHolderArray m_test_holder_array
array for additional test systems
Definition: DtFxParticleSystemManager.h:410
DtFxParticleSystemArray m_psystems
Definition: DtFxParticleSystemManager.h:403
int m_clear_derived_update_flag_on_next_update
Definition: DtFxParticleSystemManager.h:418
int myNumSystemsDrawn
Definition: DtFxParticleSystemManager.h:446
DtFxForceArray m_global_forces
Definition: DtFxParticleSystemManager.h:412
a subclass of bdiParticleDesc, currently reimplements all of configuration file reading and writing...
Definition: DtFxParticleSystem.h:112
float myWindSpeed
Definition: DtFxParticleSystemManager.h:423

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)