From b199a334d9b0b06b96c0601fa9b5a0ca1b0bb40c Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 10 Nov 2009 17:01:08 +0000 Subject: [PATCH] Introduced OSG_GL*_FEATURES macros defined in include/GL that are set to 0 or 1 according to what the assocoated version of GL is compiled against. Removed EXT postfix of FrameBufferObject functions, and added support for checking non EXT versions frame buffer object GL functions. Introduced usage of OSG_GL*_FEATURES to avoid some #if #else #endif code blocks. Using a submissions from Paul Martz as a guide added perliminary GL3 support to a range of OSG classes --- include/osg/FrameBufferObject | 66 ++++++++-------- include/osg/GL | 31 ++++++++ src/osg/FrameBufferObject.cpp | 142 +++++++++++++++------------------- src/osg/GL2Extensions.cpp | 19 ++--- src/osg/GLExtensions.cpp | 2 + src/osg/PointSprite.cpp | 7 +- src/osg/State.cpp | 2 +- src/osg/Texture.cpp | 28 ++++--- src/osg/TextureCubeMap.cpp | 3 +- src/osg/TextureRectangle.cpp | 8 +- src/osgUtil/RenderStage.cpp | 18 ++--- 11 files changed, 174 insertions(+), 152 deletions(-) diff --git a/include/osg/FrameBufferObject b/include/osg/FrameBufferObject index 9fbeb94a9..5b731ea9d 100644 --- a/include/osg/FrameBufferObject +++ b/include/osg/FrameBufferObject @@ -136,46 +136,46 @@ namespace osg class OSG_EXPORT FBOExtensions : public osg::Referenced { public: - typedef void APIENTRY TglBindRenderbufferEXT(GLenum, GLuint); - typedef void APIENTRY TglDeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers); - typedef void APIENTRY TglGenRenderbuffersEXT(GLsizei, GLuint *); - typedef void APIENTRY TglRenderbufferStorageEXT(GLenum, GLenum, GLsizei, GLsizei); - typedef void APIENTRY TglRenderbufferStorageMultisampleEXT(GLenum, GLsizei, GLenum, GLsizei, GLsizei); + typedef void APIENTRY TglBindRenderbuffer(GLenum, GLuint); + typedef void APIENTRY TglDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers); + typedef void APIENTRY TglGenRenderbuffers(GLsizei, GLuint *); + typedef void APIENTRY TglRenderbufferStorage(GLenum, GLenum, GLsizei, GLsizei); + typedef void APIENTRY TglRenderbufferStorageMultisample(GLenum, GLsizei, GLenum, GLsizei, GLsizei); typedef void APIENTRY TglRenderbufferStorageMultisampleCoverageNV(GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei); - typedef void APIENTRY TglBindFramebufferEXT(GLenum, GLuint); - typedef void APIENTRY TglDeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers); - typedef void APIENTRY TglGenFramebuffersEXT(GLsizei, GLuint *); - typedef GLenum APIENTRY TglCheckFramebufferStatusEXT(GLenum); - typedef void APIENTRY TglFramebufferTexture1DEXT(GLenum, GLenum, GLenum, GLuint, GLint); - typedef void APIENTRY TglFramebufferTexture2DEXT(GLenum, GLenum, GLenum, GLuint, GLint); - typedef void APIENTRY TglFramebufferTexture3DEXT(GLenum, GLenum, GLenum, GLuint, GLint, GLint); - typedef void APIENTRY TglFramebufferTextureLayerEXT(GLenum, GLenum, GLuint, GLint, GLint); - typedef void APIENTRY TglFramebufferRenderbufferEXT(GLenum, GLenum, GLenum, GLuint); - typedef void APIENTRY TglGenerateMipmapEXT(GLenum); - typedef void APIENTRY TglBlitFramebufferEXT(GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); + typedef void APIENTRY TglBindFramebuffer(GLenum, GLuint); + typedef void APIENTRY TglDeleteFramebuffers(GLsizei n, const GLuint *framebuffers); + typedef void APIENTRY TglGenFramebuffers(GLsizei, GLuint *); + typedef GLenum APIENTRY TglCheckFramebufferStatus(GLenum); + typedef void APIENTRY TglFramebufferTexture1D(GLenum, GLenum, GLenum, GLuint, GLint); + typedef void APIENTRY TglFramebufferTexture2D(GLenum, GLenum, GLenum, GLuint, GLint); + typedef void APIENTRY TglFramebufferTexture3D(GLenum, GLenum, GLenum, GLuint, GLint, GLint); + typedef void APIENTRY TglFramebufferTextureLayer(GLenum, GLenum, GLuint, GLint, GLint); + typedef void APIENTRY TglFramebufferRenderbuffer(GLenum, GLenum, GLenum, GLuint); + typedef void APIENTRY TglGenerateMipmap(GLenum); + typedef void APIENTRY TglBlitFramebuffer(GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); - TglBindRenderbufferEXT* glBindRenderbufferEXT; - TglGenRenderbuffersEXT* glGenRenderbuffersEXT; - TglDeleteRenderbuffersEXT* glDeleteRenderbuffersEXT; - TglRenderbufferStorageEXT* glRenderbufferStorageEXT; - TglRenderbufferStorageMultisampleEXT* glRenderbufferStorageMultisampleEXT; + TglBindRenderbuffer* glBindRenderbuffer; + TglGenRenderbuffers* glGenRenderbuffers; + TglDeleteRenderbuffers* glDeleteRenderbuffers; + TglRenderbufferStorage* glRenderbufferStorage; + TglRenderbufferStorageMultisample* glRenderbufferStorageMultisample; TglRenderbufferStorageMultisampleCoverageNV* glRenderbufferStorageMultisampleCoverageNV; - TglBindFramebufferEXT* glBindFramebufferEXT; - TglDeleteFramebuffersEXT* glDeleteFramebuffersEXT; - TglGenFramebuffersEXT* glGenFramebuffersEXT; - TglCheckFramebufferStatusEXT* glCheckFramebufferStatusEXT; - TglFramebufferTexture1DEXT* glFramebufferTexture1DEXT; - TglFramebufferTexture2DEXT* glFramebufferTexture2DEXT; - TglFramebufferTexture3DEXT* glFramebufferTexture3DEXT; - TglFramebufferTextureLayerEXT* glFramebufferTextureLayerEXT; - TglFramebufferRenderbufferEXT* glFramebufferRenderbufferEXT; - TglGenerateMipmapEXT* glGenerateMipmapEXT; - TglBlitFramebufferEXT* glBlitFramebufferEXT; + TglBindFramebuffer* glBindFramebuffer; + TglDeleteFramebuffers* glDeleteFramebuffers; + TglGenFramebuffers* glGenFramebuffers; + TglCheckFramebufferStatus* glCheckFramebufferStatus; + TglFramebufferTexture1D* glFramebufferTexture1D; + TglFramebufferTexture2D* glFramebufferTexture2D; + TglFramebufferTexture3D* glFramebufferTexture3D; + TglFramebufferTextureLayer* glFramebufferTextureLayer; + TglFramebufferRenderbuffer* glFramebufferRenderbuffer; + TglGenerateMipmap* glGenerateMipmap; + TglBlitFramebuffer* glBlitFramebuffer; static FBOExtensions* instance(unsigned contextID, bool createIfNotInitalized); bool isSupported() const { return _supported; } - bool isMultisampleSupported() const { return glRenderbufferStorageMultisampleEXT != 0; } + bool isMultisampleSupported() const { return glRenderbufferStorageMultisample != 0; } bool isMultisampleCoverageSupported() const { return glRenderbufferStorageMultisampleCoverageNV != 0; } bool isPackedDepthStencilSupported() const { return _packed_depth_stencil_supported; } diff --git a/include/osg/GL b/include/osg/GL index e9ef4c7f7..a86d01bfc 100644 --- a/include/osg/GL +++ b/include/osg/GL @@ -162,4 +162,35 @@ #define GL_LUMINANCE_ALPHA 0x190A #endif +#ifdef OSG_GL1_AVAILABLE + #define OSG_GL1_FEATURES 1 +#else + #define OSG_GL1_FEATURES 0 +#endif + +#ifdef OSG_GL2_AVAILABLE + #define OSG_GL2_FEATURES 1 +#else + #define OSG_GL2_FEATURES 0 +#endif + +#ifdef OSG_GL3_AVAILABLE + #define OSG_GL3_FEATURES 1 +#else + #define OSG_GL3_FEATURES 0 +#endif + +#ifdef OSG_GLES1_AVAILABLE + #define OSG_GLES1_FEATURES 1 +#else + #define OSG_GLES1_FEATURES 0 +#endif + +#ifdef OSG_GLES2_AVAILABLE + #define OSG_GLES2_FEATURES 1 +#else + #define OSG_GLES2_FEATURES 0 +#endif + + #endif // __osgGL_h diff --git a/src/osg/FrameBufferObject.cpp b/src/osg/FrameBufferObject.cpp index cabbc5031..3f2a16423 100644 --- a/src/osg/FrameBufferObject.cpp +++ b/src/osg/FrameBufferObject.cpp @@ -38,76 +38,62 @@ FBOExtensions* FBOExtensions::instance(unsigned contextID, bool createIfNotInita /************************************************************************** * FBOExtensions **************************************************************************/ -#define LOAD_FBO_EXT(name) setGLExtensionFuncPtr(name, (#name)) +#define LOAD_FBO_EXT(name) setGLExtensionFuncPtr(name, (#name), ( std::string(#name)+std::string("EXT") ).c_str() ) FBOExtensions::FBOExtensions(unsigned int contextID) -: glBindRenderbufferEXT(0), - glGenRenderbuffersEXT(0), - glDeleteRenderbuffersEXT(0), - glRenderbufferStorageEXT(0), - glRenderbufferStorageMultisampleEXT(0), +: glBindRenderbuffer(0), + glGenRenderbuffers(0), + glDeleteRenderbuffers(0), + glRenderbufferStorage(0), + glRenderbufferStorageMultisample(0), glRenderbufferStorageMultisampleCoverageNV(0), - glBindFramebufferEXT(0), - glDeleteFramebuffersEXT(0), - glGenFramebuffersEXT(0), - glCheckFramebufferStatusEXT(0), - glFramebufferTexture1DEXT(0), - glFramebufferTexture2DEXT(0), - glFramebufferTexture3DEXT(0), - glFramebufferTextureLayerEXT(0), - glFramebufferRenderbufferEXT(0), - glGenerateMipmapEXT(0), - glBlitFramebufferEXT(0), + glBindFramebuffer(0), + glDeleteFramebuffers(0), + glGenFramebuffers(0), + glCheckFramebufferStatus(0), + glFramebufferTexture1D(0), + glFramebufferTexture2D(0), + glFramebufferTexture3D(0), + glFramebufferTextureLayer(0), + glFramebufferRenderbuffer(0), + glGenerateMipmap(0), + glBlitFramebuffer(0), _supported(false), _packed_depth_stencil_supported(false) { - if (!isGLExtensionSupported(contextID, "GL_EXT_framebuffer_object")) - return; - - LOAD_FBO_EXT(glBindRenderbufferEXT); - LOAD_FBO_EXT(glGenRenderbuffersEXT); - LOAD_FBO_EXT(glDeleteRenderbuffersEXT); - LOAD_FBO_EXT(glRenderbufferStorageEXT); - LOAD_FBO_EXT(glBindFramebufferEXT); - LOAD_FBO_EXT(glDeleteFramebuffersEXT); - LOAD_FBO_EXT(glGenFramebuffersEXT); - LOAD_FBO_EXT(glCheckFramebufferStatusEXT); - LOAD_FBO_EXT(glFramebufferTexture1DEXT); - LOAD_FBO_EXT(glFramebufferTexture2DEXT); - LOAD_FBO_EXT(glFramebufferTexture3DEXT); - LOAD_FBO_EXT(glFramebufferTextureLayerEXT); - LOAD_FBO_EXT(glFramebufferRenderbufferEXT); - LOAD_FBO_EXT(glGenerateMipmapEXT); + LOAD_FBO_EXT(glBindRenderbuffer); + LOAD_FBO_EXT(glGenRenderbuffers); + LOAD_FBO_EXT(glDeleteRenderbuffers); + LOAD_FBO_EXT(glRenderbufferStorage); + LOAD_FBO_EXT(glBindFramebuffer); + LOAD_FBO_EXT(glDeleteFramebuffers); + LOAD_FBO_EXT(glGenFramebuffers); + LOAD_FBO_EXT(glCheckFramebufferStatus); + LOAD_FBO_EXT(glFramebufferTexture1D); + LOAD_FBO_EXT(glFramebufferTexture2D); + LOAD_FBO_EXT(glFramebufferTexture3D); + LOAD_FBO_EXT(glFramebufferTextureLayer); + LOAD_FBO_EXT(glFramebufferRenderbuffer); + LOAD_FBO_EXT(glGenerateMipmap); _supported = - glBindRenderbufferEXT != 0 && - glDeleteRenderbuffersEXT != 0 && - glGenRenderbuffersEXT != 0 && - glRenderbufferStorageEXT != 0 && - glBindFramebufferEXT != 0 && - glDeleteFramebuffersEXT != 0 && - glGenFramebuffersEXT != 0 && - glCheckFramebufferStatusEXT != 0 && - glFramebufferTexture1DEXT != 0 && - glFramebufferTexture2DEXT != 0 && - glFramebufferTexture3DEXT != 0 && - glFramebufferRenderbufferEXT != 0 && - glGenerateMipmapEXT != 0; + glBindRenderbuffer != 0 && + glDeleteRenderbuffers != 0 && + glGenRenderbuffers != 0 && + glRenderbufferStorage != 0 && + glBindFramebuffer != 0 && + glDeleteFramebuffers != 0 && + glGenFramebuffers != 0 && + glCheckFramebufferStatus != 0 && + glFramebufferTexture1D != 0 && + glFramebufferTexture2D != 0 && + glFramebufferTexture3D != 0 && + glFramebufferRenderbuffer != 0 && + glGenerateMipmap != 0; - if (isGLExtensionSupported(contextID, "GL_EXT_framebuffer_blit")) - { - LOAD_FBO_EXT(glBlitFramebufferEXT); - - if (isGLExtensionSupported(contextID, "GL_EXT_framebuffer_multisample")) - { - LOAD_FBO_EXT(glRenderbufferStorageMultisampleEXT); - } - - if (isGLExtensionSupported(contextID, "GL_NV_framebuffer_multisample_coverage")) - { - LOAD_FBO_EXT(glRenderbufferStorageMultisampleCoverageNV); - } - } + LOAD_FBO_EXT(glBlitFramebuffer); + LOAD_FBO_EXT(glRenderbufferStorageMultisample); + LOAD_FBO_EXT(glRenderbufferStorageMultisampleCoverageNV); if (isGLExtensionSupported(contextID, "GL_EXT_packed_depth_stencil")) { @@ -161,7 +147,7 @@ void RenderBuffer::flushDeletedRenderBuffers(unsigned int contextID,double /*cur titr!=pList.end() && elapsedTimeglDeleteRenderbuffersEXT(1, &(*titr) ); + extensions->glDeleteRenderbuffers(1, &(*titr) ); titr = pList.erase( titr ); elapsedTime = timer.delta_s(start_tick,timer.tick()); } @@ -238,7 +224,7 @@ GLuint RenderBuffer::getObjectID(unsigned int contextID, const FBOExtensions *ex if (objectID == 0) { - ext->glGenRenderbuffersEXT(1, &objectID); + ext->glGenRenderbuffers(1, &objectID); if (objectID == 0) return 0; dirty = 1; @@ -247,7 +233,7 @@ GLuint RenderBuffer::getObjectID(unsigned int contextID, const FBOExtensions *ex if (dirty) { // bind and configure - ext->glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, objectID); + ext->glBindRenderbuffer(GL_RENDERBUFFER_EXT, objectID); // framebuffer_multisample_coverage specification requires that coverage // samples must be >= color samples. @@ -270,12 +256,12 @@ GLuint RenderBuffer::getObjectID(unsigned int contextID, const FBOExtensions *ex { int samples = minimum(_samples, getMaxSamples(contextID, ext)); - ext->glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, + ext->glRenderbufferStorageMultisample(GL_RENDERBUFFER_EXT, samples, _internalFormat, _width, _height); } else { - ext->glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, _internalFormat, _width, _height); + ext->glRenderbufferStorage(GL_RENDERBUFFER_EXT, _internalFormat, _width, _height); } dirty = 0; } @@ -512,7 +498,7 @@ void FrameBufferAttachment::createRequiredTexturesAndApplyGenerateMipMap(State & { state.setActiveTextureUnit(0); state.applyTextureAttribute(0, _ximpl->textureTarget.get()); - ext->glGenerateMipmapEXT(_ximpl->textureTarget->getTextureTarget()); + ext->glGenerateMipmap(_ximpl->textureTarget->getTextureTarget()); } } @@ -540,25 +526,25 @@ void FrameBufferAttachment::attach(State &state, GLenum target, GLenum attachmen { default: case Pimpl::RENDERBUFFER: - ext->glFramebufferRenderbufferEXT(target, attachment_point, GL_RENDERBUFFER_EXT, _ximpl->renderbufferTarget->getObjectID(contextID, ext)); + ext->glFramebufferRenderbuffer(target, attachment_point, GL_RENDERBUFFER_EXT, _ximpl->renderbufferTarget->getObjectID(contextID, ext)); break; case Pimpl::TEXTURE1D: - ext->glFramebufferTexture1DEXT(target, attachment_point, GL_TEXTURE_1D, tobj->id(), _ximpl->level); + ext->glFramebufferTexture1D(target, attachment_point, GL_TEXTURE_1D, tobj->id(), _ximpl->level); break; case Pimpl::TEXTURE2D: - ext->glFramebufferTexture2DEXT(target, attachment_point, GL_TEXTURE_2D, tobj->id(), _ximpl->level); + ext->glFramebufferTexture2D(target, attachment_point, GL_TEXTURE_2D, tobj->id(), _ximpl->level); break; case Pimpl::TEXTURE3D: - ext->glFramebufferTexture3DEXT(target, attachment_point, GL_TEXTURE_3D, tobj->id(), _ximpl->level, _ximpl->zoffset); + ext->glFramebufferTexture3D(target, attachment_point, GL_TEXTURE_3D, tobj->id(), _ximpl->level, _ximpl->zoffset); break; case Pimpl::TEXTURE2DARRAY: - ext->glFramebufferTextureLayerEXT(target, attachment_point, tobj->id(), _ximpl->level, _ximpl->zoffset); + ext->glFramebufferTextureLayer(target, attachment_point, tobj->id(), _ximpl->level, _ximpl->zoffset); break; case Pimpl::TEXTURERECT: - ext->glFramebufferTexture2DEXT(target, attachment_point, GL_TEXTURE_RECTANGLE, tobj->id(), 0); + ext->glFramebufferTexture2D(target, attachment_point, GL_TEXTURE_RECTANGLE, tobj->id(), 0); break; case Pimpl::TEXTURECUBE: - ext->glFramebufferTexture2DEXT(target, attachment_point, GL_TEXTURE_CUBE_MAP_POSITIVE_X + _ximpl->cubeMapFace, tobj->id(), _ximpl->level); + ext->glFramebufferTexture2D(target, attachment_point, GL_TEXTURE_CUBE_MAP_POSITIVE_X + _ximpl->cubeMapFace, tobj->id(), _ximpl->level); break; } } @@ -666,7 +652,7 @@ void FrameBufferObject::flushDeletedFrameBufferObjects(unsigned int contextID,do titr!=pList.end() && elapsedTimeglDeleteFramebuffersEXT(1, &(*titr) ); + extensions->glDeleteFramebuffers(1, &(*titr) ); titr = pList.erase( titr ); elapsedTime = timer.delta_s(start_tick,timer.tick()); } @@ -761,7 +747,7 @@ void FrameBufferObject::apply(State &state, BindTarget target) const if (_attachments.empty()) { - ext->glBindFramebufferEXT(target, 0); + ext->glBindFramebuffer(target, 0); return; } @@ -770,7 +756,7 @@ void FrameBufferObject::apply(State &state, BindTarget target) const GLuint &fboID = _fboID[contextID]; if (fboID == 0) { - ext->glGenFramebuffersEXT(1, &fboID); + ext->glGenFramebuffers(1, &fboID); if (fboID == 0) { notify(WARN) << "Warning: FrameBufferObject: could not create the FBO" << std::endl; @@ -800,7 +786,7 @@ void FrameBufferObject::apply(State &state, BindTarget target) const } - ext->glBindFramebufferEXT(target, fboID); + ext->glBindFramebuffer(target, fboID); // enable drawing buffers to render the result to fbo if (_drawBuffers.size() > 0) diff --git a/src/osg/GL2Extensions.cpp b/src/osg/GL2Extensions.cpp index 99779c62c..696833530 100644 --- a/src/osg/GL2Extensions.cpp +++ b/src/osg/GL2Extensions.cpp @@ -329,21 +329,14 @@ void GL2Extensions::setupGL2Extensions(unsigned int contextID) _glVersion = asciiToFloat( version ); _glslLanguageVersion = 0.0f; - _isShaderObjectsSupported = osg::isGLExtensionSupported(contextID,"GL_ARB_shader_objects"); - _isVertexShaderSupported = osg::isGLExtensionSupported(contextID,"GL_ARB_vertex_shader"); - _isFragmentShaderSupported = osg::isGLExtensionSupported(contextID,"GL_ARB_fragment_shader"); - _isLanguage100Supported = osg::isGLExtensionSupported(contextID,"GL_ARB_shading_language_100"); + bool shadersBuiltIn = OSG_GLES2_FEATURES || OSG_GL3_FEATURES; + + _isShaderObjectsSupported = shadersBuiltIn || osg::isGLExtensionSupported(contextID,"GL_ARB_shader_objects"); + _isVertexShaderSupported = shadersBuiltIn || osg::isGLExtensionSupported(contextID,"GL_ARB_vertex_shader"); + _isFragmentShaderSupported = shadersBuiltIn || osg::isGLExtensionSupported(contextID,"GL_ARB_fragment_shader"); + _isLanguage100Supported = shadersBuiltIn || osg::isGLExtensionSupported(contextID,"GL_ARB_shading_language_100"); _isGeometryShader4Supported = osg::isGLExtensionSupported(contextID,"GL_EXT_geometry_shader4"); _isGpuShader4Supported = osg::isGLExtensionSupported(contextID,"GL_EXT_gpu_shader4"); - - - #if defined(OSG_GLES2_AVAILABLE) - _glVersion = 2.0; - _isShaderObjectsSupported = true; - _isVertexShaderSupported = true; - _isFragmentShaderSupported = true; - _isLanguage100Supported = true; - #endif if( isGlslSupported() ) { diff --git a/src/osg/GLExtensions.cpp b/src/osg/GLExtensions.cpp index 8008e12ab..0a3b0fb7a 100644 --- a/src/osg/GLExtensions.cpp +++ b/src/osg/GLExtensions.cpp @@ -318,6 +318,8 @@ std::string& osg::getGLExtensionDisableString() void* osg::getGLExtensionFuncPtr(const char *funcName) { + // osg::notify(osg::NOTICE)<<"osg::getGLExtensionFuncPtr("<(wglGetProcAddress(funcName)); diff --git a/src/osg/PointSprite.cpp b/src/osg/PointSprite.cpp index 62b287ab2..917ec70a7 100644 --- a/src/osg/PointSprite.cpp +++ b/src/osg/PointSprite.cpp @@ -51,7 +51,10 @@ bool PointSprite::checkValidityOfAssociatedModes(osg::State& state) const void PointSprite::apply(osg::State& state) const { -#ifdef OSG_GL_FIXED_FUNCTION_AVAILABLE +#if defined( OSG_GL3_AVAILABLE ) + const Point::Extensions* extensions = Point::getExtensions(state.getContextID(),true); + extensions->glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN,_coordOriginMode); +#elif defined( OSG_GL_FIXED_FUNCTION_AVAILABLE ) if(!isPointSpriteSupported(state.getContextID())) return; glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, 1); @@ -83,7 +86,7 @@ bool PointSprite::isPointSpriteSupported(unsigned int contextID) if (!s_extensions[contextID].initialized) { s_extensions[contextID].initialized = true; - s_extensions[contextID].supported = isGLExtensionSupported(contextID, "GL_ARB_point_sprite") || isGLExtensionSupported(contextID, "GL_NV_point_sprite"); + s_extensions[contextID].supported = OSG_GL3_FEATURES || isGLExtensionSupported(contextID, "GL_ARB_point_sprite") || isGLExtensionSupported(contextID, "GL_NV_point_sprite"); } return s_extensions[contextID].supported; diff --git a/src/osg/State.cpp b/src/osg/State.cpp index 18d7ab812..8c2d22047 100644 --- a/src/osg/State.cpp +++ b/src/osg/State.cpp @@ -1074,7 +1074,7 @@ bool State::computeFogCoordSupported() const bool State::computeVertexBufferObjectSupported() const { _isVertexBufferObjectSupportResolved = true; - _isVertexBufferObjectSupported = osg::isGLExtensionSupported(_contextID,"GL_ARB_vertex_buffer_object"); + _isVertexBufferObjectSupported = OSG_GLES2_FEATURES || OSG_GL3_FEATURES || osg::isGLExtensionSupported(_contextID,"GL_ARB_vertex_buffer_object"); return _isVertexBufferObjectSupported; } diff --git a/src/osg/Texture.cpp b/src/osg/Texture.cpp index 22e234156..fd7c1f7d0 100644 --- a/src/osg/Texture.cpp +++ b/src/osg/Texture.cpp @@ -2199,7 +2199,7 @@ bool Texture::isHardwareMipmapGenerationEnabled(const State& state) const const FBOExtensions* fbo_ext = FBOExtensions::instance(contextID,true); - if (fbo_ext->glGenerateMipmapEXT) + if (fbo_ext->glGenerateMipmap) { return true; } @@ -2212,6 +2212,9 @@ Texture::GenerateMipmapMode Texture::mipmapBeforeTexImage(const State& state, bo { if (hardwareMipmapOn) { +#if defined( OSG_GLES2_AVAILABLE ) || defined( OSG_GL3_AVAILABLE ) + return GENERATE_MIPMAP; +#else int width = getTextureWidth(); int height = getTextureHeight(); @@ -2223,7 +2226,7 @@ Texture::GenerateMipmapMode Texture::mipmapBeforeTexImage(const State& state, bo if (_internalFormatType != SIGNED_INTEGER && _internalFormatType != UNSIGNED_INTEGER) { - if (FBOExtensions::instance(state.getContextID(), true)->glGenerateMipmapEXT) + if (FBOExtensions::instance(state.getContextID(), true)->glGenerateMipmap) { return GENERATE_MIPMAP; } @@ -2232,6 +2235,7 @@ Texture::GenerateMipmapMode Texture::mipmapBeforeTexImage(const State& state, bo glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); return GENERATE_MIPMAP_TEX_PARAMETER; +#endif } return GENERATE_MIPMAP_NONE; } @@ -2240,22 +2244,22 @@ void Texture::mipmapAfterTexImage(State& state, GenerateMipmapMode beforeResult) { switch (beforeResult) { - case GENERATE_MIPMAP: + case GENERATE_MIPMAP: { unsigned int contextID = state.getContextID(); TextureObject* textureObject = getTextureObject(contextID); if (textureObject) { osg::FBOExtensions* fbo_ext = osg::FBOExtensions::instance(contextID, true); - fbo_ext->glGenerateMipmapEXT(textureObject->target()); + fbo_ext->glGenerateMipmap(textureObject->target()); } + break; } - break; - case GENERATE_MIPMAP_TEX_PARAMETER: - glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_FALSE); - break; - case GENERATE_MIPMAP_NONE: - break; + case GENERATE_MIPMAP_TEX_PARAMETER: + glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_FALSE); + break; + case GENERATE_MIPMAP_NONE: + break; } } @@ -2282,10 +2286,10 @@ void Texture::generateMipmap(State& state) const osg::FBOExtensions* fbo_ext = osg::FBOExtensions::instance(state.getContextID(), true); // check if the function is supported - if (fbo_ext->glGenerateMipmapEXT) + if (fbo_ext->glGenerateMipmap) { textureObject->bind(); - fbo_ext->glGenerateMipmapEXT(textureObject->target()); + fbo_ext->glGenerateMipmap(textureObject->target()); // inform state that this texture is the current one bound. state.haveAppliedTextureAttribute(state.getActiveTextureUnit(), this); diff --git a/src/osg/TextureCubeMap.cpp b/src/osg/TextureCubeMap.cpp index 0e40c9bbe..45d4385b6 100644 --- a/src/osg/TextureCubeMap.cpp +++ b/src/osg/TextureCubeMap.cpp @@ -484,7 +484,8 @@ void TextureCubeMap::Extensions::lowestCommonDenominator(const Extensions& rhs) void TextureCubeMap::Extensions::setupGLExtensions(unsigned int contextID) { - _isCubeMapSupported = isGLExtensionSupported(contextID,"GL_ARB_texture_cube_map") || + _isCubeMapSupported = OSG_GLES2_FEATURES || OSG_GL3_FEATURES || + isGLExtensionSupported(contextID,"GL_ARB_texture_cube_map") || isGLExtensionSupported(contextID,"GL_EXT_texture_cube_map") || strncmp((const char*)glGetString(GL_VERSION),"1.3",3)>=0;; } diff --git a/src/osg/TextureRectangle.cpp b/src/osg/TextureRectangle.cpp index cf99212c6..1e3eac392 100644 --- a/src/osg/TextureRectangle.cpp +++ b/src/osg/TextureRectangle.cpp @@ -147,9 +147,11 @@ void TextureRectangle::setImage(Image* image) void TextureRectangle::apply(State& state) const { - static bool s_rectangleSupported = isGLExtensionSupported(state.getContextID(),"GL_ARB_texture_rectangle") - || isGLExtensionSupported(state.getContextID(),"GL_EXT_texture_rectangle") - || isGLExtensionSupported(state.getContextID(),"GL_NV_texture_rectangle"); + static bool s_rectangleSupported = + OSG_GL3_FEATURES || + isGLExtensionSupported(state.getContextID(),"GL_ARB_texture_rectangle") || + isGLExtensionSupported(state.getContextID(),"GL_EXT_texture_rectangle") || + isGLExtensionSupported(state.getContextID(),"GL_NV_texture_rectangle"); if (!s_rectangleSupported) { diff --git a/src/osgUtil/RenderStage.cpp b/src/osgUtil/RenderStage.cpp index 1f83bcb37..0e3f7be5f 100644 --- a/src/osgUtil/RenderStage.cpp +++ b/src/osgUtil/RenderStage.cpp @@ -461,7 +461,7 @@ void RenderStage::runCameraSetUp(osg::RenderInfo& renderInfo) fbo->apply(state); // If no color attachment make sure to set glDrawBuffer/glReadBuffer to none - // otherwise glCheckFramebufferStatusEXT will fail + // otherwise glCheckFramebufferStatus will fail // It has to be done after call to glBindFramebuffer (fbo->apply) // and before call to glCheckFramebufferStatus if ( !colorAttached ) @@ -474,14 +474,14 @@ void RenderStage::runCameraSetUp(osg::RenderInfo& renderInfo) #endif } - GLenum status = fbo_ext->glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); + GLenum status = fbo_ext->glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT); if (status != GL_FRAMEBUFFER_COMPLETE_EXT) { osg::notify(osg::NOTICE)<<"RenderStage::runCameraSetUp(), FBO setup failed, FBO status= 0x"<glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + fbo_ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0); fbo = 0; // clean up. @@ -503,7 +503,7 @@ void RenderStage::runCameraSetUp(osg::RenderInfo& renderInfo) { fbo_multisample->apply(state); - GLenum status = fbo_ext->glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); + GLenum status = fbo_ext->glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT); if (status != GL_FRAMEBUFFER_COMPLETE_EXT) { @@ -890,7 +890,7 @@ void RenderStage::drawInner(osg::RenderInfo& renderInfo,RenderLeaf*& previous, b { if ( fbo_ext ) { - GLenum fbstatus = fbo_ext->glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); + GLenum fbstatus = fbo_ext->glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT); if ( fbstatus != GL_FRAMEBUFFER_COMPLETE_EXT ) { osg::notify(osg::NOTICE)<<"RenderStage::drawInner(,) FBO status = 0x"<glBlitFramebufferEXT) + if (fbo_supported && _resolveFbo.valid() && fbo_ext->glBlitFramebuffer) { GLbitfield blitMask = 0; @@ -935,7 +935,7 @@ void RenderStage::drawInner(osg::RenderInfo& renderInfo,RenderLeaf*& previous, b // Note that (with nvidia 175.16 windows drivers at least) if the read // framebuffer is multisampled then the dimension arguments are ignored // and the whole framebuffer is always copied. - fbo_ext->glBlitFramebufferEXT( + fbo_ext->glBlitFramebuffer( 0, 0, static_cast(_viewport->width()), static_cast(_viewport->height()), 0, 0, static_cast(_viewport->width()), static_cast(_viewport->height()), blitMask, GL_NEAREST); @@ -1003,7 +1003,7 @@ void RenderStage::drawInner(osg::RenderInfo& renderInfo,RenderLeaf*& previous, b if (getDisableFboAfterRender()) { // switch off the frame buffer object - fbo_ext->glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + fbo_ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0); } doCopyTexture = true; @@ -1021,7 +1021,7 @@ void RenderStage::drawInner(osg::RenderInfo& renderInfo,RenderLeaf*& previous, b { state.setActiveTextureUnit(0); state.applyTextureAttribute(0, itr->second._texture.get()); - fbo_ext->glGenerateMipmapEXT(itr->second._texture->getTextureTarget()); + fbo_ext->glGenerateMipmap(itr->second._texture->getTextureTarget()); } } }