Added TestSupportCallback to properly handle querry of OpenGL support of
vertex texturing in GLSL.
This commit is contained in:
parent
b324156ec8
commit
1c9f1b8eb1
@ -729,6 +729,39 @@ osg::Node* ForestTechniqueManager::createScene(unsigned int /*numTreesToCreates*
|
|||||||
return scene;
|
return scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TestSupportCallback : public osgProducer::OsgCameraGroup::RealizeCallback
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TestSupportCallback():_supported(true),_errorMessage() {}
|
||||||
|
|
||||||
|
virtual void operator()( osgProducer::OsgCameraGroup&, osgProducer::OsgSceneHandler& sh, const Producer::RenderSurface& )
|
||||||
|
{
|
||||||
|
unsigned int contextID = sh.getSceneView()->getState()->getContextID();
|
||||||
|
osg::GL2Extensions* gl2ext = osg::GL2Extensions::Get(contextID,true);
|
||||||
|
if( gl2ext )
|
||||||
|
{
|
||||||
|
if( !gl2ext->isGlslSupported() )
|
||||||
|
{
|
||||||
|
_supported = false;
|
||||||
|
_errorMessage = "ERROR: GLSL not supported by OpenGL driver.";
|
||||||
|
}
|
||||||
|
|
||||||
|
GLint numVertexTexUnits = 0;
|
||||||
|
glGetIntegerv( GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &numVertexTexUnits );
|
||||||
|
if( numVertexTexUnits <= 0 )
|
||||||
|
{
|
||||||
|
_supported = false;
|
||||||
|
_errorMessage = "ERROR: vertex texturing not supported by OpenGL driver.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _supported;
|
||||||
|
std::string _errorMessage;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
int main( int argc, char **argv )
|
int main( int argc, char **argv )
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -777,31 +810,16 @@ int main( int argc, char **argv )
|
|||||||
// add model to viewer.
|
// add model to viewer.
|
||||||
viewer.setSceneData( node );
|
viewer.setSceneData( node );
|
||||||
|
|
||||||
|
osg::ref_ptr<TestSupportCallback> testSupportCallback = new TestSupportCallback();
|
||||||
|
viewer.setRealizeCallback(testSupportCallback.get());
|
||||||
|
|
||||||
// create the windows and run the threads.
|
// create the windows and run the threads.
|
||||||
viewer.realize();
|
viewer.realize();
|
||||||
|
|
||||||
// not all hardware can support vertex texturing, so check first.
|
if (!testSupportCallback->_supported)
|
||||||
for(unsigned int contextID = 0;
|
|
||||||
contextID<viewer.getDisplaySettings()->getMaxNumberOfGraphicsContexts();
|
|
||||||
++contextID)
|
|
||||||
{
|
{
|
||||||
osg::GL2Extensions* gl2ext = osg::GL2Extensions::Get(contextID,false);
|
osg::notify(osg::WARN)<<testSupportCallback->_errorMessage<<std::endl;
|
||||||
if( gl2ext )
|
exit(1);
|
||||||
{
|
|
||||||
if( !gl2ext->isGlslSupported() )
|
|
||||||
{
|
|
||||||
std::cout<<"ERROR: GLSL not supported by OpenGL driver."<<std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
GLint numVertexTexUnits = 0;
|
|
||||||
glGetIntegerv( GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &numVertexTexUnits );
|
|
||||||
if( numVertexTexUnits <= 0 )
|
|
||||||
{
|
|
||||||
std::cout<<"ERROR: vertex texturing not supported by OpenGL driver."<<std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while( !viewer.done() )
|
while( !viewer.done() )
|
||||||
|
Loading…
Reference in New Issue
Block a user