Changeset 9969

Show
Ignore:
Timestamp:
03/25/09 12:17:21 (6 years ago)
Author:
robert
Message:

Added new virtual reseveElements, setElement, getElment and addElement methods to DrawElements?
to make is easier to write code that can work on DrawElementUByte, UShort or UInt.

Changed the osgTerrain::GeometryTechnique? so that it automatically chooses
the use of DrawElementUShort or DrawElementsUInt accordining to the size of the tile.

Location:
OpenSceneGraph/trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/include/osg/PrimitiveSet

    r9599 r9969  
    450450            if (_ebo.valid()) _ebo->releaseGLObjects(state); 
    451451        } 
     452         
     453         
     454        virtual void reserveElements(unsigned int numIndices) = 0; 
     455        virtual void setElement(unsigned int, unsigned int) = 0; 
     456        virtual unsigned int getElement(unsigned int) = 0; 
     457        virtual void addElement(unsigned int) = 0; 
    452458 
    453459    protected: 
     
    527533        } 
    528534         
     535        virtual void reserveElements(unsigned int numIndices) { reserve(numIndices); } 
     536        virtual void setElement(unsigned int i, unsigned int v)  { (*this)[i] = v; } 
     537        virtual unsigned int getElement(unsigned int i) { return (*this)[i]; }  
     538        virtual void addElement(unsigned int v) { push_back(GLubyte(v)); }  
     539 
    529540    protected: 
    530541 
     
    602613        } 
    603614 
     615        virtual void reserveElements(unsigned int numIndices) { reserve(numIndices); } 
     616        virtual void setElement(unsigned int i, unsigned int v) { (*this)[i] = v; } 
     617        virtual unsigned int getElement(unsigned int i) { return (*this)[i]; } 
     618        virtual void addElement(unsigned int v) { push_back(GLushort(v)); } 
     619 
    604620    protected: 
    605621 
     
    677693        } 
    678694 
     695        virtual void reserveElements(unsigned int numIndices) { reserve(numIndices); } 
     696        virtual void setElement(unsigned int i, unsigned int v) { (*this)[i] = v; } 
     697        virtual unsigned int getElement(unsigned int i) { return (*this)[i]; } 
     698        virtual void addElement(unsigned int v) { push_back(GLuint(v)); } 
     699 
    679700    protected: 
    680701 
  • OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/FFmpegDecoder.cpp

    r9869 r9969  
    5555            formatParams.channel = 0; 
    5656            formatParams.standard = 0; 
     57#if 1 
    5758            formatParams.width = 640; 
    5859            formatParams.height = 480; 
     60#else 
     61            formatParams.width = 640; 
     62            formatParams.height = 480; 
     63#endif             
    5964            formatParams.time_base.num = 1; 
    60             formatParams.time_base.den = 50; 
     65            formatParams.time_base.den = 15; 
    6166 
    6267            iformat = av_find_input_format("video4linux2"); 
  • OpenSceneGraph/trunk/src/osgTerrain/GeometryTechnique.cpp

    r9388 r9969  
    417417//    bool optimizeOrientations = elevations!=0; 
    418418    bool swapOrientation = !(masterLocator->orientationOpenGL()); 
    419      
    420     osg::ref_ptr<osg::DrawElementsUInt> elements = new osg::DrawElementsUInt(GL_TRIANGLES); 
    421     elements->reserve((numRows-1) * (numColumns-1) * 6); 
     419 
     420    bool smallTile = numVertices <= 16384; 
     421 
     422    // osg::notify(osg::NOTICE)<<"smallTile = "<<smallTile<<std::endl; 
     423     
     424    osg::ref_ptr<osg::DrawElements> elements = smallTile ?  
     425        static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_TRIANGLES)) : 
     426        static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_TRIANGLES)); 
     427         
     428    elements->reserveElements((numRows-1) * (numColumns-1) * 6); 
    422429 
    423430    geometry->addPrimitiveSet(elements.get()); 
     
    464471                if (fabsf(e00-e11)<fabsf(e01-e10)) 
    465472                { 
    466                     elements->push_back(i01); 
    467                     elements->push_back(i00); 
    468                     elements->push_back(i11); 
    469  
    470                     elements->push_back(i00); 
    471                     elements->push_back(i10); 
    472                     elements->push_back(i11); 
     473                    elements->addElement(i01); 
     474                    elements->addElement(i00); 
     475                    elements->addElement(i11); 
     476 
     477                    elements->addElement(i00); 
     478                    elements->addElement(i10); 
     479                    elements->addElement(i11); 
    473480                } 
    474481                else 
    475482                { 
    476                     elements->push_back(i01); 
    477                     elements->push_back(i00); 
    478                     elements->push_back(i10); 
    479  
    480                     elements->push_back(i01); 
    481                     elements->push_back(i10); 
    482                     elements->push_back(i11); 
     483                    elements->addElement(i01); 
     484                    elements->addElement(i00); 
     485                    elements->addElement(i10); 
     486 
     487                    elements->addElement(i01); 
     488                    elements->addElement(i10); 
     489                    elements->addElement(i11); 
    483490                } 
    484491            } 
    485492            else if (numValid==3) 
    486493            { 
    487                 if (i00>=0) elements->push_back(i00); 
    488                 if (i01>=0) elements->push_back(i01); 
    489                 if (i11>=0) elements->push_back(i11); 
    490                 if (i10>=0) elements->push_back(i10); 
     494                if (i00>=0) elements->addElement(i00); 
     495                if (i01>=0) elements->addElement(i01); 
     496                if (i11>=0) elements->addElement(i11); 
     497                if (i10>=0) elements->addElement(i10); 
    491498            } 
    492499             
     
    507514    if (createSkirt) 
    508515    { 
    509         osg::ref_ptr<osg::DrawElementsUShort> skirtDrawElements = new osg::DrawElementsUShort(GL_QUAD_STRIP); 
     516        osg::ref_ptr<osg::DrawElements> skirtDrawElements = smallTile ?  
     517            static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 
     518            static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); 
    510519 
    511520        // create bottom skirt vertices 
     
    529538                } 
    530539                 
    531                 skirtDrawElements->push_back(orig_i); 
    532                 skirtDrawElements->push_back(new_i); 
     540                skirtDrawElements->addElement(orig_i); 
     541                skirtDrawElements->addElement(new_i); 
    533542            } 
    534543            else 
    535544            { 
    536                 if (!skirtDrawElements->empty()) 
     545                if (skirtDrawElements->getNumIndices()!=0) 
    537546                { 
    538547                    geometry->addPrimitiveSet(skirtDrawElements.get()); 
    539                     skirtDrawElements = new osg::DrawElementsUShort(GL_QUAD_STRIP); 
     548                    skirtDrawElements = smallTile ?  
     549                        static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 
     550                        static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); 
    540551                } 
    541552                 
     
    543554        } 
    544555 
    545         if (!skirtDrawElements->empty()) 
     556        if (skirtDrawElements->getNumIndices()!=0) 
    546557        { 
    547558            geometry->addPrimitiveSet(skirtDrawElements.get()); 
    548             skirtDrawElements = new osg::DrawElementsUShort(GL_QUAD_STRIP); 
     559            skirtDrawElements = smallTile ?  
     560                        static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 
     561                        static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); 
    549562        } 
    550563 
     
    567580                } 
    568581                 
    569                 skirtDrawElements->push_back(orig_i); 
    570                 skirtDrawElements->push_back(new_i); 
     582                skirtDrawElements->addElement(orig_i); 
     583                skirtDrawElements->addElement(new_i); 
    571584            } 
    572585            else 
    573586            { 
    574                 if (!skirtDrawElements->empty()) 
     587                if (skirtDrawElements->getNumIndices()!=0) 
    575588                { 
    576589                    geometry->addPrimitiveSet(skirtDrawElements.get()); 
    577                     skirtDrawElements = new osg::DrawElementsUShort(GL_QUAD_STRIP); 
     590                    skirtDrawElements = smallTile ?  
     591                        static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 
     592                        static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); 
    578593                } 
    579594                 
     
    581596        } 
    582597 
    583         if (!skirtDrawElements->empty()) 
     598        if (skirtDrawElements->getNumIndices()!=0) 
    584599        { 
    585600            geometry->addPrimitiveSet(skirtDrawElements.get()); 
    586             skirtDrawElements = new osg::DrawElementsUShort(GL_QUAD_STRIP); 
     601            skirtDrawElements = smallTile ?  
     602                        static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 
     603                        static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); 
    587604        } 
    588605 
     
    605622                } 
    606623                 
    607                 skirtDrawElements->push_back(orig_i); 
    608                 skirtDrawElements->push_back(new_i); 
     624                skirtDrawElements->addElement(orig_i); 
     625                skirtDrawElements->addElement(new_i); 
    609626            } 
    610627            else 
    611628            { 
    612                 if (!skirtDrawElements->empty()) 
     629                if (skirtDrawElements->getNumIndices()!=0) 
    613630                { 
    614631                    geometry->addPrimitiveSet(skirtDrawElements.get()); 
    615                     skirtDrawElements = new osg::DrawElementsUShort(GL_QUAD_STRIP); 
     632                    skirtDrawElements = smallTile ?  
     633                        static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 
     634                        static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); 
    616635                } 
    617636                 
     
    619638        } 
    620639 
    621         if (!skirtDrawElements->empty()) 
     640        if (skirtDrawElements->getNumIndices()!=0) 
    622641        { 
    623642            geometry->addPrimitiveSet(skirtDrawElements.get()); 
    624             skirtDrawElements = new osg::DrawElementsUShort(GL_QUAD_STRIP); 
     643            skirtDrawElements = smallTile ?  
     644                        static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 
     645                        static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); 
    625646        } 
    626647 
     
    643664                } 
    644665                 
    645                 skirtDrawElements->push_back(orig_i); 
    646                 skirtDrawElements->push_back(new_i); 
     666                skirtDrawElements->addElement(orig_i); 
     667                skirtDrawElements->addElement(new_i); 
    647668            } 
    648669            else 
    649670            { 
    650                 if (!skirtDrawElements->empty()) 
     671                if (skirtDrawElements->getNumIndices()!=0) 
    651672                { 
    652673                    geometry->addPrimitiveSet(skirtDrawElements.get()); 
     
    657678        } 
    658679 
    659         if (!skirtDrawElements->empty()) 
     680        if (skirtDrawElements->getNumIndices()!=0) 
    660681        { 
    661682            geometry->addPrimitiveSet(skirtDrawElements.get()); 
    662             skirtDrawElements = new osg::DrawElementsUShort(GL_QUAD_STRIP); 
     683            smallTile ?  
     684                static_cast<osg::DrawElements*>(new osg::DrawElementsUShort(GL_QUAD_STRIP)) : 
     685                static_cast<osg::DrawElements*>(new osg::DrawElementsUInt(GL_QUAD_STRIP)); 
    663686        } 
    664687    } 
  • OpenSceneGraph/trunk/src/osgWrappers/osg/PrimitiveSet.cpp

    r9775 r9969  
    198198                              "If State is non-zero, this function releases OpenGL objects for the specified graphics context. ", 
    199199                              "Otherwise, releases OpenGL objects for all graphics contexts. "); 
     200        I_Method1(void, reserveElements, IN, unsigned int, numIndices, 
     201                  Properties::PURE_VIRTUAL, 
     202                  __void__reserveElements__unsigned_int, 
     203                  "", 
     204                  ""); 
     205        I_Method2(void, setElement, IN, unsigned, int, IN, unsigned, int, 
     206                  Properties::PURE_VIRTUAL, 
     207                  __void__setElement__unsigned__unsigned, 
     208                  "", 
     209                  ""); 
     210        I_Method1(unsigned int, getElement, IN, unsigned, int, 
     211                  Properties::PURE_VIRTUAL, 
     212                  __unsigned_int__getElement__unsigned, 
     213                  "", 
     214                  ""); 
     215        I_Method1(void, addElement, IN, unsigned, int, 
     216                  Properties::PURE_VIRTUAL, 
     217                  __void__addElement__unsigned, 
     218                  "", 
     219                  ""); 
    200220        I_SimpleProperty(osg::DrawElements *, DrawElements,  
    201221                         __DrawElements_P1__getDrawElements,