- Timestamp:
- 01/21/08 16:10:52 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/QtInterface/QtGlRenderer.cpp
r2619 r2620 21 21 #define USE_CG 1 22 22 23 #define TEST_PVS_RENDERING 123 #define TEST_PVS_RENDERING 0 24 24 25 25 #if USE_CG … … 91 91 GlRendererBuffer(sceneGraph, viewcells, tree) 92 92 { 93 mUseVbos = true; 93 94 MakeCurrent(); 94 95 InitGL(); … … 96 97 } 97 98 99 void 100 QtGlRendererBuffer::RenderPvs(const ObjectPvs &pvs) 101 { 102 #if TEST_PVS_RENDERING 103 104 // Render PVS 105 ObjectPvsIterator it = pvs.GetIterator(); 106 107 Intersectable::NewMail(); 108 mCurrentFrame++; 109 while (it.HasMoreEntries()) 110 { 111 RenderIntersectable(it.Next()); 112 } 113 114 #else 115 116 PreparePvs(pvs); 117 118 int offset = (int)mObjects.size() * 3; 119 char *arrayPtr = mUseVbos ? NULL : (char *)mData; 120 121 glVertexPointer(3, GL_FLOAT, 0, (char *)arrayPtr); 122 glNormalPointer(GL_FLOAT, 0, (char *)arrayPtr + offset * sizeof(Vector3)); 123 glDrawElements(GL_TRIANGLES, mIndexBufferSize, GL_UNSIGNED_INT, mIndices); 124 125 #endif 126 } 98 127 99 128 // reimplemented here so that we can snap the error windows … … 133 162 glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); 134 163 135 136 // Render PVS137 ObjectPvsIterator it = pvs.GetIterator();138 164 139 165 pvsSize = pvs.GetSize(); 140 166 cout<<pvsSize<<endl; 141 142 Intersectable::NewMail(); 143 mCurrentFrame++; 144 while (it.HasMoreEntries()) 145 { 146 RenderIntersectable(it.Next()); 147 } 148 167 168 RenderPvs(pvs); 169 149 170 //glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); 150 171 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); … … 212 233 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 213 234 214 // Render PVS 215 Intersectable::NewMail(); 216 mCurrentFrame++; 217 218 219 ObjectPvsIterator it = pvs.GetIterator(); 220 for (; it.HasMoreEntries(); ) 221 { 222 RenderIntersectable(it.Next()); 223 } 235 RenderPvs(pvs); 224 236 225 237 mUseForcedColors = false; … … 464 476 465 477 466 void QtGlRendererWidget::_UpdatePvsIndices(KdNode *node, int &indexBufferSize)467 {468 if (node->Mailed())469 return;470 471 node->Mail();472 473 // if (mObjects.size() * 3 < indexBufferSize) cerr << "problem: " << mObjects.size() * 3 << " < " << indexBufferSize << endl;474 if (!node->IsLeaf())475 {476 KdInterior *kdInterior = static_cast<KdInterior *>(node);477 478 _UpdatePvsIndices(kdInterior->mBack, indexBufferSize);479 _UpdatePvsIndices(kdInterior->mFront, indexBufferSize);480 }481 else482 {483 KdLeaf *leaf = static_cast<KdLeaf *>(node);484 485 leaf->mIndexBufferStart = indexBufferSize;486 487 for (size_t i = 0; i < leaf->mObjects.size(); ++ i)488 {489 TriangleIntersectable *obj =490 static_cast<TriangleIntersectable *>(leaf->mObjects[i]);491 492 if (obj->mRenderedFrame != mCurrentFrame)493 {494 obj->mRenderedFrame = mCurrentFrame;495 496 mIndices[indexBufferSize + 0] = (obj->GetId() - 1) * 3 + 0;497 mIndices[indexBufferSize + 1] = (obj->GetId() - 1) * 3 + 1;498 mIndices[indexBufferSize + 2] = (obj->GetId() - 1) * 3 + 2;499 500 indexBufferSize += 3;501 }502 }503 504 leaf->mIndexBufferSize = indexBufferSize - leaf->mIndexBufferStart;505 }506 507 //cout << "id: " << indexBufferSize << endl;508 }509 478 510 479
Note: See TracChangeset
for help on using the changeset viewer.