Ignore:
Timestamp:
01/21/08 16:10:52 (16 years ago)
Author:
bittner
Message:

pixel error fix for renderer buffer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/GlRenderer.cpp

    r2619 r2620  
    2626 
    2727// if 1 = SAFE RENDERING OF PVS primitives without VBOs for Pvs error estimation 
    28 #define EVAL_ERROR 1 
     28#define EVAL_ERROR 0 
    2929 
    3030namespace GtpVisibilityPreprocessor { 
     
    449449} 
    450450 
     451 
     452 
    451453void 
    452454GlRenderer::_RenderScene() 
     
    516518        for (; oi != mObjects.end(); oi++) { 
    517519 
    518                 if ((*oi)->Type() == Intersectable::TRIANGLE_INTERSECTABLE) { 
     520          if ((*oi)->Type() == Intersectable::TRIANGLE_INTERSECTABLE) { 
    519521                        TriangleIntersectable *object = (TriangleIntersectable *)*oi; 
    520522                        Triangle3 *t = &(object->GetItem()); 
     
    525527                        glVertex3f(t->mVertices[1].x, t->mVertices[1].y, t->mVertices[1].z); 
    526528                        glVertex3f(t->mVertices[2].x, t->mVertices[2].y, t->mVertices[2].z); 
    527  
    528                 } 
     529          } 
    529530        } 
    530531 
     
    834835GlRenderer::RenderKdNode(KdNode *node) 
    835836{ 
    836         if (node->IsLeaf())  
     837  if (node->IsLeaf())  
    837838        { 
    838839#if !EVAL_ERROR 
     
    843844                  { 
    844845                        RenderIntersectable(leaf->mObjects[i]); 
     846                         
    845847                  } 
    846848#endif 
     
    15771579                  // compute the pixel error 
    15781580                  float error = GetPixelError(pvsSize); 
    1579  
     1581                   
    15801582                  mPvsErrorBuffer[i].mError = error; 
    15811583                  mPvsErrorBuffer[i].mPvsSize = pvsSize; 
     
    16851687void GlRenderer::EnableDrawArrays() 
    16861688{ 
    1687         glEnableClientState(GL_VERTEX_ARRAY); 
    1688         glEnableClientState(GL_NORMAL_ARRAY); 
     1689  glEnableClientState(GL_VERTEX_ARRAY); 
     1690  glEnableClientState(GL_NORMAL_ARRAY); 
    16891691} 
    16901692 
     
    17711773#endif 
    17721774 
     1775 
     1776 
     1777void 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 
     1805void 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} 
    17731848 
    17741849void GlRenderer::CreateVertexArrays(SceneGraphLeaf *leaf) 
Note: See TracChangeset for help on using the changeset viewer.