VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtIndirectModelInfoContainer.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2024 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
11 
12 #pragma once
13 
14 #include <vrvOsg/vrvOsg.h>
15 
22 
24 
25 #define CPU_SIDE_COMPILATION 1
26 #include <../data/shaders/indirect/GeometrySpecification.h>
27 
30 
32 
33 #include <osg/Geometry>
34 
35 #include <tbb/concurrent_queue.h>
36 #include <tbb/task.h>
37 #include <boost/thread.hpp>
38 
39 #include <shared_mutex>
40 
41 #include <list>
42 
43 namespace makVrv
44 {
45  class DtGlBuffer;
46  class DtCoreGlBufferCreator;
47  class DtIndirectModelInfoContainer;
48  class DtIndirectGeometryAggregator;
49  class DtIndirectGeometryRegistrar;
50  class DtIndirectAggregateHelper;
51  class DtIndirectModelSubGeometry;
52 
53  class DtIndirectModelInfo;
54 
56  {
59  osg::Matrix myMatrix;
60  };
61 
63  {
64  DtIndirectModelInfo* myModelInfo = nullptr;
65  std::vector<DtCopyModelSubGeomDataStructure> mySubGeomsToCopy;
66  };
67 
68 
71 
74 
76  template <>
77  inline const char* creatorTypeName<DtIndirectModelInfoContainer>(void) { return "DtIndirectModelInfoContainerCreator"; }
78 
80  {
82  bool myCreated = false;
83  };
84 
89  {
90  public:
93 
96 
97  protected:
100  private:
102  DtIndirectModelInfoContainer() = delete;
103 
106 
108  DtIndirectModelInfoContainer &operator=(const DtIndirectModelInfoContainer &other) = delete;
109 
110  protected:
111  using MapModelsToModelInfo = std::map<int, DtIndirectModelInfo*> ;
112 
113  public:
115  virtual void releaseGLObjects(osg::State* state) const;
116 
118  virtual void addModelGeometryToLoad(const DtCopyModelDataStructure & cds);
119 
121  virtual bool hasDataToAsyncLoad() const;
122 
124  virtual bool hasDataToCopy() const;
125 
127  virtual int isCopyingData() const;
128 
131  virtual bool isNotCopyingData();
132 
134  virtual int numModels(void) const;
135 
137  virtual int modelId(int index) const;
138 
140  virtual DtIndirectModelInfoCreationResult getOrCreateModelInfoFor(int modelId);
141 
143  virtual DtIndirectModelInfo* findModelInfoFor(int modelId);
144 
145 
147  virtual GLenum indicesType(void) const;
148 
150  virtual void copyDataQueue();
151 
152 
154  virtual int numTexCoordArrays(void) const;
155 
159  virtual MapModelsToModelInfo& mapModelsToModelInfo();
160  virtual std::shared_timed_mutex& mapModelsToModelInfoMutex();
162  protected:
164  virtual void copyData(DtCopyModelDataStructure & data);
165 
166  protected:
168 
169  // not sure if I need a mutex the way I'm using this
170  tbb::concurrent_queue<DtCopyModelDataStructure> myModelDataToCopy;
171 
172  std::atomic<int> myIsCopyingData;
173  boost::mutex myCopyDataMutex;
174 
177  mutable std::shared_timed_mutex myMutableMapModelsToModelInfoMutex;
178  mutable boost::mutex myMutableMaxCoordsBindlessMutex;
180 
181  std::atomic<int> myCancelTask;
182 
185  };
186 
187 }
int myMaxCoordsBindless
Definition: DtIndirectModelInfoContainer.h:179
Contains makVrv::DtIndirectUvOffsetManager class.
Definition: DtIndirectModelInfoContainer.h:55
Contains makVrv::DtLightPointNode class.
DtMaterial class declaration.
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
friend DtIndirectModelInfoContainerCreator
only creator can create
Definition: DtIndirectModelInfoContainer.h:92
std::vector< DtCopyModelSubGeomDataStructure > mySubGeomsToCopy
Definition: DtIndirectModelInfoContainer.h:65
DtDe & myDe
reference to De
Definition: DtIndirectModelInfoContainer.h:184
Definition: DtIndirectModelInfoContainer.h:62
DtIndirectModelInfo * myModelInfo
Definition: DtIndirectModelInfoContainer.h:81
bool myCreated
Definition: DtIndirectModelInfoContainer.h:82
Class that loads and contains a bunch of models registered with the registrar. It is owned by the Ind...
Definition: DtIndirectModelInfoContainer.h:88
std::map< int, DtIndirectModelInfo * > MapModelsToModelInfo
Definition: DtIndirectModelInfoContainer.h:111
osg::Matrix myMatrix
Definition: DtIndirectModelInfoContainer.h:59
boost::mutex myCopyDataMutex
Definition: DtIndirectModelInfoContainer.h:173
Variadic templated creator class for defining a DtVirtualBaseClass creator that is automatically regi...
Definition: DtVirtualBaseClassCreator.h:23
boost::mutex myMutableMaxCoordsBindlessMutex
Definition: DtIndirectModelInfoContainer.h:178
Contains makVrv::DtIndirectDofManager class.
This class represents the list of DtIndirectTexturePrototypes belonging to a particular sub-geometry...
Definition: DtIndirectGeometryTextures.h:38
std::shared_timed_mutex myMutableMapModelsToModelInfoMutex
mutex needs to be used in const functions so must be mutable. read/write mutex protecting the myMapMo...
Definition: DtIndirectModelInfoContainer.h:177
const char * creatorTypeName< DtIndirectModelInfoContainer >(void)
template specialization for the creator (pass the class being created to the creatorTypeName template...
Definition: DtIndirectModelInfoContainer.h:77
DtVirtualBaseClassCreator< DtIndirectModelInfoContainer > DtIndirectModelInfoContainerCreator
creator
Definition: DtIndirectModelInfoContainer.h:70
Contains makVrv::DtIndirectSwitchManager class.
unsigned int GLenum
Definition: DtGlTextureBufferObject.h:19
DtIndirectGeometryTextures myTextureForThisGeometry
Definition: DtIndirectModelInfoContainer.h:58
Contains makVrv::DtIndirectLodManager class.
tbb::concurrent_queue< DtCopyModelDataStructure > myModelDataToCopy
Definition: DtIndirectModelInfoContainer.h:170
Contains DLL export macros.
Definition: DtIndirectModelInfoContainer.h:79
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 DtIndirectGeometryTextures class declaration.
std::atomic< int > myIsCopyingData
Definition: DtIndirectModelInfoContainer.h:172
DtPerGeomInstance class declaration.
Contains the per Model info which the indirect module needs These objects are owned by the Indirect g...
Definition: DtIndirectModelInfo.h:67
osg::ref_ptr< const osg::Geometry > mySrcOsgGeometryForSubModel
Definition: DtIndirectModelInfoContainer.h:57
std::atomic< int > myCancelTask
Definition: DtIndirectModelInfoContainer.h:181
MapModelsToModelInfo myMapModelsToModelInfo
Definition: DtIndirectModelInfoContainer.h:167

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)