Ignore:
Timestamp:
06/16/08 08:56:35 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/CHC_revisited/RenderTraverser.cpp

    r2762 r2763  
    100100 
    101101 
     102 
     103void RenderTraverser::Switch2GLRenderState() 
     104{ 
     105        // boolean used to avoid unnecessary state changes 
     106        if (mIsQueryMode) 
     107        { 
     108                // switch back to rendermode             
     109                glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 
     110                glDepthMask(GL_TRUE); 
     111                glEnable(GL_LIGHTING); 
     112                mIsQueryMode = false; 
     113        } 
     114} 
     115 
     116 
     117OcclusionQuery *RenderTraverser::IssueOcclusionQuery(BvhNode *node, bool wasVisible) 
     118{ 
     119        OcclusionQuery *query = mQueryHandler.RequestQuery(); 
     120 
     121        query->BeginQuery(); 
     122         
     123        // if leaf and was visible => will be rendered anyway, thus we 
     124        // can also test with the real geometry  
     125        /*if(node->IsLeaf() && wasVisible && mUseOptimization) 
     126        { 
     127                mNumRenderedGeometry += node->Render(); 
     128        } 
     129        else 
     130        {*/ 
     131 
     132        // change state so the bounding box gets not actually rendered on the screen 
     133        //Switch2GLQueryState(); 
     134        mBvh->RenderBoundingBox(node); 
     135        //Switch2GLRenderState(); 
     136 
     137        query->EndQuery(); 
     138 
     139        return query; 
     140} 
     141 
     142 
     143void RenderTraverser::Switch2GLQueryState() 
     144{        
     145        // boolean used to avoid unnecessary state changes 
     146        if (!mIsQueryMode) 
     147        { 
     148                glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 
     149                glDepthMask(GL_FALSE); 
     150                glDisable(GL_LIGHTING); 
     151                mIsQueryMode = true; 
     152        } 
     153} 
     154 
     155 
     156 
    102157#if 0 
    103158 
     
    160215} 
    161216 
    162  
    163 unsigned int RenderTraverser::GetOcclusionQueryResult(HierarchyNode *node) const 
    164 { 
    165         unsigned int result; 
    166  
    167         if (mUseArbQueries) 
    168         { 
    169                 glGetQueryObjectuivARB(node->GetOcclusionQuery(), GL_QUERY_RESULT_ARB, &result); 
    170         } 
    171         else 
    172         { 
    173                 glGetOcclusionQueryuivNV(node->GetOcclusionQuery(), GL_PIXEL_COUNT_NV, &result); 
    174         } 
    175  
    176         return result; 
    177 } 
    178  
    179  
    180 void RenderTraverser::Switch2GLQueryState() 
    181 {        
    182         // boolean used to avoid unnecessary state changes 
    183         if(!mIsQueryMode) 
    184         { 
    185                 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 
    186                 glDepthMask(GL_FALSE); 
    187                 glDisable(GL_LIGHTING); 
    188                 mIsQueryMode = true; 
    189         } 
    190 } 
    191  
    192  
    193 void RenderTraverser::Switch2GLRenderState() 
    194 { 
    195         // boolean used to avoid unnecessary state changes 
    196         if(mIsQueryMode) 
    197         { 
    198                 // switch back to rendermode             
    199                 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 
    200                 glDepthMask(GL_TRUE); 
    201                 glEnable(GL_LIGHTING); 
    202                 mIsQueryMode = false; 
    203         } 
    204 } 
    205  
    206 void RenderTraverser::IssueOcclusionQuery(HierarchyNode *node, const bool wasVisible) 
    207 { 
    208         // get next available test id 
    209         unsigned int occlusionQuery = mOcclusionQueries[mCurrentQueryIdx ++]; 
    210          
    211         node->SetOcclusionQuery(occlusionQuery); 
    212  
    213         // do the actual occlusion query for this node 
    214         if (mUseArbQueries) 
    215         { 
    216                 glBeginQueryARB(GL_SAMPLES_PASSED_ARB, occlusionQuery); 
    217         } 
    218         else 
    219         { 
    220                 glBeginOcclusionQueryNV(occlusionQuery); 
    221         } 
    222          
    223         // if leaf and was visible => will be rendered anyway, thus we 
    224         // can also test with the real geometry  
    225         if(node->IsLeaf() && wasVisible && mUseOptimization) 
    226         { 
    227                 mNumRenderedGeometry += node->Render(); 
    228         } 
    229         else 
    230         { 
    231                 // change state so the bounding box gets not actually rendered on the screen 
    232                 Switch2GLQueryState(); 
    233                 node->RenderBoundingVolume(); 
    234                 Switch2GLRenderState(); 
    235         } 
    236  
    237         if (mUseArbQueries) 
    238         { 
    239                 glEndQueryARB(GL_SAMPLES_PASSED_ARB); 
    240         } 
    241         else 
    242         { 
    243                 glEndOcclusionQueryNV(); 
    244         } 
    245 } 
    246217 
    247218void RenderTraverser::Preprocess() 
Note: See TracChangeset for help on using the changeset viewer.