00001 #ifndef _GtpVisibilityHierarchyInterface_H__ 00002 #define _GtpVisibilityHierarchyInterface_H__ 00003 00004 #include "DistanceQueue.h" 00005 00006 namespace GtpVisibility { 00007 00010 class HierarchyInterface 00011 { 00012 public: 00015 HierarchyInterface(); 00016 virtual ~HierarchyInterface(); 00021 virtual bool IsLeaf(HierarchyNode *node) = 0; 00025 virtual void TraverseNode(HierarchyNode *node) = 0; 00029 virtual void RenderNode(HierarchyNode *node) = 0; 00033 virtual void PullUpVisibility(HierarchyNode *node) = 0; 00038 virtual OcclusionQuery *IssueOcclusionQuery(HierarchyNode *node) = 0; 00042 void SetSceneRoot(HierarchyNode *root); 00046 HierarchyNode *GetSceneRoot() const { 00047 return mSceneRoot; 00048 } 00053 void InitFrame(HierarchyNode *root); 00054 00058 int GetFrameId(); 00062 DistanceQueue *GetQueue(); 00068 virtual bool HasGreaterDistance(HierarchyNode *node1, HierarchyNode *node2) = 0; 00073 virtual bool CheckFrustumVisible(HierarchyNode *node, bool &intersects) = 0; 00077 virtual OcclusionQuery *GetNextOcclusionQuery() = 0; 00082 virtual bool HasGeometry(HierarchyNode *node) = 0; 00087 virtual void SetNodeVisible(HierarchyNode *node, const bool visible) = 0; 00090 virtual bool IsNodeVisible(HierarchyNode *node) = 0; 00095 virtual void SetLastVisited(HierarchyNode *node, const int frameId) = 0; 00098 virtual int LastVisited(HierarchyNode *node) = 0; 00099 00100 protected: 00101 00102 unsigned int mFrameId; 00103 00104 int mCurrentTestIdx; 00105 00106 //--- statistics 00107 unsigned int mNumSceneNodes; 00108 unsigned int mNumTraversedNodes; 00109 unsigned int mNumRenderedGeometry; 00110 unsigned int mNumRenderedNodes; 00111 00112 DistanceQueue *mDistanceQueue; 00113 HierarchyNode *mSceneRoot; 00114 //HierarchyNode *mCurrentNode; 00115 }; 00116 } // namespace GtpVisibility 00117 #endif // GtpVisisibilityHierarchyInterface_H