VR-Forces 4.6 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtGpuCullingAndLod.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2018 VT-MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
14 
15 namespace osg
16 {
17  class State;
18 };
19 
20 namespace makVrv
21 {
22  class DtGlBuffer;
23  class DtIndirectGeometryRegistrar;
24  class DtInstanceContainer;
25  class DtOsgShaderFilesCache;
26 
28  {
29  int offset;
31  };
32 
47  {
48  public:
50  DtGpuCullingAndLod(DtIndirectGeometryRegistrar* registrar, bool viewFrustumCulling, bool lodChecking, bool useInstanceCount);
51 
53  virtual ~DtGpuCullingAndLod();
54 
56  virtual void doCullingAndLOD(const DtInstanceContainer& myInstances
57  , const DtIndirectViewParameters& viewParameters
58  , const DtIndirectRenderingParameters& irParams
59  , const MapIntToInt& modelIdsToNumInstances
60  , unsigned int contextID
61  );
62 
65  virtual void bind();
66 
69  virtual void unbind();
70 
72  virtual void bindIndirectThings();
73 
75  virtual void unbindIndirectThings();
76 
79  virtual bool useInstanceCount(void) const;
80 
83  virtual int drawCount(void) const;
84 
86  virtual void setShadersFolderPath(const std::string& shaderFolderPath);
87 
89  virtual void setShadersFileCache(DtOsgShaderFilesCache* shaderFilesCache);
90 
91  virtual void releaseGLObjects(osg::State* state) const;
92 
93  protected:
95 
96 
97 
98 
99  virtual void updateGpuInstancesBuffer(const DtInstanceContainer& instances, const Vector3_64& vCameraPosition, bool cameraRelative);
100  virtual void updateGpuGeometrySpecificationsBuffer(const int numGeometries, const DtInstanceContainer& instances);
101  virtual void updateGpuMaterialsBuffer(const int numGeometries, const DtInstanceContainer& instances);
102  virtual void updateGpuGeometryOffsetAndSizeBuffer(int& numGeometries, const DtInstanceContainer& instances);
103  virtual void updateGpuIndirectBuffer(const DtInstanceContainer& instances, int numStates);
104  virtual void clearInstanceCountIndirectBuffer(int numStates);
106 
108  virtual void bindGpuOutputInstanceBuffer(void) const;
109  virtual void unbindGpuOutputInstanceBuffer(void) const;
110 
112  virtual void createCullShaderAndProgramIfNecessary(void);
113 
115  virtual void updateGpuTexturesBuffer(unsigned int contextID, const DtInstanceContainer& instances);
116 
118 
119  virtual void printDebugInstances();
120  virtual int printCountBufferCount();
121  virtual void printDrawCommandsDetails(GLuint drawCount);
122  virtual void printInstancesDetails(GLuint drawCount);
123  virtual void printModelIdsToNumOfGeosDetails(GLuint drawCount);
125 
126  virtual void updateInstancesOffsetAndInstances(const DtInstanceContainer& instances, const MapIntToInt& modelIdsToNumInstances);
127  protected:
129 
133 
137 
141 
145 
148 
151 
154 
155  mutable GLuint myCullProgram;
156  mutable GLuint myCullShader;
157 
159 
161 
163 
168 
172 
173  static const bool myDebugInstancesAppended;
174 
175  std::vector<InstancesOffsetAndNumOfInstances> myInstancesOffsetAndNumInstances;
177 
179 
180  std::string myShaderFolderPath;
182  private:
185  };
186 }
187 

Document ID: Generated on Thu Apr 12 03:15:37 EDT 2018 from SVN revision 187986
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)