source: trunk/VUT/GtpVisibility/src/StopAndWaitCullingManager.cpp @ 155

Revision 155, 1.5 KB checked in by mattausch, 19 years ago (diff)

added node traversal interface

RevLine 
[59]1#include "StopAndWaitCullingManager.h"
[94]2#include <OgreLogManager.h>
[59]3
4namespace GtpVisibility {
5
6//-----------------------------------------------------------------------
7void StopAndWaitCullingManager::RenderScene()
8{
9        while (!mHierarchyInterface->GetQueue()->empty())
10        {
11                HierarchyNode *node = mHierarchyInterface->GetQueue()->top();
12                mHierarchyInterface->GetQueue()->pop();
[87]13                       
[59]14                // interesting for visualization purpose
15                mHierarchyInterface->SetNodeVisible(node, false);
16                mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId());
17
18                bool intersects = false;
19
[74]20                if (!mHierarchyInterface->CheckFrustumVisible(node, intersects))
[139]21                {
22                        ++ mNumFrustumCulledNodes;
23               
[114]24                        if (mVisualizeCulledNodes)
[113]25                        {
26                                mHierarchyInterface->VisualizeCulledNode(node, FRUSTUM_CULLED);
27                        }
[59]28                }
[155]29                // if intersects near plane => skip occlusion query because wrong results possible
30                else if (intersects)
31                {
32                        mHierarchyInterface->SetNodeVisible(node, true);
33                        mHierarchyInterface->TraverseAndRenderNode(node);
34                }
[74]35                else
[59]36                {
37
[139]38                        ++ mNumQueriesIssued;
[87]39
[86]40                        unsigned int visiblePixels = 0;
41
[103]42                        mHierarchyInterface->IssueOcclusionQuery(node)->GetQueryResult(visiblePixels, true);
[92]43                       
[74]44                        // node visible
[86]45                        if (visiblePixels > mVisibilityThreshold)
[74]46                        {
[155]47                                mHierarchyInterface->TraverseAndRenderNode(node);
[74]48                        }
49                        else
[139]50                        {       
51                                ++ mNumQueryCulledNodes;
52
[114]53                                if (mVisualizeCulledNodes)
[113]54                                {
55                                        mHierarchyInterface->VisualizeCulledNode(node, QUERY_CULLED);
56                                }
[74]57                        }
[59]58                }
59        }
60}
61} // namespace GtpVisibility
Note: See TracBrowser for help on using the repository browser.