MOved SampleMaski::Extensions into osg::GL2Extensions
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14577 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
parent
9b03b3f8ce
commit
bc424bc54f
@ -119,21 +119,5 @@ int main(int argc, char *argv[])
|
|||||||
// create the windows and run the threads.
|
// create the windows and run the threads.
|
||||||
viewer.realize();
|
viewer.realize();
|
||||||
|
|
||||||
// now check to see if texture cube map is supported.
|
|
||||||
for(unsigned int contextID = 0;
|
|
||||||
contextID<osg::DisplaySettings::instance()->getMaxNumberOfGraphicsContexts();
|
|
||||||
++contextID)
|
|
||||||
{
|
|
||||||
osg::TextureCubeMap::Extensions* tcmExt = osg::TextureCubeMap::getExtensions(contextID,false);
|
|
||||||
if (tcmExt)
|
|
||||||
{
|
|
||||||
if (!tcmExt->isCubeMapSupported())
|
|
||||||
{
|
|
||||||
std::cout<<"Warning: texture_cube_map not supported by OpenGL drivers, unable to run application."<<std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return viewer.run();
|
return viewer.run();
|
||||||
}
|
}
|
||||||
|
@ -805,33 +805,8 @@ class OSG_EXPORT GL2Extensions : public osg::Referenced
|
|||||||
void (GL_APIENTRY * glMultiTexCoord2dv) (GLenum target,const GLdouble* coord);
|
void (GL_APIENTRY * glMultiTexCoord2dv) (GLenum target,const GLdouble* coord);
|
||||||
void (GL_APIENTRY * glMultiTexCoord3dv) (GLenum target,const GLdouble* coord);
|
void (GL_APIENTRY * glMultiTexCoord3dv) (GLenum target,const GLdouble* coord);
|
||||||
void (GL_APIENTRY * glMultiTexCoord4dv) (GLenum target,const GLdouble* coord);
|
void (GL_APIENTRY * glMultiTexCoord4dv) (GLenum target,const GLdouble* coord);
|
||||||
#if 0
|
|
||||||
void (GL_APIENTRY * glVertexAttrib1s) (unsigned int index, GLshort s);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib1f) (unsigned int index, GLfloat f);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib1d) (unsigned int index, GLdouble f);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib2fv) (unsigned int index, const GLfloat * v);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib3fv) (unsigned int index, const GLfloat * v);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib4fv) (unsigned int index, const GLfloat * v);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib2dv) (unsigned int index, const GLdouble * v);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib3dv) (unsigned int index, const GLdouble * v);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib4dv) (unsigned int index, const GLdouble * v);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib4ubv) (unsigned int index, const GLubyte * v);
|
|
||||||
void (GL_APIENTRY * glVertexAttrib4Nubv) (unsigned int index, const GLubyte * v);
|
|
||||||
|
|
||||||
void (GL_APIENTRY * glGenBuffers) (GLsizei n, GLuint *buffers);
|
|
||||||
void (GL_APIENTRY * glBindBuffer (GLenum target, GLuint buffer);
|
|
||||||
void (GL_APIENTRY * glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
|
|
||||||
void (GL_APIENTRY * glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
|
|
||||||
void (GL_APIENTRY * glDeleteBuffers (GLsizei n, const GLuint *buffers);
|
|
||||||
GLboolean (GL_APIENTRY * glIsBuffer (GLuint buffer);
|
|
||||||
void (GL_APIENTRY * glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
|
|
||||||
GLvoid* (GL_APIENTRY * glMapBuffer (GLenum target, GLenum access);
|
|
||||||
GLboolean (GL_APIENTRY * glUnmapBuffer (GLenum target);
|
|
||||||
void (GL_APIENTRY * glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
|
|
||||||
void (GL_APIENTRY * glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
// Occlusion Query extensions
|
||||||
void (GL_APIENTRY * glGenOcclusionQueries) ( GLsizei n, GLuint *ids );
|
void (GL_APIENTRY * glGenOcclusionQueries) ( GLsizei n, GLuint *ids );
|
||||||
void (GL_APIENTRY * glDeleteOcclusionQueries) ( GLsizei n, const GLuint *ids );
|
void (GL_APIENTRY * glDeleteOcclusionQueries) ( GLsizei n, const GLuint *ids );
|
||||||
GLboolean (GL_APIENTRY * glIsOcclusionQuery) ( GLuint id );
|
GLboolean (GL_APIENTRY * glIsOcclusionQuery) ( GLuint id );
|
||||||
@ -852,6 +827,14 @@ class OSG_EXPORT GL2Extensions : public osg::Referenced
|
|||||||
void (GL_APIENTRY * glGetQueryObjectui64v) (GLuint id, GLenum pname, GLuint64 *params);
|
void (GL_APIENTRY * glGetQueryObjectui64v) (GLuint id, GLenum pname, GLuint64 *params);
|
||||||
void (GL_APIENTRY * glGetInteger64v) (GLenum pname, GLint64 *params);
|
void (GL_APIENTRY * glGetInteger64v) (GLenum pname, GLint64 *params);
|
||||||
|
|
||||||
|
|
||||||
|
// SampleMaski functionality
|
||||||
|
bool isOpenGL32upported;
|
||||||
|
bool isTextureMultisampleSupported;
|
||||||
|
bool isSampleMaskiSupported;
|
||||||
|
|
||||||
|
void (GL_APIENTRY * glSampleMaski) (GLuint maskNumber, GLbitfield mask);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,47 +41,6 @@ class OSG_EXPORT SampleMaski : public StateAttribute
|
|||||||
|
|
||||||
virtual void apply(State& state) const;
|
virtual void apply(State& state) const;
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
/** Extensions class which encapsulates the querying of extensions and
|
|
||||||
* associated function pointers, and provide convenience wrappers to
|
|
||||||
* check for the extensions or use the associated functions.
|
|
||||||
*/
|
|
||||||
class OSG_EXPORT Extensions : public osg::Referenced
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Extensions(unsigned int contextID);
|
|
||||||
|
|
||||||
Extensions(const Extensions& rhs);
|
|
||||||
|
|
||||||
void lowestCommonDenominator(const Extensions& rhs);
|
|
||||||
|
|
||||||
void setupGLExtensions(unsigned int contextID);
|
|
||||||
|
|
||||||
bool isOpenGL32upported() const { return _isOpenGL32upported; }
|
|
||||||
bool isTextureMultisampleSupported() const { return _isTextureMultisampleSupported; }
|
|
||||||
bool isSampleMaskiSupported() const { return _isSampleMaskiSupported; }
|
|
||||||
|
|
||||||
void glSampleMaski(GLuint maskNumber, GLbitfield mask) const;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
~Extensions() {}
|
|
||||||
|
|
||||||
bool _isOpenGL32upported;
|
|
||||||
bool _isTextureMultisampleSupported;
|
|
||||||
bool _isSampleMaskiSupported;
|
|
||||||
|
|
||||||
typedef void (GL_APIENTRY * SampleMaski) ( GLuint maskNumber, GLbitfield mask );
|
|
||||||
|
|
||||||
SampleMaski _glSampleMaski;
|
|
||||||
};
|
|
||||||
|
|
||||||
static Extensions* getExtensions(unsigned int contextID,bool createIfNotInitalized);
|
|
||||||
|
|
||||||
static void setExtensions(unsigned int contextID,Extensions* extensions);
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual ~SampleMaski();
|
virtual ~SampleMaski();
|
||||||
|
@ -388,6 +388,15 @@ GL2Extensions::GL2Extensions(unsigned int contextID)
|
|||||||
setGLExtensionFuncPtr(glQueryCounter, "glQueryCounter");
|
setGLExtensionFuncPtr(glQueryCounter, "glQueryCounter");
|
||||||
setGLExtensionFuncPtr(glGetInteger64v, "glGetInteger64v");
|
setGLExtensionFuncPtr(glGetInteger64v, "glGetInteger64v");
|
||||||
|
|
||||||
|
|
||||||
|
// SampleMaski functionality
|
||||||
|
isTextureMultisampleSupported = isGLExtensionSupported(contextID, "GL_ARB_texture_multisample");
|
||||||
|
isOpenGL32upported = getGLVersionNumber() >= 3.2;
|
||||||
|
|
||||||
|
// function pointers
|
||||||
|
setGLExtensionFuncPtr(glSampleMaski, "glSampleMaski");
|
||||||
|
// protect against buggy drivers (maybe not necessary)
|
||||||
|
isSampleMaskiSupported = glSampleMaski!=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,93 +51,16 @@ int SampleMaski::compare(const StateAttribute& sa) const
|
|||||||
void SampleMaski::apply(State& state) const
|
void SampleMaski::apply(State& state) const
|
||||||
{
|
{
|
||||||
// get "per-context" extensions
|
// get "per-context" extensions
|
||||||
const unsigned int contextID = state.getContextID();
|
const GL2Extensions* extensions = state.get<GL2Extensions>();
|
||||||
const Extensions* extensions = getExtensions(contextID,true);
|
|
||||||
|
|
||||||
if ( (extensions->isTextureMultisampleSupported()) || (extensions->isOpenGL32upported()) || (extensions->isSampleMaskiSupported()) )
|
if ( (extensions->isTextureMultisampleSupported) || (extensions->isOpenGL32upported) || (extensions->isSampleMaskiSupported) )
|
||||||
{
|
{
|
||||||
extensions->glSampleMaski(0u, _sampleMask[0u]);
|
extensions->glSampleMaski(0u, _sampleMask[0u]);
|
||||||
//For now we use only 32-bit Sample mask
|
//For now we use only 32-bit Sample mask
|
||||||
// extensions->glSampleMaski(1u, _sampleMask[1u]);
|
// extensions->glSampleMaski(1u, _sampleMask[1u]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
OSG_WARN << "SampleMaski failed as the required graphics capabilities were\n"
|
OSG_WARN << "SampleMaski failed as the required graphics capabilities were not found. \n"
|
||||||
" not found (contextID " << contextID << "). OpenGL 3.2 or \n"
|
"OpenGL 3.2 or ARB_texture_multisample extension is required." << std::endl;
|
||||||
" ARB_texture_multisample extension is required." << std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
typedef buffered_value< ref_ptr<SampleMaski::Extensions> > BufferedExtensions;
|
|
||||||
static BufferedExtensions s_extensions;
|
|
||||||
|
|
||||||
SampleMaski::Extensions* SampleMaski::getExtensions(unsigned int contextID,bool createIfNotInitalized)
|
|
||||||
{
|
|
||||||
if (!s_extensions[contextID] && createIfNotInitalized) s_extensions[contextID] = new Extensions(contextID);
|
|
||||||
return s_extensions[contextID].get();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SampleMaski::setExtensions(unsigned int contextID,Extensions* extensions)
|
|
||||||
{
|
|
||||||
s_extensions[contextID] = extensions;
|
|
||||||
}
|
|
||||||
|
|
||||||
SampleMaski::Extensions::Extensions(unsigned int contextID)
|
|
||||||
{
|
|
||||||
setupGLExtensions(contextID);
|
|
||||||
}
|
|
||||||
|
|
||||||
SampleMaski::Extensions::Extensions(const Extensions& rhs):
|
|
||||||
Referenced()
|
|
||||||
{
|
|
||||||
_isTextureMultisampleSupported = rhs._isTextureMultisampleSupported;
|
|
||||||
_isOpenGL32upported = rhs._isOpenGL32upported;
|
|
||||||
_isSampleMaskiSupported = rhs._isSampleMaskiSupported;
|
|
||||||
_glSampleMaski = rhs._glSampleMaski;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SampleMaski::Extensions::lowestCommonDenominator(const Extensions& rhs)
|
|
||||||
{
|
|
||||||
if (!rhs._isTextureMultisampleSupported) _isTextureMultisampleSupported = false;
|
|
||||||
if (!rhs._isOpenGL32upported) _isOpenGL32upported = false;
|
|
||||||
if (!rhs._isSampleMaskiSupported) _isSampleMaskiSupported = false;
|
|
||||||
|
|
||||||
if (!rhs._glSampleMaski) _glSampleMaski = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SampleMaski::Extensions::setupGLExtensions(unsigned int contextID)
|
|
||||||
{
|
|
||||||
// extension support
|
|
||||||
_isTextureMultisampleSupported = isGLExtensionSupported(contextID, "GL_ARB_texture_multisample");
|
|
||||||
_isOpenGL32upported = getGLVersionNumber() >= 3.2;
|
|
||||||
|
|
||||||
// function pointers
|
|
||||||
setGLExtensionFuncPtr(_glSampleMaski, "glSampleMaski");
|
|
||||||
|
|
||||||
|
|
||||||
// protect against buggy drivers (maybe not necessary)
|
|
||||||
if (!_glSampleMaski) _isSampleMaskiSupported = false;
|
|
||||||
|
|
||||||
// notify
|
|
||||||
if( _isOpenGL32upported )
|
|
||||||
{
|
|
||||||
OSG_INFO << "SampleMaski is going to use OpenGL 3.2 API (contextID " << contextID << ")." << std::endl;
|
|
||||||
}
|
|
||||||
else if( _isTextureMultisampleSupported )
|
|
||||||
{
|
|
||||||
OSG_INFO << "SampleMaski is going to use GL_ARB_texture_multisample extension (contextID " << contextID << ")." << std::endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OSG_INFO << "SampleMaski did not found required graphics capabilities\n"
|
|
||||||
" (contextID " << contextID << "). OpenGL 3.2 or \n"
|
|
||||||
" GL_ARB_texture_multisample extension is required." << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SampleMaski::Extensions::glSampleMaski(GLuint maskNumber, GLbitfield mask) const
|
|
||||||
{
|
|
||||||
_glSampleMaski(maskNumber, mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user