All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
CullingVolumeVisibilityUpdater.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Culling.h"
6 #include "Types.h"
7 #include "Geometry.h"
8 #include "VectorMathDecl.h"
9 
10 #include <vector>
11 
12 namespace Eegeo
13 {
14  namespace Culling
15  {
17  {
18  public:
19  CullingVolumeVisibilityUpdater(int minTrianglesForTreeDescent);
20 
21  virtual ~CullingVolumeVisibilityUpdater() {;}
22 
23  virtual void ComputeVisibleRanges(const CullingVolumeTree& cullingVolumeTree, const dv3& frustumOrigin, const Geometry::Frustum& frustum, std::vector<IndexBufferRange>& visibleRanges, float environmentScale);
24 
25  private:
26  struct StackEntry
27  {
28  StackEntry();
29 
30  StackEntry(int cullingVolumeIndex, u32 inactivePlaneFlags)
31  : cullingVolumeIndex(cullingVolumeIndex)
32  , inactivePlaneFlags(inactivePlaneFlags)
33  {}
34 
35  int cullingVolumeIndex;
36  u32 inactivePlaneFlags;
37  };
38 
39  struct InternalIndexBufferRange
40  {
41  InternalIndexBufferRange(int startIndex, int indexCount)
42  : startIndex(startIndex)
43  , indexCount(indexCount)
44  {
45 
46  }
47 
48  int startIndex;
49  int indexCount;
50  };
51 
52  std::vector<StackEntry> m_stack;
53  std::vector<InternalIndexBufferRange> m_indexBufferRanges;
54 
55  int m_minIndicesForTreeDescent;
56 
57  void ComputeVisibleRangesInTree(const CullingVolumeTree& cullingVolumeTree, const dv3& cameraEcefOrigin, const v4 planes[], float scale);
58 
59  void BuildMergedRanges(std::vector<IndexBufferRange>& visibleRanges) const;
60  };
61  }
62 }