All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
CulledMeshRenderable.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "MeshRenderable.h"
6 #include "LayerIds.h"
7 #include "VectorMathDecl.h"
8 #include "Rendering.h"
9 #include "CullingVolumeTree.h"
10 #include "IndexBufferRange.h"
11 #include "Geometry.h"
12 #include "CullingVolumeTree.h"
13 #include <vector>
14 
15 namespace Eegeo
16 {
17  namespace Rendering
18  {
19  namespace Renderables
20  {
22  {
23  public:
25  LayerIds::Values layerId,
26  Eegeo::dv3 ecefPosition,
27  Materials::IMaterial* material,
28  Rendering::Mesh* pMesh,
29  Culling::CullingVolumeTree* pCullingVolumeTree,
30  const Rendering::VertexLayouts::VertexBinding& vertexBinding);
31 
34  LayerIds::Values layerId,
35  Eegeo::dv3 ecefPosition,
36  Materials::IMaterial* material,
37  Rendering::Mesh* pMesh,
38  const std::vector<Culling::CullingVolume>& cullingVolumes,
39  const Rendering::VertexLayouts::VertexBinding& vertexBinding
40  );
41 
42  virtual ~CulledMeshRenderable();
43 
44  const bool UpdateVisibility(const Rendering::RenderContext& renderContext, Culling::CullingVolumeVisibilityUpdater& visibilityUpdater, float environmentScale);
45 
46  void SetVisible();
47 
48  void SetInvisible();
49 
50  const bool HasVisibleElements() const
51  {
52  return m_visibleIndexRanges.empty() == false;
53  }
54 
55  const std::vector<Culling::IndexBufferRange>& GetVisibleIndexRanges() const
56  {
57  return m_visibleIndexRanges;
58  }
59 
60  virtual void Render(Rendering::GLState& glState) const;
61 
62  Culling::CullingVolumeTree* DeepCopyCullingVolumeTree() const { return m_pCullingVolumeTree->DeepCopy(); }
63 
64  protected:
65  void InitialiseVisibleIndexRanges();
66 
67  Culling::CullingVolumeTree* m_pCullingVolumeTree;
68  std::vector<Culling::IndexBufferRange> m_visibleIndexRanges;
69  };
70  }
71  }
72 }