Changeset 10894

Show
Ignore:
Timestamp:
12/15/09 13:37:49 (5 years ago)
Author:
robert
Message:

From Tanguy Fautre and Robert Osfield, updated tristripper code to use the latest tristripper_r94 code.

Location:
OpenSceneGraph/trunk/src/osgUtil
Files:
15 added
4 removed
2 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgUtil/CMakeLists.txt

    r9949 r10894  
    8888    TransformAttributeFunctor.cpp 
    8989    TransformCallback.cpp 
    90     TriStrip_graph_array.h 
    91     TriStrip_heap_array.h 
    92     TriStrip_tri_stripper.cpp 
    93     TriStrip_tri_stripper.h 
     90 
     91    tristripper/include/detail/graph_array.h 
     92    tristripper/include/detail/types.h 
     93    tristripper/include/detail/cache_simulator.h 
     94    tristripper/include/detail/policy.h 
     95    tristripper/include/detail/heap_array.h 
     96    tristripper/include/detail/connectivity_graph.h 
     97    tristripper/include/tri_stripper.h 
     98    tristripper/include/public_types.h 
     99    tristripper/src/tri_stripper.cpp 
     100    tristripper/src/policy.cpp 
     101    tristripper/src/connectivity_graph.cpp 
     102 
    94103    TriStripVisitor.cpp 
    95104    UpdateVisitor.cpp 
     
    97106    ${OPENSCENEGRAPH_VERSIONINFO_RC} 
    98107) 
     108 
     109INCLUDE_DIRECTORIES("tristripper/include") 
    99110 
    100111LINK_INTERNAL(${LIB_NAME}      
  • OpenSceneGraph/trunk/src/osgUtil/TriStripVisitor.cpp

    r10764 r10894  
    2323#include <iterator> 
    2424 
    25 #include "TriStrip_tri_stripper.h" 
     25#include "tristripper/include/tri_stripper.h" 
    2626 
    2727using namespace osg; 
     
    183183 
    184184    IndexList                                _remapIndices; 
    185     triangle_stripper::tri_stripper::indices _in_indices; 
     185    triangle_stripper::indices _in_indices; 
    186186 
    187187    inline void operator()(unsigned int p1, unsigned int p2, unsigned int p3) 
     
    391391 
    392392        unsigned int in_numVertices = 0; 
    393         for(triangle_stripper::tri_stripper::indices::iterator itr=taf._in_indices.begin(); 
     393        for(triangle_stripper::indices::iterator itr=taf._in_indices.begin(); 
    394394            itr!=taf._in_indices.end(); 
    395395            ++itr) 
     
    409409        stripifier.SetMinStripSize(_minStripSize); 
    410410 
    411         triangle_stripper::tri_stripper::primitives_vector outPrimitives; 
    412         if (!stripifier.Strip(&outPrimitives))  
     411        triangle_stripper::primitive_vector outPrimitives; 
     412        stripifier.Strip(&outPrimitives); 
     413        if (outPrimitives.empty()) 
    413414        { 
    414415            osg::notify(osg::WARN)<<"Error: TriStripVisitor::stripify(Geometry& geom) failed."<<std::endl; 
     
    416417        } 
    417418 
    418         triangle_stripper::tri_stripper::primitives_vector::iterator pitr; 
     419        triangle_stripper::primitive_vector::iterator pitr; 
    419420        if (_generateFourPointPrimitivesQuads) 
    420421        { 
    421422            osg::notify(osg::INFO)<<"Collecting all quads"<<std::endl; 
    422423 
    423             typedef triangle_stripper::tri_stripper::primitives_vector::iterator prim_iterator; 
     424            typedef triangle_stripper::primitive_vector::iterator prim_iterator; 
    424425            typedef std::multimap<unsigned int,prim_iterator> QuadMap; 
    425426            QuadMap quadMap; 
     
    430431                ++pitr) 
    431432            { 
    432                 if (pitr->m_Indices.size()==4) 
    433                 { 
    434                     std::swap(pitr->m_Indices[2],pitr->m_Indices[3]); 
    435                     unsigned int minValue = *(std::max_element(pitr->m_Indices.begin(),pitr->m_Indices.end())); 
     433                if (pitr->Indices.size()==4) 
     434                { 
     435                    std::swap(pitr->Indices[2],pitr->Indices[3]); 
     436                    unsigned int minValue = *(std::max_element(pitr->Indices.begin(),pitr->Indices.end())); 
    436437                    quadMap.insert(QuadMap::value_type(minValue,pitr)); 
    437438                } 
     
    456457                    for(i=1;i<4;++i) 
    457458                    { 
    458                         if (pitr->m_Indices[min_pos]>pitr->m_Indices[i])  
     459                        if (pitr->Indices[min_pos]>pitr->Indices[i]) 
    459460                            min_pos = i; 
    460461                    } 
    461                     indices.push_back(pitr->m_Indices[min_pos]); 
    462                     indices.push_back(pitr->m_Indices[(min_pos+1)%4]); 
    463                     indices.push_back(pitr->m_Indices[(min_pos+2)%4]); 
    464                     indices.push_back(pitr->m_Indices[(min_pos+3)%4]); 
     462                    indices.push_back(pitr->Indices[min_pos]); 
     463                    indices.push_back(pitr->Indices[(min_pos+1)%4]); 
     464                    indices.push_back(pitr->Indices[(min_pos+2)%4]); 
     465                    indices.push_back(pitr->Indices[(min_pos+3)%4]); 
    465466                }             
    466467 
     
    505506            ++pitr) 
    506507        { 
    507             if (!_generateFourPointPrimitivesQuads || pitr->m_Indices.size()!=4) 
     508            if (!_generateFourPointPrimitivesQuads || pitr->Indices.size()!=4) 
    508509            { 
    509510                bool inOrder = true; 
    510                 unsigned int previousValue = pitr->m_Indices.front(); 
    511                 for(triangle_stripper::tri_stripper::indices::iterator qi_itr=pitr->m_Indices.begin()+1; 
    512                     qi_itr!=pitr->m_Indices.end() && inOrder; 
     511                unsigned int previousValue = pitr->Indices.front(); 
     512                for(triangle_stripper::indices::iterator qi_itr=pitr->Indices.begin()+1; 
     513                    qi_itr!=pitr->Indices.end() && inOrder; 
    513514                    ++qi_itr) 
    514515                { 
     
    519520                if (inOrder) 
    520521                { 
    521                     new_primitives.push_back(new osg::DrawArrays(pitr->m_Type,pitr->m_Indices.front(),pitr->m_Indices.size())); 
     522                    new_primitives.push_back(new osg::DrawArrays(pitr->Type,pitr->Indices.front(),pitr->Indices.size())); 
    522523                } 
    523524                else 
    524525                { 
    525                     unsigned int maxValue = *(std::max_element(pitr->m_Indices.begin(),pitr->m_Indices.end())); 
     526                    unsigned int maxValue = *(std::max_element(pitr->Indices.begin(),pitr->Indices.end())); 
    526527                    if (maxValue>=65536) 
    527528                    { 
    528                         osg::DrawElementsUInt* elements = new osg::DrawElementsUInt(pitr->m_Type); 
    529                         elements->reserve(pitr->m_Indices.size()); 
    530                         std::copy(pitr->m_Indices.begin(),pitr->m_Indices.end(),std::back_inserter(*elements)); 
     529                        osg::DrawElementsUInt* elements = new osg::DrawElementsUInt(pitr->Type); 
     530                        elements->reserve(pitr->Indices.size()); 
     531                        std::copy(pitr->Indices.begin(),pitr->Indices.end(),std::back_inserter(*elements)); 
    531532                        new_primitives.push_back(elements); 
    532533                    } 
    533534                    else 
    534535                    { 
    535                         osg::DrawElementsUShort* elements = new osg::DrawElementsUShort(pitr->m_Type); 
    536                         elements->reserve(pitr->m_Indices.size()); 
    537                         std::copy(pitr->m_Indices.begin(),pitr->m_Indices.end(),std::back_inserter(*elements)); 
     536                        osg::DrawElementsUShort* elements = new osg::DrawElementsUShort(pitr->Type); 
     537                        elements->reserve(pitr->Indices.size()); 
     538                        std::copy(pitr->Indices.begin(),pitr->Indices.end(),std::back_inserter(*elements)); 
    538539                        new_primitives.push_back(elements); 
    539540                    }