From fefabb6c2b77b9a93a2d7be8ef75bcab6ee1d578 Mon Sep 17 00:00:00 2001 From: "konstantin.matveyev" Date: Thu, 31 Oct 2019 18:59:04 +0300 Subject: [PATCH 1/3] glFramebufferTexture2DMultisample added to GLExtensions --- include/osg/GLExtensions | 3 +++ src/osg/GLExtensions.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/include/osg/GLExtensions b/include/osg/GLExtensions index 63e46538c..0b7864515 100644 --- a/include/osg/GLExtensions +++ b/include/osg/GLExtensions @@ -656,6 +656,8 @@ class OSG_EXPORT GLExtensions : public osg::Referenced // FrameBuferObject bool isFrameBufferObjectSupported; bool isPackedDepthStencilSupported; + bool isMultisampledRenderToTextureSupported; + bool isRenderbufferMultisampleSupported() const { return glRenderbufferStorageMultisample != 0; } bool isRenderbufferMultisampleCoverageSupported() const { return glRenderbufferStorageMultisampleCoverageNV != 0; } @@ -672,6 +674,7 @@ class OSG_EXPORT GLExtensions : public osg::Referenced void (GL_APIENTRY * glFramebufferTexture1D) (GLenum, GLenum, GLenum, GLuint, GLint); void (GL_APIENTRY * glFramebufferTexture2D) (GLenum, GLenum, GLenum, GLuint, GLint); + void (GL_APIENTRY * glFramebufferTexture2DMultisample) (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); void (GL_APIENTRY * glFramebufferTexture3D) (GLenum, GLenum, GLenum, GLuint, GLint, GLint); void (GL_APIENTRY * glFramebufferTexture) (GLenum, GLenum, GLint, GLint); void (GL_APIENTRY * glFramebufferTextureLayer) (GLenum, GLenum, GLuint, GLint, GLint); diff --git a/src/osg/GLExtensions.cpp b/src/osg/GLExtensions.cpp index c64c5995f..1c3bfe1a9 100644 --- a/src/osg/GLExtensions.cpp +++ b/src/osg/GLExtensions.cpp @@ -1090,6 +1090,7 @@ GLExtensions::GLExtensions(unsigned int in_contextID): setGLExtensionFuncPtr(glFramebufferTexture1D, "glFramebufferTexture1D", "glFramebufferTexture1DEXT", "glFramebufferTexture1DOES", validContext); setGLExtensionFuncPtr(glFramebufferTexture2D, "glFramebufferTexture2D", "glFramebufferTexture2DEXT", "glFramebufferTexture2DOES", validContext); + setGLExtensionFuncPtr(glFramebufferTexture2DMultisample, "glFramebufferTexture2DMultisample", "glFramebufferTexture2DMultisampleEXT", validContext); setGLExtensionFuncPtr(glFramebufferTexture3D, "glFramebufferTexture3D", "glFramebufferTexture3DEXT", "glFramebufferTexture3DOES", validContext); setGLExtensionFuncPtr(glFramebufferTexture, "glFramebufferTexture", "glFramebufferTextureEXT", "glFramebufferTextureOES", validContext); setGLExtensionFuncPtr(glFramebufferTextureLayer, "glFramebufferTextureLayer", "glFramebufferTextureLayerEXT", "glFramebufferTextureLayerOES", validContext); @@ -1129,6 +1130,8 @@ GLExtensions::GLExtensions(unsigned int in_contextID): (isGLExtensionSupported(contextID, "GL_EXT_packed_depth_stencil")) || (isGLExtensionSupported(contextID, "GL_OES_packed_depth_stencil"))); + isMultisampledRenderToTextureSupported = validContext && isGLExtensionSupported(contextID, "GL_EXT_multisampled_render_to_texture"); + //subroutine osg::setGLExtensionFuncPtr(glGetSubroutineUniformLocation, "glGetSubroutineUniformLocation", validContext); osg::setGLExtensionFuncPtr(glGetActiveSubroutineUniformName, "glGetActiveSubroutineUniformName", validContext); From 51fee802245e1b4f3c4b4b603db096d02cf6dfff Mon Sep 17 00:00:00 2001 From: valid-ptr Date: Thu, 12 Dec 2019 18:41:23 +0300 Subject: [PATCH 2/3] glInvalidateFramebuffer added to GLExtensions --- include/osg/GLExtensions | 2 ++ src/osg/GLExtensions.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/osg/GLExtensions b/include/osg/GLExtensions index 0b7864515..aa868e9cf 100644 --- a/include/osg/GLExtensions +++ b/include/osg/GLExtensions @@ -657,6 +657,7 @@ class OSG_EXPORT GLExtensions : public osg::Referenced bool isFrameBufferObjectSupported; bool isPackedDepthStencilSupported; bool isMultisampledRenderToTextureSupported; + bool isInvalidateFramebufferSupported; bool isRenderbufferMultisampleSupported() const { return glRenderbufferStorageMultisample != 0; } bool isRenderbufferMultisampleCoverageSupported() const { return glRenderbufferStorageMultisampleCoverageNV != 0; } @@ -683,6 +684,7 @@ class OSG_EXPORT GLExtensions : public osg::Referenced void (GL_APIENTRY * glGenerateMipmap) (GLenum); void (GL_APIENTRY * glBlitFramebuffer) (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); + void (GL_APIENTRY * glInvalidateFramebuffer) (GLenum, GLsizei, const GLenum*); // GL_ARB_invalidate_subdata or GL 4.3 or GLES 3 void (GL_APIENTRY * glGetRenderbufferParameteriv) (GLenum, GLenum, GLint*); //ARB_framebuffer_no_attachments diff --git a/src/osg/GLExtensions.cpp b/src/osg/GLExtensions.cpp index 1c3bfe1a9..07078769a 100644 --- a/src/osg/GLExtensions.cpp +++ b/src/osg/GLExtensions.cpp @@ -1077,6 +1077,9 @@ GLExtensions::GLExtensions(unsigned int in_contextID): // FrameBufferObject + isMultisampledRenderToTextureSupported = validContext && isGLExtensionSupported(contextID, "GL_EXT_multisampled_render_to_texture"); + isInvalidateFramebufferSupported = validContext && (isGLExtensionSupported(contextID, "GL_ARB_invalidate_subdata") || (OSG_GLES2_FEATURES && glVersion >= 3.0) || (OSG_GL2_FEATURES && glVersion >= 4.3)); + setGLExtensionFuncPtr(glBindRenderbuffer, "glBindRenderbuffer", "glBindRenderbufferEXT", "glBindRenderbufferOES", validContext); setGLExtensionFuncPtr(glDeleteRenderbuffers, "glDeleteRenderbuffers", "glDeleteRenderbuffersEXT", "glDeleteRenderbuffersOES", validContext); setGLExtensionFuncPtr(glGenRenderbuffers, "glGenRenderbuffers", "glGenRenderbuffersEXT", "glGenRenderbuffersOES", validContext); @@ -1106,6 +1109,7 @@ GLExtensions::GLExtensions(unsigned int in_contextID): setGLExtensionFuncPtr(glGenerateMipmap, "glGenerateMipmap", "glGenerateMipmapEXT", "glGenerateMipmapOES", validContext); setGLExtensionFuncPtr(glBlitFramebuffer, "glBlitFramebuffer", "glBlitFramebufferEXT", "glBlitFramebufferOES", validContext); + setGLExtensionFuncPtr(glInvalidateFramebuffer, "glInvalidateFramebuffer", "glInvalidateFramebufferEXT", validContext); setGLExtensionFuncPtr(glGetRenderbufferParameteriv, "glGetRenderbufferParameteriv", "glGetRenderbufferParameterivEXT", "glGetRenderbufferParameterivOES", validContext); @@ -1130,8 +1134,6 @@ GLExtensions::GLExtensions(unsigned int in_contextID): (isGLExtensionSupported(contextID, "GL_EXT_packed_depth_stencil")) || (isGLExtensionSupported(contextID, "GL_OES_packed_depth_stencil"))); - isMultisampledRenderToTextureSupported = validContext && isGLExtensionSupported(contextID, "GL_EXT_multisampled_render_to_texture"); - //subroutine osg::setGLExtensionFuncPtr(glGetSubroutineUniformLocation, "glGetSubroutineUniformLocation", validContext); osg::setGLExtensionFuncPtr(glGetActiveSubroutineUniformName, "glGetActiveSubroutineUniformName", validContext); From f38fa9e9c3e3272a6edc63a1ad5834eccbde3533 Mon Sep 17 00:00:00 2001 From: "konstantin.matveyev" Date: Fri, 13 Dec 2019 19:42:30 +0300 Subject: [PATCH 3/3] GLExtensions's isInvalidateFramebufferSupported flag improved --- src/osg/GLExtensions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/osg/GLExtensions.cpp b/src/osg/GLExtensions.cpp index 07078769a..b7617bdd2 100644 --- a/src/osg/GLExtensions.cpp +++ b/src/osg/GLExtensions.cpp @@ -1078,7 +1078,7 @@ GLExtensions::GLExtensions(unsigned int in_contextID): // FrameBufferObject isMultisampledRenderToTextureSupported = validContext && isGLExtensionSupported(contextID, "GL_EXT_multisampled_render_to_texture"); - isInvalidateFramebufferSupported = validContext && (isGLExtensionSupported(contextID, "GL_ARB_invalidate_subdata") || (OSG_GLES2_FEATURES && glVersion >= 3.0) || (OSG_GL2_FEATURES && glVersion >= 4.3)); + isInvalidateFramebufferSupported = validContext && (isGLExtensionSupported(contextID, "GL_ARB_invalidate_subdata") || (OSG_GLES3_FEATURES && glVersion >= 3.0) || glVersion >= 4.3); setGLExtensionFuncPtr(glBindRenderbuffer, "glBindRenderbuffer", "glBindRenderbufferEXT", "glBindRenderbufferOES", validContext); setGLExtensionFuncPtr(glDeleteRenderbuffers, "glDeleteRenderbuffers", "glDeleteRenderbuffersEXT", "glDeleteRenderbuffersOES", validContext);