Changeset 2801 for GTP/trunk/App/Demos/Vis/FriendlyCulling/src
- Timestamp:
- 06/27/08 13:33:46 (17 years ago)
- Location:
- GTP/trunk/App/Demos/Vis/FriendlyCulling/src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.cpp
r2800 r2801 7 7 using namespace std; 8 8 9 // sort by alpha, in second instance per texture 10 //#define SORT_ALPHA 9 11 10 12 namespace CHCDemoEngine … … 12 14 13 15 14 inline static bool IsLower(SceneEntity *ent1, SceneEntity *ent2)16 inline static bool CompTexture(SceneEntity *ent1, SceneEntity *ent2) 15 17 { 16 18 // group by texture size … … 25 27 26 28 27 inline static bool IsLower2(SceneEntity *ent1, SceneEntity *ent2) 29 #ifdef SORT_ALPHA 30 31 inline static bool CompMat(SceneEntity *ent1, SceneEntity *ent2) 32 { 33 return ent1->GetMaterial()->IsAlphaTestEnabled() < ent2->GetMaterial()->IsAlphaTestEnabled(); 34 } 35 36 #else 37 38 inline static bool CompMat(SceneEntity *ent1, SceneEntity *ent2) 28 39 { 29 40 return ent1->GetMaterial() < ent2->GetMaterial(); 30 41 } 42 43 #endif 31 44 32 45 … … 37 50 38 51 RenderQueue::RenderQueue(RenderState *state): 39 mState(state) 52 mState(state), mMinSizeForSorting(3) 40 53 { 41 54 } … … 100 113 101 114 // show ordering by material 102 Debug << "\nmaterial ptr: " << endl;115 Debug << "\nmaterial: " << endl; 103 116 104 117 for (sit = mEntities.begin(); sit != sit_end; ++ sit) 105 118 { 119 #ifdef SORT_ALPHA 120 Debug << (*sit)->GetMaterial()->IsAlphaTestEnabled() << " "; 121 #else 106 122 Debug << (*sit)->GetMaterial() << " "; 123 #endif 107 124 } 108 125 } … … 118 135 void RenderQueue::Sort() 119 136 { 137 #ifdef SORT_ALPHA 138 // sort by texture size 139 sort(mEntities.begin(), mEntities.end(), CompTexture); 140 // sort by alpha test enabled 141 stable_sort(mEntities.begin(), mEntities.end(), CompMat); 142 #else 120 143 // sort by material 121 sort(mEntities.begin(), mEntities.end(), IsLower2);144 sort(mEntities.begin(), mEntities.end(), CompMat); 122 145 // sort by texture size 123 stable_sort(mEntities.begin(), mEntities.end(), IsLower); 146 stable_sort(mEntities.begin(), mEntities.end(), CompTexture); 147 #endif 124 148 } 125 149 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.h
r2795 r2801 39 39 /** Returns the number entities currently in the queue. 40 40 */ 41 in t GetSize() const { return (int)mEntities.size(); }41 inline int GetSize() const { return (int)mEntities.size(); } 42 42 /** Renders and clears the queue. 43 43 */ 44 44 void Apply(); 45 /** Prints the ordering inthe render queue.45 /** Prints the current state of the render queue. 46 46 */ 47 47 void Print(); 48 48 49 PerfTimer sortTimer;50 51 52 49 protected: 53 50 54 /** Sorts the render queue according to some parameters.51 /** Sorts the render queue by materials / textures. 55 52 */ 56 53 void Sort(); … … 64 61 }; 65 62 63 /// measures sort time for detailed benchmarks 64 static PerfTimer sortTimer; 65 66 66 67 } 67 68 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderState.cpp
r2800 r2801 12 12 mAlphaTestEnabled(false), 13 13 mTexturesEnabled(false), 14 mMode(RENDER) 14 mMode(RENDER), 15 mIsDepthPass(false) 15 16 { 16 17 Reset(); … … 29 30 if (mode == QUERY) 30 31 { 31 //glDisableClientState(GL_NORMAL_ARRAY); 32 glDisable(GL_LIGHTING); 33 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 32 if (!mIsDepthPass) 33 { 34 glDisable(GL_LIGHTING); 35 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 36 } 37 34 38 glDepthMask(GL_FALSE); 35 39 … … 41 45 //-- restore render state 42 46 43 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 47 if (!mIsDepthPass) 48 { 49 glEnable(GL_LIGHTING); 50 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 51 } 52 44 53 glDepthMask(GL_TRUE); 45 glEnable(GL_LIGHTING);46 54 } 47 55 … … 52 60 void RenderState::SetState(bool texturing, bool alphaTest) 53 61 { 54 if (mTexturesEnabled && !texturing)55 {56 mTexturesEnabled = false;57 glDisable(GL_TEXTURE_2D);58 glDisableClientState(GL_TEXTURE_COORD_ARRAY);59 }60 else if (!mTexturesEnabled && texturing)61 {62 mTexturesEnabled = true;63 //glEnable(GL_TEXTURE_2D);64 //glEnableClientState(GL_TEXTURE_COORD_ARRAY);65 }66 67 62 if (mAlphaTestEnabled && !alphaTest) 68 63 { … … 73 68 { 74 69 mAlphaTestEnabled = true; 75 //glEnable(GL_ALPHA_TEST); 76 //glAlphaFunc(GL_GEQUAL, 0.5f); 70 glEnable(GL_ALPHA_TEST); 71 } 72 73 // allow only alpha textures in depth pass 74 if (mTexturesEnabled && 75 (!texturing || mIsDepthPass && !mAlphaTestEnabled)) 76 { 77 mTexturesEnabled = false; 78 glDisable(GL_TEXTURE_2D); 79 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 80 } 81 else if (!mTexturesEnabled && texturing) 82 { 83 if (!mIsDepthPass || mAlphaTestEnabled) 84 { 85 mTexturesEnabled = true; 86 glEnable(GL_TEXTURE_2D); 87 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 88 } 77 89 } 78 90 } -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderState.h
r2800 r2801 48 48 inline int GetCurrentVboId() { return mCurrentVboId; } 49 49 50 void SetDepthPass(bool depthPass) { mIsDepthPass = depthPass; } 51 bool IsDepthPass() { return mIsDepthPass; } 50 52 51 53 protected: … … 57 59 58 60 int mCurrentVboId; 61 62 bool mIsDepthPass; 59 63 }; 60 64 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderTraverser.cpp
r2800 r2801 29 29 mNumBatches = 0; 30 30 31 mRenderTime = 0;32 31 mWaitTime = 0; 33 32 mQueryTime = 0; … … 50 49 mAssumedVisibleFrames(10), 51 50 mMaxBatchSize(50), 52 mUseTightBounds(false), mShowBounds(false) 51 mUseTightBounds(false), 52 mShowBounds(false), 53 mRenderQueue(NULL) 53 54 { 54 55 } … … 111 112 112 113 if (mUseRenderQueue) 113 mRenderQueue .Enqueue(ent);114 mRenderQueue->Enqueue(ent); 114 115 else 115 116 ent->Render(mRenderState); 117 118 // store the visible entities for rendering in the second pass 119 if (mUseDepthPass) 120 mVisibleObjects.push_back(ent); 116 121 } 117 122 } … … 128 133 { 129 134 mRenderState = state; 130 mRenderQueue.SetRenderState(state);131 135 } 132 136 … … 134 138 void RenderTraverser::RenderScene() 135 139 { 136 PerfTimer timer; 137 138 glFinish(); 139 140 timer.Start(); 140 mVisibleObjects.clear(); 141 141 142 142 glEnableClientState(GL_VERTEX_ARRAY); 143 glEnableClientState(GL_NORMAL_ARRAY); 143 144 if (!mUseDepthPass) 145 glEnableClientState(GL_NORMAL_ARRAY); 144 146 145 147 ++ mFrameId; … … 166 168 glDisableClientState(GL_VERTEX_ARRAY); 167 169 glDisableClientState(GL_NORMAL_ARRAY); 168 169 glFinish(); 170 171 172 mStats.mRenderTime = timer.Elapsedms(); 173 174 //Debug << "type: " << GetType() << endl; 175 //if (mUseRenderQueue) Debug << "rq sort: " << 1e3f * mRenderQueue.sortTimer.TotalTime() << " ms" << endl; 176 /* 170 171 172 #ifdef PRINT_VERBOSE_BENCHMARKS 173 174 Debug << "traversal type: " << GetType() << endl; 175 if (mUseRenderQueue) Debug << "rq sort: " << 1e3f * mRenderQueue.sortTimer.TotalTime() << " ms" << endl; 176 177 177 Debug << "wait time: " << 1e3f * waitTimer.TotalTime() << " ms" << endl; 178 178 Debug << "query time: " << 1e3f * queryTimer.TotalTime() << " ms" << endl; 179 179 Debug << "rest time: " << 1e3f * restTimer.TotalTime() << " ms" << endl; 180 */ 180 181 #endif 181 182 } 182 183 … … 186 187 mUseRenderQueue = useRenderQueue; 187 188 //std::cout << "using render queue: " << mUseRenderQueue << std::endl; 189 } 190 191 192 void RenderTraverser::SetUseDepthPass(bool b) 193 { 194 mUseDepthPass = b; 188 195 } 189 196 … … 275 282 ++ mStats.mNumStateChanges; 276 283 277 if (mRenderQueue .GetSize() > 0)284 if (mRenderQueue->GetSize() > 0) 278 285 ++ mStats.mNumBatches; 279 286 280 mRenderQueue .Apply();281 } 282 283 284 } 287 mRenderQueue->Apply(); 288 } 289 290 291 } -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderTraverser.h
r2800 r2801 39 39 int mNumStateChanges; 40 40 int mNumBatches; 41 42 double mRenderTime;43 41 44 42 double mWaitTime; … … 53 51 { 54 52 public: 55 53 54 /** Default constructor. 55 */ 56 RenderTraverser(); 57 /** Virtual constructor, has to be redefined in subclasses 58 */ 59 virtual ~RenderTraverser(); 60 /** Abstract method that traverses and renders the scene 61 */ 62 void RenderScene(); 63 56 64 enum {CULL_FRUSTUM, STOP_AND_WAIT, CHC, CHCPLUSPLUS, NUM_TRAVERSAL_TYPES}; 57 58 RenderTraverser(); 59 ~RenderTraverser(); 60 61 //! Renders the scene with the specified method 62 /** 63 The method is one of 65 /** Returns the type of the traversal. 66 The type is one of 64 67 CULL_FRUSTUM: view frustum culling only 65 68 STOP_AND_WAIT: hierarchical stop and wait algorithm … … 67 70 CHCPLUSPLUS: coherent hierarchical algorithm revisited 68 71 */ 69 v oid RenderScene();72 virtual int GetType() const = 0; 70 73 /** Sets the scene hierarchy. 71 74 */ … … 74 77 */ 75 78 void SetCamera(Camera *cam) {mCamera = cam;} 79 /** Sets the render queue. 80 */ 81 void SetRenderQueue(RenderQueue *rq) {mRenderQueue =rq;} 76 82 /** Renders a visualization of the hierarchy 77 83 */ … … 86 92 */ 87 93 int GetCurrentFrameId() const { return mFrameId; } 88 89 94 90 95 ////////////////// 91 96 //-- options for the different rendering algorithms … … 95 100 */ 96 101 void SetUseRenderQueue(bool useRenderQueue); 102 /** If depth pass should be used. 103 If true, the entities found visible in the current pass are stored 104 */ 105 void SetUseDepthPass(bool storeVisibleObjects); 97 106 /** Sets visible pixels threshold for visibility classification 98 107 */ 99 108 void SetVisibilityThreshold(int threshold); 100 101 109 102 110 /////////////////// 103 111 //-- CHC / CHC ++ related options 104 112 105 106 113 /** CHC optimization to query the geometry itself instead of the bounding box. 107 114 */ … … 122 129 */ 123 130 void SetShowBounds(bool showBounds); 124 125 virtual int GetType() const = 0; 126 131 /** Returns the entities found visible in current frame 132 (only if StoreVisibleObjects is set) 133 */ 134 const SceneEntityContainer &GetVisibleObjects() const { return mVisibleObjects; } 135 127 136 protected: 128 137 … … 172 181 TraversalStatistics mStats; 173 182 174 RenderQueue mRenderQueue; 183 RenderQueue *mRenderQueue; 184 185 /// the objects found visible in current frame 186 SceneEntityContainer mVisibleObjects; 175 187 176 188 … … 194 206 bool mShowBounds; 195 207 196 // timers 197 PerfTimer restTimer; 198 PerfTimer waitTimer; 199 PerfTimer queryTimer; 208 bool mUseDepthPass; 200 209 }; 201 210 … … 207 216 208 217 218 /// timers for detailed benchmarks 219 static PerfTimer restTimer; 220 static PerfTimer waitTimer; 221 static PerfTimer queryTimer; 222 209 223 } 210 224 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Timer/BenchTimer.h
r2777 r2801 33 33 // we definitely want timers to be inlined! 34 34 #define PERFTIMER_INLINE __forceinline 35 36 35 36 #ifndef WIN32_LEAN_AND_MEAN 37 37 #define WIN32_LEAN_AND_MEAN 38 #endif 38 39 #define NOMINMAX 39 40 #include <windows.h> // for LARGE_INTEGER -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Timer/PerfTimer.h
r2777 r2801 13 13 // 14 14 // 15-jul-99 14:00:00 mw created 15 // =========================================================================== 16 // $Header: /usr/local/cvsyare/cvsyare/include/yareutils/PerfTimer.h,v 1.1 2002/09/24 16:53:47 wimmer Exp $ 17 // =========================================================================== 15 18 16 19 17 #ifndef NO_PRAGMA_ONCE … … 24 22 #define _PERFTIMER_H 25 23 26 //#define NO_RDTSC_TIMER 24 // RDTSC timer does not work with modern CPUs 25 #define NO_RDTSC_TIMER 27 26 28 27 #ifdef WIN32 -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp
r2800 r2801 22 22 #include "Timer/PerfTimer.h" 23 23 #include "SceneQuery.h" 24 #include "RenderQueue.h" 24 25 25 26 … … 60 61 61 62 SceneQuery *sceneQuery = NULL; 63 RenderQueue *renderQueue = NULL; 64 62 65 63 66 /// these values get scaled with the frame rate … … 66 69 /// elapsed time in seconds 67 70 double elapsedTime = 1.0f; 71 double algTime = 1.0f; 68 72 69 73 int winWidth = 1024; … … 99 103 bool useRenderQueue = true; 100 104 bool useMultiQueries = true; 101 102 105 bool flyMode = true; 103 104 /// the accumulated z axis rotation 105 float rotation = 0; 106 bool depthPass = false; 107 106 108 107 109 SceneEntityContainer skyGeometry; … … 126 128 void DrawHelpMessage(); 127 129 void RenderSky(); 130 void RenderVisibleObjects(); 128 131 129 132 void Begin2D(); … … 146 149 void KeyVerticalMotion(float shift); 147 150 151 void PlaceViewer(const Vector3 &oldPos); 152 148 153 149 154 inline float KeyRotationAngle() { return keyRotation * elapsedTime; } … … 162 167 visCamera->SetNear(0.0f); 163 168 visCamera->Yaw(.5 * M_PI); 169 170 renderQueue = new RenderQueue(&state); 164 171 165 172 glutInitWindowSize(winWidth, winHeight); … … 268 275 //glEnable(GL_ALPHA_TEST); 269 276 glDisable(GL_ALPHA_TEST); 270 glAlphaFunc(GL_GEQUAL, 0. 1f);277 glAlphaFunc(GL_GEQUAL, 0.5f); 271 278 272 279 glFrontFace(GL_CCW); … … 283 290 glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseColor); 284 291 glMaterialfv(GL_FRONT, GL_SPECULAR, specularColor); 292 293 glDepthFunc(GL_LESS); 285 294 } 286 295 … … 298 307 "'F5', - toggles between fly / walkmode", 299 308 "'F6', - shows/hides parameters", 309 "'F7', - depth pass", 300 310 "'SPACE' - cycles through occlusion culling algorithms", 301 311 "", … … 380 390 traverser->SetCamera(camera); 381 391 traverser->SetHierarchy(bvh); 392 traverser->SetRenderQueue(renderQueue); 382 393 traverser->SetRenderState(&state); 383 394 traverser->SetUseOptimization(useOptimization); … … 388 399 traverser->SetUseMultiQueries(useMultiQueries); 389 400 traverser->SetUseTightBounds(useTightBounds); 401 traverser->SetUseDepthPass(depthPass); 402 traverser->SetRenderQueue(renderQueue); 390 403 } 391 404 … … 430 443 431 444 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); 432 //glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);433 glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);445 glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); 446 //glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE); 434 447 //glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL_EXT, GL_SEPARATE_SPECULAR_COLOR_EXT); 435 448 glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL_EXT, GL_SINGLE_COLOR_EXT); … … 481 494 482 495 void Display() 483 { 496 { 497 PerfTimer frameTimer, algTimer; 498 frameTimer.Start(); 499 484 500 Vector3 oldPos = camera->GetPosition(); 485 486 PerfTimer frameTimer;487 frameTimer.Start();488 501 489 502 if (leftKeyPressed) … … 500 513 KeyVerticalMotion(KeyShift()); 501 514 502 Vector3 playerPos = camera->GetPosition(); 503 504 if (!flyMode) 505 { 506 Vector3 playerPos = camera->GetPosition(); 507 508 bool validIntersect = sceneQuery->CalcIntersection(playerPos); 509 510 if (validIntersect && 511 (( playerPos.z - oldPos.z) < bvh->GetBox().Size(2) * 1e-1f)) 512 { 513 camera->SetPosition(playerPos); 514 } 515 } 515 // place view on ground 516 if (!flyMode) PlaceViewer(oldPos); 517 518 // note: have to flush queue in order to get reliable timings 519 // for optimal performance, remove this 520 glFinish(); 521 522 algTimer.Start(); 516 523 517 524 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 525 526 glDepthFunc(GL_LESS); 527 glDisable(GL_TEXTURE_2D); 528 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 529 530 // render without shading 531 if (depthPass) 532 { 533 state.SetDepthPass(true); 534 glDisable(GL_LIGHTING); 535 } 536 else 537 { 538 state.SetDepthPass(false); 539 glEnable(GL_LIGHTING); 540 } 518 541 519 542 // bring eye modelview matrix up-to-date … … 523 546 traverser->RenderScene(); 524 547 525 548 549 ////// 550 //-- other rendering 551 552 glEnableClientState(GL_VERTEX_ARRAY); 553 glEnableClientState(GL_NORMAL_ARRAY); 554 555 556 // reset depth pass and render visible objects 557 if (depthPass) 558 { 559 RenderVisibleObjects(); 560 } 561 562 526 563 /////////////// 527 564 //-- render sky 528 565 529 566 RenderSky(); 530 567 568 state.Reset(); 569 570 glDisableClientState(GL_VERTEX_ARRAY); 571 glDisableClientState(GL_NORMAL_ARRAY); 572 573 574 575 // note: have to flush queue in order to get reliable timings 576 // for optimal performance, remove this 577 glFinish(); 578 algTime = algTimer.Elapsedms(); 579 580 /////////// 581 531 582 if (visMode) DisplayVisualization(); 532 583 … … 719 770 flyMode = !flyMode; 720 771 break; 772 case GLUT_KEY_F7: 773 depthPass = !depthPass; 774 traverser->SetUseDepthPass(depthPass); 775 break; 721 776 case GLUT_KEY_LEFT: 722 777 { … … 988 1043 DEL_PTR(camera); 989 1044 DEL_PTR(loader); 1045 DEL_PTR(renderQueue); 990 1046 } 991 1047 … … 1032 1088 1033 1089 1034 static double renderTime = traverser->GetStats().mRenderTime;1090 static double renderTime = algTime; 1035 1091 const float expFactor = 0.3f; 1036 renderTime = traverser->GetStats().mRenderTime * expFactor + (1.0f - expFactor) * renderTime; 1092 1093 // if there was something fishy going on in this frame => don't count 1094 if (algTime < 1000) 1095 renderTime = algTime * expFactor + (1.0f - expFactor) * algTime; 1037 1096 1038 1097 accumulatedTime += renderTime; … … 1058 1117 assumedVisibleFrames, maxBatchSize); 1059 1118 1060 sprintf(msg3, "render queue: %d, multiqueries: %d, tight bounds: %d",1061 useRenderQueue, useMultiQueries, useTightBounds);1119 sprintf(msg3, "render queue: %d, depth pass: %d, multiqueries: %d, tight bounds: %d", 1120 useRenderQueue, depthPass, useMultiQueries, useTightBounds); 1062 1121 1063 1122 string str; … … 1088 1147 else 1089 1148 { 1090 //glColor3f(1.0f, 1.0f, 1.0f);1091 glColor3f(1.0f, 0.0f, 0.0f);1149 glColor3f(1.0f, 1.0f, 1.0f); 1150 //glColor3f(1.0f, 0.0f, 0.0f); 1092 1151 Output(850, 30, msg[renderMode]); 1093 1152 … … 1115 1174 void RenderSky() 1116 1175 { 1117 glEnableClientState(GL_VERTEX_ARRAY);1118 glEnableClientState(GL_NORMAL_ARRAY);1119 1120 1176 SceneEntityContainer::const_iterator sit, sit_end = skyGeometry.end(); 1121 1177 1122 1178 for (sit = skyGeometry.begin(); sit != sit_end; ++ sit) 1123 1179 (*sit)->Render(&state); 1124 1125 glDisableClientState(GL_VERTEX_ARRAY); 1126 glDisableClientState(GL_NORMAL_ARRAY); 1127 1180 } 1181 1182 1183 void RenderVisibleObjects() 1184 { 1185 state.SetDepthPass(false); 1128 1186 state.Reset(); 1129 } 1187 1188 glEnable(GL_LIGHTING); 1189 glDepthFunc(GL_LEQUAL); 1190 1191 //cout << "visible: " << (int)traverser->GetVisibleObjects().size() << endl; 1192 1193 SceneEntityContainer::const_iterator sit, 1194 sit_end = traverser->GetVisibleObjects().end(); 1195 1196 for (sit = traverser->GetVisibleObjects().begin(); sit != sit_end; ++ sit) 1197 renderQueue->Enqueue(*sit); 1198 1199 renderQueue->Apply(); 1200 1201 glDepthFunc(GL_LESS); 1202 } 1203 1204 1205 void PlaceViewer(const Vector3 &oldPos) 1206 { 1207 Vector3 playerPos = camera->GetPosition(); 1208 1209 bool validIntersect = sceneQuery->CalcIntersection(playerPos); 1210 1211 if (validIntersect && 1212 (( playerPos.z - oldPos.z) < bvh->GetBox().Size(2) * 1e-1f)) 1213 { 1214 camera->SetPosition(playerPos); 1215 } 1216 } -
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/common.h
r2800 r2801 494 494 #define INITIAL_TRIANGLES_PER_VIRTUAL_LEAVES 1000 495 495 496 } 497 498 #endif 499 500 501 502 503 504 505 506 496 // #define PRINT_VERBOSE_BENCHMARKS 497 } 498 499 #endif 500 501 502 503 504 505 506 507
Note: See TracChangeset
for help on using the changeset viewer.