Show
Ignore:
Timestamp:
10/28/05 10:35:55 (8 years ago)
Author:
robert
Message:

From Mike Weiblen, added check to make sure that vertex texture was
supported in the OpenGL driver.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgshaderterrain/osgshaderterrain.cpp

    r4600 r4627  
    55#include <osg/Geode> 
    66#include <osg/Geometry> 
     7#include <osg/GL2Extensions> 
    78#include <osg/Material> 
    89#include <osg/Math> 
    910#include <osg/MatrixTransform> 
    1011#include <osg/PolygonOffset> 
     12#include <osg/Program> 
    1113#include <osg/Projection> 
     14#include <osg/Shader> 
    1215#include <osg/ShapeDrawable> 
    1316#include <osg/StateSet> 
    1417#include <osg/Switch> 
    1518#include <osg/Texture2D> 
     19#include <osg/Uniform> 
    1620 
    1721#include <osgDB/ReadFile> 
     
    506510    for(r=0;r<numRows;++r) 
    507511    { 
    508         for(c=0;c<numColumns;++c) 
    509         { 
    510             min_z = osg::minimum(min_z,vertex[r+c*numRows][2]); 
    511             max_z = osg::maximum(max_z,vertex[r+c*numRows][2]); 
    512         } 
     512        for(c=0;c<numColumns;++c) 
     513        { 
     514            min_z = osg::minimum(min_z,vertex[r+c*numRows][2]); 
     515            max_z = osg::maximum(max_z,vertex[r+c*numRows][2]); 
     516        } 
    513517    } 
    514518         
     
    520524    for(r=0;r<numRows;++r) 
    521525    { 
    522         for(c=0;c<numColumns;++c) 
    523         { 
    524             *((float*)(terrainImage->data(c,r))) = (vertex[r+c*numRows][2]-min_z)*scale_z; 
    525         } 
     526        for(c=0;c<numColumns;++c) 
     527        { 
     528            *((float*)(terrainImage->data(c,r))) = (vertex[r+c*numRows][2]-min_z)*scale_z; 
     529        } 
    526530    } 
    527531     
     
    537541    if (image) 
    538542    { 
    539         osg::Texture2D* texture = new osg::Texture2D; 
    540          
    541         texture->setImage(image); 
    542         stateset->setTextureAttributeAndModes(1,texture,osg::StateAttribute::ON); 
     543        osg::Texture2D* texture = new osg::Texture2D; 
     544         
     545        texture->setImage(image); 
     546        stateset->setTextureAttributeAndModes(1,texture,osg::StateAttribute::ON); 
    543547    } 
    544548 
     
    630634                pos.x() = origin.x(); 
    631635                tex.x() = 0.0f; 
    632                 for(c=0;c<numColumns;++c) 
    633                 { 
    634                     v[vi].set(pos.x(),pos.y(),pos.z()); 
     636                for(c=0;c<numColumns;++c) 
     637                { 
     638                    v[vi].set(pos.x(),pos.y(),pos.z()); 
    635639                    pos.x()+=columnCoordDelta; 
    636640                    tex.x()+=columnTexDelta; 
    637641                    ++vi; 
    638                 } 
     642                } 
    639643                pos.y() += rowCoordDelta; 
    640644                tex.y() += rowTexDelta; 
     
    650654                geometry->addPrimitiveSet(&drawElements); 
    651655                int ei=0; 
    652                 for(c=0;c<numColumns;++c) 
    653                 { 
    654                     drawElements[ei++] = (r+1)*numColumns+c; 
    655                     drawElements[ei++] = (r)*numColumns+c; 
    656                 } 
     656                for(c=0;c<numColumns;++c) 
     657                { 
     658                    drawElements[ei++] = (r+1)*numColumns+c; 
     659                    drawElements[ei++] = (r)*numColumns+c; 
     660                } 
    657661            } 
    658662             
     
    775779    viewer.realize(); 
    776780 
     781    // not all hardware can support vertex texturing, so check first. 
     782    for(unsigned int contextID = 0;  
     783        contextID<viewer.getDisplaySettings()->getMaxNumberOfGraphicsContexts(); 
     784        ++contextID) 
     785    { 
     786        osg::GL2Extensions* gl2ext = osg::GL2Extensions::Get(contextID,false); 
     787        if( gl2ext ) 
     788        { 
     789            if( !gl2ext->isGlslSupported() ) 
     790            { 
     791                std::cout<<"ERROR: GLSL not supported by OpenGL driver."<<std::endl; 
     792                return 1; 
     793            } 
     794 
     795            GLint numVertexTexUnits = 0; 
     796            glGetIntegerv( GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &numVertexTexUnits ); 
     797            if( numVertexTexUnits <= 0 ) 
     798            { 
     799                std::cout<<"ERROR: vertex texturing not supported by OpenGL driver."<<std::endl; 
     800                return 1; 
     801            } 
     802        } 
     803    } 
     804 
    777805    while( !viewer.done() ) 
    778806    {