VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtIndirectModelsContainer.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2023 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/vrvOsg.h>
13 
16 
18 
20 
21 #include <osg/Node>
22 
23 #include <tbb/concurrent_unordered_map.h>
24 #include <unordered_map>
25 
26 #include <string>
27 
28 #define DTINDIRECTMODELSCONTAINER_DEBUG 0
29 
30 namespace osgDB
31 {
32  class Options;
33 }
34 
35 
37 {
38  size_t hash( const std::string& x ) const
39  {
40  size_t h = 0;
41  for( const char* s = x.c_str(); *s; ++s )
42  h = (h * 17) ^ *s;
43  return h;
44  }
46  bool equal( const std::string& x, const std::string& y ) const
47  {
48  return x == y;
49  }
50 };
51 namespace makVrv
52 {
53  class DtIndirectTextureCollectionPolicy;
54  class DtIndirectGeometryRegistrar;
55  class DtIndirectTextureCollectionPolicyFactory;
56  class DtIndirectLimitTextureStrategy;
57 
60 
63 
65  template <>
66  inline const char* creatorTypeName<DtIndirectModelsContainer>(void) { return "DtIndirectModelsContainerCreator"; }
67 
72  {
73  public:
74  //friend class so it can be created by its creator
76 
78  virtual ~DtIndirectModelsContainer();
79 
80  protected:
82  DtIndirectModelsContainer(DtDe& de, const DtIndirectLimitTextureStrategy& limitTextureStrategy);
83 
84  private:
85 
87  DtIndirectModelsContainer() = delete;
91  DtIndirectModelsContainer &operator=(const DtIndirectModelsContainer &other) = delete;
92 
93  public:
94 
95  struct ModelParams
96  {
97  bool myDaylightControlled = true;
98  float myMinRange = -1;
99  float myMaxRange = -1;
100  bool myCullFaceEnabled = true;
101  float myAlphaCutOff = 0.0f;
102  float myDisableDecalProjectors = 0.0f;
103  bool myAddTopLevelSwitch = false;
104  std::string myLightPointGroupName = "";
105  };
106 
112  virtual bool getModelNode(const std::string& modelName, const std::string& modelDefName
113  , const osg::Node*& modelNode, int & modelId, const ModelParams& params, osgDB::Options* options);
114 
116  virtual bool hasModelNode(const std::string& modelName) const;
117 
119  virtual const osg::Node* findModelNode(const std::string& modelName) const;
120 
122  virtual int findModelId(const std::string& modelName) const;
123 
125  virtual bool addModelNodeIfNeeded(osg::ref_ptr<const osg::Node> modelNode, int& modelId, const std::string& modelNameSuffix,
126  bool cullFaceEnabled,
127  const DtIndirectPolygonOffset& polygonOffset, bool daylightControlled);
128 
130  virtual DtIndirectGeometryRegistrar* registrar(void);
131 
132  protected:
133 
135  bool checkGeometriesOk(const osg::Node* modelNode, const std::string& modelName) const;
136 
137  protected:
139 
140  typedef std::unordered_map<std::string, osg::ref_ptr< const osg::Node > > MapMarkerNameToModelNode;
143 
144  typedef tbb::concurrent_unordered_map<std::string, DtModelInfo*> ModelsToModelInfo;
146  std::atomic<int> myNextModelId;
147 
149 
150 #if DTINDIRECTMODELSCONTAINER_DEBUG
151  static std::atomic<int> myRefCount;
152 #endif
153  };
154 }
const char * creatorTypeName< DtIndirectModelsContainer >(void)
template specialization for the creator (pass the class being created to the creatorTypeName template...
Definition: DtIndirectModelsContainer.h:66
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
Indirect geometry can have multiple models and their corresponding ids registered in it...
Definition: DtIndirectGeometryRegistrar.h:111
Definition: DtIndirectModelsContainer.h:95
MapMarkerNameToModelNode myMapMarkerNameToModelNode
Definition: DtIndirectModelsContainer.h:141
size_t hash(const std::string &x) const
Definition: DtIndirectModelsContainer.h:38
friend DtIndirectModelsContainerCreator
Definition: DtIndirectModelsContainer.h:75
class for holding an indirect geometry registrar (which holds the information about how to draw model...
Definition: DtIndirectModelsContainer.h:71
std::unordered_map< std::string, osg::ref_ptr< const osg::Node > > MapMarkerNameToModelNode
Definition: DtIndirectModelsContainer.h:140
Variadic templated creator class for defining a DtVirtualBaseClass creator that is automatically regi...
Definition: DtVirtualBaseClassCreator.h:23
ModelsToModelInfo myModelsToModelInfo
Definition: DtIndirectModelsContainer.h:145
DtVirtualBaseClassCreator< DtIndirectModelsContainer, const DtIndirectLimitTextureStrategy & > DtIndirectModelsContainerCreator
creator
Definition: DtIndirectModelsContainer.h:59
bool equal(const std::string &x, const std::string &y) const
True if strings are equal.
Definition: DtIndirectModelsContainer.h:46
OpenThreads::Mutex Mutex
Definition: DtOsgThreadingUtils.h:12
std::atomic< int > myNextModelId
Definition: DtIndirectModelsContainer.h:146
DtModelInfo class declaration.
The indirect system uses this in conjunction with the system wide limits (for entity/terrain) to clam...
Definition: DtIndirectLimitTextureStrategy.h:65
Definition: DtIndirectModelsContainer.h:36
osg::ref_ptr< DtIndirectGeometryRegistrar > myIndirectGeometryRegistrar
Definition: DtIndirectModelsContainer.h:138
non virtual container class for defining a polygon offset state
Definition: DtIndirectPolygonOffset.h:18
Contains DLL export macros.
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:76
Threading::Mutex myMapMarkerNameToModelNodeMutex
Definition: DtIndirectModelsContainer.h:142
Contains the DtIndirectPolygonOffset class declaration.
DtDe & myDe
Definition: DtIndirectModelsContainer.h:148
tbb::concurrent_unordered_map< std::string, DtModelInfo * > ModelsToModelInfo
Definition: DtIndirectModelsContainer.h:144

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)