#include "FrustumCullingManager.h" namespace GtpVisibility { //----------------------------------------------------------------------- FrustumCullingManager::FrustumCullingManager(HierarchyInterface *hierarchyInterface): CullingManager(hierarchyInterface) { } //----------------------------------------------------------------------- void FrustumCullingManager::RenderScene() { mNumFrustumCulledNodes = mNumQueryCulledNodes = 0; while(!mHierarchyInterface->GetQueue()->empty()) { HierarchyNode *node = mHierarchyInterface->GetQueue()->top(); mHierarchyInterface->GetQueue()->pop(); // interesting for visualization purpose mHierarchyInterface->SetNodeVisible(node, false); mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); bool intersects = false; if(mHierarchyInterface->CheckFrustumVisible(node, intersects)) { mNumFrustumCulledNodes ++; continue; } //if intersects near plane => skip occlusion query because wrong results possible if(intersects) { mHierarchyInterface->SetNodeVisible(node, true); mHierarchyInterface->TraverseNode(node); continue; } mHierarchyInterface->TraverseNode(node); } } } // namespace GtpVisibility