#include "StopAndWaitCullingManager.h" namespace GtpVisibility { //----------------------------------------------------------------------- void StopAndWaitCullingManager::RenderScene() { while (!mHierarchyInterface->GetQueue()->empty()) { HierarchyNode *node = mHierarchyInterface->GetQueue()->top(); mHierarchyInterface->GetQueue()->pop(); // interesting for visualization purpose if (mVisualizeCulledNodes) { mHierarchyInterface->SetNodeVisible(node, false); mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); } bool intersects = false; if (!mHierarchyInterface->CheckFrustumVisible(node, intersects)) { ++ mNumFrustumCulledNodes; if (mVisualizeCulledNodes) { mHierarchyInterface->VisualizeCulledNode(node, FRUSTUM_CULLED); } } // if intersects near plane => skip occlusion query because wrong results possible else if (intersects) { if (mVisualizeCulledNodes) { mHierarchyInterface->SetNodeVisible(node, true); } mHierarchyInterface->TraverseNode(node); } else { ++ mNumQueriesIssued; unsigned int visiblePixels = 0; mHierarchyInterface->IssueNodeOcclusionQuery(node)->GetQueryResult(visiblePixels, true); // node visible if (visiblePixels > mVisibilityThreshold) { mHierarchyInterface->TraverseNode(node); } else { ++ mNumQueryCulledNodes; if (mVisualizeCulledNodes) { mHierarchyInterface->VisualizeCulledNode(node, QUERY_CULLED); } } } } } } // namespace GtpVisibility