VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtIndirectGeometryRegistrar.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2025 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/vrvOsg.h>
13 
21 
23 
24 #include <vrvUtil/signalslib.h>
25 
26 #include <osg/Node>
27 #include <osg/Geometry>
28 #include <osg/Texture>
29 #include <osg/Referenced>
30 
31 #include <tbb/concurrent_queue.h>
32 #include <atomic>
33 #include <tbb/task.h>
34 
35 #include <string>
36 #include <vector>
37 #include <unordered_set>
38 
39 #include <shared_mutex>
40 
41 #define INDIRECTGEOMETRYREGISTRAR_DEBUG 0
42 
43 namespace osgUtil{
44  class CullVisitor;
45 };
46 
47 namespace osgEarth {
48  class VirtualProgram;
49 };
50 
51 namespace makVrv
52 {
53  class DtGlBuffer;
54 
55  class DtIndirectGeometryRegistrar;
56 
57  class DtIndirectTextureCollectionPolicy;
58  class DtIndirectModelInfoContainer;
59 
60  class DtOsgShaderManager;
61 
62  class DtIndirectModelInfo;
63 
64  class DtOsgRenderer;
65 
66 
69 
72 
74  template <>
75  inline const char* creatorTypeName<DtIndirectGeometryRegistrar>(void) { return "DtIndirectGeometryRegistrarCreator"; }
76 
86 
90 
99 
111  class DT_DLL_VRVOSG DtIndirectGeometryRegistrar : public osg::Referenced
112  {
113  protected:
116 
117  protected:
120  , const std::string& textureCollectionPolicyName
121  , const DtIndirectLimitTextureStrategy& limitTextureStrategy
122  );
123 
125  virtual ~DtIndirectGeometryRegistrar();
126 
127  private:
129  DtIndirectGeometryRegistrar() = delete;
130 
133 
135  DtIndirectGeometryRegistrar(const DtIndirectGeometryRegistrar& lhs, const osg::CopyOp& copyop) = delete;
136 
138  DtIndirectGeometryRegistrar& operator=(const DtIndirectGeometryRegistrar& other) = delete;
139  public:
141  virtual void setName(const std::string& name);
142 
143  // ! Thread safe method - can be called in any paging thread or the main render thread
144  // ! This needs to be 'queued' up because the actual registration can happen when rebuild rebuildIfNeeded
145  // ! is called from somewhere in the main thread (e.g. via the drawImplementation of DtIndirectGeometry)
146  // \param modelId: The model id
147  // \param modelFileName is used only for debugging messages for the aggregator
148  virtual void queueUpRegisterModel(const DtIndirectModelRegistrationInfo& info);
149 
152  virtual void processRegisterModelQueue();
153 
155  virtual void processRegisterModelQueueAsync();
156 
158  virtual bool beingProcessed();
159 
161  virtual bool hasTasksEnqueued();
162 
164  virtual unsigned int updateBuildNumber();
165 
167  virtual unsigned int numModelsInQueue() const;
168 
170  virtual int numModels(void) const;
171 
173  virtual int modelId(int index) const;
174 
176  virtual int numGeometriesForModelID(int modelId) const;
177 
179  virtual bool isModelUploaded(int modelId) const;
180 
183  virtual const DtIndirectModelInfo* findModelInfoForModelId(int modelId) const;
184 
186  virtual const DtIndirectModelInfoContainer* modelInfoContainer() const;
187 
189  virtual DtIndirectModelInfoContainer* modelInfoContainer();
190 
192  virtual const DtIndirectTextureCollectionPolicy& textureCollectionPolicy(void) const;
193 
196  virtual const DtIndirectEffectTexturesTemplate& effectTexturesState(void) const;
197 
199  virtual DtIndirectGeometryStateManager& stateManager(void) const;
200 
202  virtual GLenum indicesType(void) const;
203 
207  virtual void releaseGLObjects(osg::State* state) const;
208 
211  virtual bool registeredModelsDirty() const;
212 
214  virtual void setPagerHandlesModelLoading(bool value);
215  virtual bool pagerHandlesModelLoading();
216 
218  virtual int numTexCoordArrays(void) const;
219 
221  virtual std::shared_timed_mutex& addingModelsMutex();
222 
224  virtual void findModelInfosThatUseThisImageFileForItsTextures(std::set<DtIndirectModelInfo*>& modelInfos, const std::string& absoluteFileName) const;
225  protected:
228  virtual void registerModel(const DtIndirectModelRegistrationInfo& info);
229 
230  protected:
231 
233 
235 
237 
238  typedef tbb::concurrent_queue<DtIndirectModelRegistrationInfo> QueueRegisterModelOps;
240 
242 
244  unsigned int myCurrentBuildNumber;
245 
247  std::atomic<bool> myBeingProcessed;
248  std::atomic<int> myNumberOfTasksEnqueued;
249  std::shared_timed_mutex myAddingModelsMutex;
250 
254 
257 
259 
261  std::unordered_map< std::string, std::set<int> > myImagesToModelsThatAreUsingIt;
262  };
263 
264 }
QueueRegisterModelOps myQueueRegisterModelOps
Definition: DtIndirectGeometryRegistrar.h:239
std::shared_timed_mutex myAddingModelsMutex
Definition: DtIndirectGeometryRegistrar.h:249
#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
Class that loads and contains a bunch of models registered with the registrar. It is owned by the Ind...
Definition: DtIndirectModelInfoContainer.h:88
DtVirtualBaseClassCreator< DtIndirectGeometryRegistrar, const std::string &, const DtIndirectLimitTextureStrategy & > DtIndirectGeometryRegistrarCreator
creator
Definition: DtIndirectGeometryRegistrar.h:68
Abstract class to look in the stateset and collect textures specified via its template The effect tex...
Definition: DtIndirectTextureCollectionPolicy.h:43
The information required to register a model with the registrar.
Definition: DtIndirectModelRegistrationInfo.h:24
std::unordered_map< std::string, std::set< int > > myImagesToModelsThatAreUsingIt
map of absolute image file names to models that use it
Definition: DtIndirectGeometryRegistrar.h:261
Indirect rendering works because we are able to combine multiple geometries into a single &#39;aggregated...
Definition: DtIndirectGeometryAggregator.h:90
Variadic templated creator class for defining a DtVirtualBaseClass creator that is automatically regi...
Definition: DtVirtualBaseClassCreator.h:23
Contains the DtIndirectEffectTexturesTemplate class declaration.
DtIndirectEffectTexturesTemplate myEffectTexturesState
Definition: DtIndirectGeometryRegistrar.h:234
Simple state/glmodes class for handling setting up modes It can now handle generic state modes and at...
Definition: DtIndirectGeometryStateManager.h:31
DtIndirectGeometryAggregator * myAggregator
Definition: DtIndirectGeometryRegistrar.h:246
Contains the DtIndirectGeometryStateManager class declaration.
tbb::concurrent_queue< DtIndirectModelRegistrationInfo > QueueRegisterModelOps
Definition: DtIndirectGeometryRegistrar.h:238
std::atomic< bool > myBeingProcessed
Definition: DtIndirectGeometryRegistrar.h:247
DtDe & myDe
DtDe reference.
Definition: DtIndirectGeometryRegistrar.h:256
bool myPagerHandlesModelLoading
Definition: DtIndirectGeometryRegistrar.h:236
bool myRegisteredModelsDirty
Definition: DtIndirectGeometryRegistrar.h:243
std::atomic< int > myNumberOfTasksEnqueued
Definition: DtIndirectGeometryRegistrar.h:248
The indirect system uses this in conjunction with the system wide limits (for entity/terrain) to clam...
Definition: DtIndirectLimitTextureStrategy.h:65
Contains makVrv::DtIndirectSwitchManager class.
DtOsgShaderManager injects custom shaders into the scenes, and keeps their uniform parameters set to ...
Definition: DtOsgShaderManager.h:41
unsigned int GLenum
Definition: DtGlTextureBufferObject.h:19
unsigned int myCurrentBuildNumber
Definition: DtIndirectGeometryRegistrar.h:244
Contains makVrv::DtIndirectLodManager class.
DtIndirectGeometryStateManager myMutableStateContainer
mutable since it is needed to be used in drawImplementaion for the indirect geometry not private so i...
Definition: DtIndirectGeometryRegistrar.h:253
Contains DLL export macros.
Contains the DtIndirectModelRegistrationInfo class declaration.
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
Contains the DtIndirectGeometryAggregator class declaration.
DtIndirectTextureCollectionPolicy * myTextureCollectionPolicy
Definition: DtIndirectGeometryRegistrar.h:241
DtOsgShaderManager & myShaderManager
Definition: DtIndirectGeometryRegistrar.h:258
friend DtIndirectGeometryRegistrarCreator
friend class creator so that DtIndirectGeometryRegistrar can only be created by the creator ...
Definition: DtIndirectGeometryRegistrar.h:115
Class that allows you to abstractly register effect texture types the effect texture types are client...
Definition: DtIndirectEffectTexturesTemplate.h:40
DtIndirectModelInfoContainer * myModelInfoContainer
Definition: DtIndirectGeometryRegistrar.h:232
Contains the per Model info which the indirect module needs These objects are owned by the Indirect g...
Definition: DtIndirectModelInfo.h:67
const char * creatorTypeName< DtIndirectGeometryRegistrar >(void)
template specialization for the creator (pass the class being created to the creatorTypeName template...
Definition: DtIndirectGeometryRegistrar.h:75

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)