source: GTP/trunk/App/Demos/Vis/CHC_revisited/StopAndWaitTraverser.cpp @ 2763

Revision 2763, 1.5 KB checked in by mattausch, 16 years ago (diff)
Line 
1#include "StopAndWaitTraverser.h"
2#include "SceneEntity.h"
3
4
5namespace CHCDemo
6{
7
8using namespace std;
9
10
11
12StopAndWaitTraverser::StopAndWaitTraverser(): RenderTraverser()
13{
14}
15
16
17StopAndWaitTraverser::~StopAndWaitTraverser()
18{
19        //DelQueries();
20}
21
22
23void StopAndWaitTraverser::Render()
24{
25        mRenderState->mTexturesEnabled = false;
26        mDistanceQueue.push(mBvh->GetRoot());
27
28
29        int traversed = 0;
30        while (!mDistanceQueue.empty())
31        {
32                BvhNode *node = mDistanceQueue.top();
33                mDistanceQueue.pop();
34       
35                // interesting for the visualization, so rest and set
36                node->SetVisible(false);
37                //mNumTraversedNodes ++;
38
39                if (mBvh->IsWithinViewFrustum(node))
40                {
41                        // if intersects near plane assume visible and don't issue test
42                        if (mBvh->CalcDistance(node) < 0.1f)
43                        {
44                                TraverseNode(node);
45                        }
46                        else
47                        {
48                                OcclusionQuery *query = IssueOcclusionQuery(node, false);
49
50                                int visiblePixels = query->GetQueryResult();
51
52                                if (visiblePixels > 0)
53                                {
54                                        cout<< "visible: " << visiblePixels << endl;
55                                        // update node's visited flag => needed for rendering
56                                        // so set it also here
57                                        //node->SetLastVisited(mFrameID);
58                                        //node->SetVisible(true);
59                                        ++ traversed;
60                                        TraverseNode(node);
61                                }
62                        }
63                }
64                else
65                {
66                        //mNumFrustumCulledNodes ++;
67                }
68                //cout << "intersect: " << intersect << " bx " << node->GetBox() << endl;
69        }
70
71        mQueryHandler.ResetQueries();
72        //std::cout << "traversed: " << traversed << std::endl;
73}
74
75}
Note: See TracBrowser for help on using the repository browser.