#include "StopAndWaitCullingManager.h" namespace GtpVisibility { //----------------------------------------------------------------------- StopAndWaitCullingManager::StopAndWaitCullingManager(HierarchyInterface *HierarchyInterface): CullingManager(HierarchyInterface) { } //----------------------------------------------------------------------- void StopAndWaitCullingManager::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; } // node visible if (mHierarchyInterface->IssueOcclusionQuery(node)->GetQueryResult() > mVisibilityThreshold) { mHierarchyInterface->TraverseNode(node); } else { mNumQueryCulledNodes ++; } } } } // namespace GtpVisibility