- Timestamp:
- 06/16/08 08:56:35 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/CHC_revisited/RenderTraverser.cpp
r2762 r2763 100 100 101 101 102 103 void 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 117 OcclusionQuery *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 143 void 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 102 157 #if 0 103 158 … … 160 215 } 161 216 162 163 unsigned int RenderTraverser::GetOcclusionQueryResult(HierarchyNode *node) const164 {165 unsigned int result;166 167 if (mUseArbQueries)168 {169 glGetQueryObjectuivARB(node->GetOcclusionQuery(), GL_QUERY_RESULT_ARB, &result);170 }171 else172 {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 changes183 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 changes196 if(mIsQueryMode)197 {198 // switch back to rendermode199 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 id209 unsigned int occlusionQuery = mOcclusionQueries[mCurrentQueryIdx ++];210 211 node->SetOcclusionQuery(occlusionQuery);212 213 // do the actual occlusion query for this node214 if (mUseArbQueries)215 {216 glBeginQueryARB(GL_SAMPLES_PASSED_ARB, occlusionQuery);217 }218 else219 {220 glBeginOcclusionQueryNV(occlusionQuery);221 }222 223 // if leaf and was visible => will be rendered anyway, thus we224 // can also test with the real geometry225 if(node->IsLeaf() && wasVisible && mUseOptimization)226 {227 mNumRenderedGeometry += node->Render();228 }229 else230 {231 // change state so the bounding box gets not actually rendered on the screen232 Switch2GLQueryState();233 node->RenderBoundingVolume();234 Switch2GLRenderState();235 }236 237 if (mUseArbQueries)238 {239 glEndQueryARB(GL_SAMPLES_PASSED_ARB);240 }241 else242 {243 glEndOcclusionQueryNV();244 }245 }246 217 247 218 void RenderTraverser::Preprocess()
Note: See TracChangeset
for help on using the changeset viewer.