VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtIndirectModelInfo.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2022 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/vrvOsg.h>
13 
14 #include <string>
15 
22 
23 #define CPU_SIDE_COMPILATION 1
24 #include <../data/shaders/indirect/GeometrySpecification.h>
25 
28 
29 #include <boost/thread/mutex.hpp>
30 
31 #include <set>
32 #include <unordered_set>
33 
34 namespace makVrv
35 {
37  class DtIndirectModelSubGeometry;
38  class DtIndirectLimitTextureStrategy;
39  class DtGlDeleteObjectManager;
40  class DtGpuCulling;
41 
42  class DtDe;
43 
46  {
47  BindlessPtrNV myVertexBufferBindless;
49  BindlessPtrNV myIndexBufferBindless;
50  };
51 
56  {
57  public:
60 
62  virtual ~DtIndirectModelInfo();
63 
66 
68  DtIndirectModelInfo& operator=(const DtIndirectModelInfo&) = delete;
69 
70  public:
74  virtual void unloadBuffers();
75 
77  virtual bool buffersLoaded() const;
78 
81  virtual void texturesSet(std::map< const DtIndirectTexturePrototype*, int >& texturesSet) const;
82 
86  virtual void addUser(const DtGpuCulling* user);
87 
91  virtual void removeUser(const DtGpuCulling* user);
92 
96  virtual void computeMaxTextureResolution(const DtIndirectLimitTextureStrategy& limitStrategy);
97 
100  virtual void updateBuffersIfNecessary(bool& reloaded);
101 
103  virtual const BindlessPtrNV& vertexBufferBindless(int index) const;
104 
106  virtual const BindlessPtrNV& additionalBufferBindless(int index) const;
107 
109  virtual const BindlessPtrNV& indexBufferBindless(int index) const;
110 
112  virtual int numSubGeometries() const;
113 
115  virtual int maxCoords(int index) const;
116 
118  virtual int numVertices(int index) const;
119 
121  virtual int numIndices(int index) const;
122 
126  virtual void addSubGeometry(DtIndirectModelSubGeometry* modelSubGeometry);
127 
130  virtual DtIndirectModelSubGeometry* subGeometry(int index);
131 
136  virtual void promoteDataFromSubGeosToMe(void);
137  protected:
139  virtual bool isDefaultTexture(const DtIndirectTexturePrototype* texture) const;
140 
144  virtual void unload();
145 
147  virtual bool isLoaded() const;
148 
150  virtual void releaseGLObjects(osg::State* state);
151 
153  virtual void createIndirectBuffers(void);
154 
156  virtual void deleteIndirectBuffers(void);
157  public:
159  std::string myModelName;
160 
161  std::string myModelDefName;
162 
165 
168 
170  DtGeometrySpecVector myGeometrySpecifications;
171 
172 
175 
177  std::vector<DtIndirectGeometryTextures> myTextures;
178 
181 
184 
187 
190 
194 
197 
198  std::unordered_set<const DtGpuCulling*> myUsers;
199  boost::mutex myUserMutex;
200 
202 
204 
205  DtGlBuffer* myVertexAndAttributesBuffer = nullptr;
206 
207  DtGlBuffer* myIndexBuffer = nullptr;
208 
209  bool myBuffersUpdated = false;
210 
212 
213  protected:
214  std::vector<uint8_t> myVertexBufferData;
215  std::vector<uint8_t> myIndexBufferData;
216 
217  std::vector<DtIndirectModelSubGeoProps> mySubGeoPropsVec;
218  std::vector<DtIndirectSubGeoBindlessBuffers> mySubGeoBindlessBuffersVec;
219 
222  std::vector<DtIndirectModelSubGeometry*> myVectorModelSubGeometries;
223  };
224 }
boost::mutex myUserMutex
Definition: DtIndirectModelInfo.h:199
Contains makVrv::DtIndirectUvOffsetManager class.
Structure for a bindless buffer of an individual sub geometry.
Definition: DtIndirectModelInfo.h:45
DtMaterial class declaration.
BindlessPtrNV myAdditionalBufferBindless
Definition: DtIndirectModelInfo.h:48
DtGeometrySpecVector myGeometrySpecifications
the vector of all geometry specs
Definition: DtIndirectModelInfo.h:170
std::string myModelDefName
Definition: DtIndirectModelInfo.h:161
DtDe & myDe
Definition: DtIndirectModelInfo.h:201
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
DtGlDeleteObjectManager & myGlDeleteObjectManager
Definition: DtIndirectModelInfo.h:211
This class is a component of the DtIndirectGeometry It inputs are: -&gt; the instances registered with Dt...
Definition: DtGpuCulling.h:87
std::vector< DtIndirectModelSubGeometry * > myVectorModelSubGeometries
the same size as the spec vector above 1 sub-geometry for each spec
Definition: DtIndirectModelInfo.h:222
DtVector2< int > myMaxTextureResolutionInXandY
Definition: DtIndirectModelInfo.h:203
DtIndirectUvOffsetManager::ScrollableUvOffsetIdsAndMultipliers myScrollableUvOffsetIdsAndMultipliers
uv offset ids and multipliers
Definition: DtIndirectModelInfo.h:186
DtIndirectLodManager::DequeIndirectLodInfoArray myLodStacks
lod paths
Definition: DtIndirectModelInfo.h:192
int myNumLightSources
the number of light sources
Definition: DtIndirectModelInfo.h:196
std::vector< DequeIndirectLodInfos > DequeIndirectLodInfoArray
Definition: DtIndirectLodManager.h:69
std::deque< NodeDofInfoPair > DequeNodeDofInfoPairs
Definition: DtIndirectDofManager.h:76
Contains makVrv::DtIndirectDofManager class.
std::vector< DtIndirectGeometryTextures > myTextures
vector of the textures in this model
Definition: DtIndirectModelInfo.h:177
std::string myModelName
the model name
Definition: DtIndirectModelInfo.h:159
std::map< std::string, unsigned int > AnnotationToUvOffsetMap
Definition: DtIndirectUvOffsetManager.h:53
Contains makVrv::DtIndirectModelSubGeometry class.
DtIndirectUvOffsetManager::AnnotationToUvOffsetMap myAnnotationToUvOffsetIdMap
annotation to uv offset map
Definition: DtIndirectModelInfo.h:183
DtIndirectSwitchManager::DequeNodeSwitchInfoPairsArray mySwitchPaths
switch paths
Definition: DtIndirectModelInfo.h:189
BindlessPtrNV myIndexBufferBindless
Definition: DtIndirectModelInfo.h:49
std::unordered_map< int, MultiplierAndTrackSide > ScrollableUvOffsetIdsAndMultipliers
Definition: DtIndirectUvOffsetManager.h:65
std::vector< uint8_t > myVertexBufferData
Definition: DtIndirectModelInfo.h:214
std::vector< PerGeomInstance > DtPerGeomInstances
Definition: DtPerGeomInstance.h:26
bool myDownloaded
is the model completely downloaded to the gpu
Definition: DtIndirectModelInfo.h:167
std::vector< DequeNodeSwitchInfoPairs > DequeNodeSwitchInfoPairsArray
Definition: DtIndirectSwitchManager.h:77
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.
A generic OpenGL buffer. This can be: -&gt; a vertex buffer -&gt; an index buffer -&gt; a shader storage buffe...
Definition: DtGlBuffer.h:29
std::vector< uint8_t > myIndexBufferData
Definition: DtIndirectModelInfo.h:215
BindlessPtrNV myVertexBufferBindless
Definition: DtIndirectModelInfo.h:47
Vaos are OpenGL context specific. They need to be deleted in the context they are created in...
Definition: DtGlDeleteObjectManager.h:58
Contains makVrv::DtIndirectLodManager class.
geometry that is part of a model. refers to one index buffer and a vertex+color+normal+uv buffer corr...
Definition: DtIndirectModelSubGeometry.h:57
DtIndirectMaterialVector myMaterials
vector of the materials in this model
Definition: DtIndirectModelInfo.h:174
std::unordered_set< const DtGpuCulling * > myUsers
Definition: DtIndirectModelInfo.h:198
int myModelID
the model id
Definition: DtIndirectModelInfo.h:164
Contains DLL export macros.
DtIndirectDofManager::DequeNodeDofInfoPairs myDofPaths
Definition: DtIndirectModelInfo.h:193
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:72
VRV/Indirect uses its own texture paradigm: DtIndirectTexturePrototype, which is a &#39;template&#39; for mak...
Definition: DtIndirectTexturePrototype.h:53
std::vector< DtIndirectModelSubGeoProps > mySubGeoPropsVec
Definition: DtIndirectModelInfo.h:217
Contains the DtIndirectGeometryTextures class declaration.
std::vector< DtIndirectSubGeoBindlessBuffers > mySubGeoBindlessBuffersVec
Definition: DtIndirectModelInfo.h:218
DtPerGeomInstances myPerGeomInstancesTemplate
vector of the per geom instances
Definition: DtIndirectModelInfo.h:180
DtPerGeomInstance class declaration.
Contains the per Model info which the indirect module needs It is owned by the Indirect geometry regi...
Definition: DtIndirectModelInfo.h:55
std::vector< Material > DtIndirectMaterialVector
Each model type can have a number of geometries, each with an own material.
Definition: DtMaterial.h:46

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)