source: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/StopAndWaitTraverser.cpp @ 2795

Revision 2795, 1005 bytes checked in by mattausch, 16 years ago (diff)
Line 
1#include "StopAndWaitTraverser.h"
2#include "SceneEntity.h"
3
4
5namespace CHCDemoEngine
6{
7
8using namespace std;
9
10
11
12StopAndWaitTraverser::StopAndWaitTraverser()
13{
14}
15
16
17void StopAndWaitTraverser::Traverse()
18{
19        while (!mDistanceQueue.empty())
20        {
21                BvhNode *node = mDistanceQueue.top();
22                mDistanceQueue.pop();
23       
24                if (mBvh->IsWithinViewFrustum(node))
25                {
26                        // if intersects near plane assume visible and don't issue test
27                        if (IntersectsNearPlane(node))
28                        {
29                                TraverseNode(node);
30                        }
31                        else
32                        {
33                                OcclusionQuery *query = IssueOcclusionQuery(node);
34
35                                bool visible = query->GetQueryResult() > mVisibilityThreshold;
36
37                                if (visible)
38                                {
39                                        TraverseNode(node);
40                                }
41                                else
42                                {
43                                        node->SetVisible(false);
44                                        ++ mStats.mNumQueryCulledNodes;
45                                }
46                               
47                                // update node's visited flag (could be interesting for the visualization)
48                                node->SetVisible(visible);             
49                        }
50                }
51                else
52                {
53                        ++ mStats.mNumFrustumCulledNodes;
54                }       
55        }
56}
57
58}
Note: See TracBrowser for help on using the repository browser.