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

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