Changeset 2620 for GTP/trunk/Lib/Vis/Preprocessing/src/GlRenderer.cpp
- Timestamp:
- 01/21/08 16:10:52 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/GlRenderer.cpp
r2619 r2620 26 26 27 27 // if 1 = SAFE RENDERING OF PVS primitives without VBOs for Pvs error estimation 28 #define EVAL_ERROR 128 #define EVAL_ERROR 0 29 29 30 30 namespace GtpVisibilityPreprocessor { … … 449 449 } 450 450 451 452 451 453 void 452 454 GlRenderer::_RenderScene() … … 516 518 for (; oi != mObjects.end(); oi++) { 517 519 518 520 if ((*oi)->Type() == Intersectable::TRIANGLE_INTERSECTABLE) { 519 521 TriangleIntersectable *object = (TriangleIntersectable *)*oi; 520 522 Triangle3 *t = &(object->GetItem()); … … 525 527 glVertex3f(t->mVertices[1].x, t->mVertices[1].y, t->mVertices[1].z); 526 528 glVertex3f(t->mVertices[2].x, t->mVertices[2].y, t->mVertices[2].z); 527 528 } 529 } 529 530 } 530 531 … … 834 835 GlRenderer::RenderKdNode(KdNode *node) 835 836 { 836 837 if (node->IsLeaf()) 837 838 { 838 839 #if !EVAL_ERROR … … 843 844 { 844 845 RenderIntersectable(leaf->mObjects[i]); 846 845 847 } 846 848 #endif … … 1577 1579 // compute the pixel error 1578 1580 float error = GetPixelError(pvsSize); 1579 1581 1580 1582 mPvsErrorBuffer[i].mError = error; 1581 1583 mPvsErrorBuffer[i].mPvsSize = pvsSize; … … 1685 1687 void GlRenderer::EnableDrawArrays() 1686 1688 { 1687 1688 1689 glEnableClientState(GL_VERTEX_ARRAY); 1690 glEnableClientState(GL_NORMAL_ARRAY); 1689 1691 } 1690 1692 … … 1771 1773 #endif 1772 1774 1775 1776 1777 void GlRenderer::PreparePvs(const ObjectPvs &pvs) 1778 { 1779 int indexBufferSize = 0; 1780 1781 KdNode::NewMail(); 1782 //Intersectable::NewMail(); 1783 1784 1785 ObjectPvsIterator it = pvs.GetIterator(); 1786 1787 while (it.HasMoreEntries()) 1788 { 1789 Intersectable *obj = it.Next(); 1790 switch (obj->Type()) 1791 { 1792 case Intersectable::KD_INTERSECTABLE: 1793 { 1794 KdNode *node = static_cast<KdIntersectable *>(obj)->GetItem(); 1795 _UpdatePvsIndices(node, indexBufferSize); 1796 } 1797 break; 1798 1799 } 1800 } 1801 1802 mIndexBufferSize = indexBufferSize; 1803 } 1804 1805 void GlRenderer::_UpdatePvsIndices(KdNode *node, int &indexBufferSize) 1806 { 1807 if (node->Mailed()) 1808 return; 1809 1810 node->Mail(); 1811 1812 // if (mObjects.size() * 3 < indexBufferSize) cerr << "problem: " << mObjects.size() * 3 << " < " << indexBufferSize << endl; 1813 if (!node->IsLeaf()) 1814 { 1815 KdInterior *kdInterior = static_cast<KdInterior *>(node); 1816 1817 _UpdatePvsIndices(kdInterior->mBack, indexBufferSize); 1818 _UpdatePvsIndices(kdInterior->mFront, indexBufferSize); 1819 } 1820 else 1821 { 1822 KdLeaf *leaf = static_cast<KdLeaf *>(node); 1823 1824 leaf->mIndexBufferStart = indexBufferSize; 1825 1826 for (size_t i = 0; i < leaf->mObjects.size(); ++ i) 1827 { 1828 TriangleIntersectable *obj = 1829 static_cast<TriangleIntersectable *>(leaf->mObjects[i]); 1830 1831 if (obj->mRenderedFrame != mCurrentFrame) 1832 { 1833 obj->mRenderedFrame = mCurrentFrame; 1834 1835 mIndices[indexBufferSize + 0] = (obj->GetId() - 1) * 3 + 0; 1836 mIndices[indexBufferSize + 1] = (obj->GetId() - 1) * 3 + 1; 1837 mIndices[indexBufferSize + 2] = (obj->GetId() - 1) * 3 + 2; 1838 1839 indexBufferSize += 3; 1840 } 1841 } 1842 1843 leaf->mIndexBufferSize = indexBufferSize - leaf->mIndexBufferStart; 1844 } 1845 1846 //cout << "id: " << indexBufferSize << endl; 1847 } 1773 1848 1774 1849 void GlRenderer::CreateVertexArrays(SceneGraphLeaf *leaf)
Note: See TracChangeset
for help on using the changeset viewer.