Prefer core/ARB version of FBOs instead of EXT version

This commit is contained in:
rdb 2016-04-14 21:02:35 +02:00
parent 902a314f68
commit f06f184850
2 changed files with 91 additions and 44 deletions

View File

@ -1090,7 +1090,6 @@ bind_slot_multisample(bool rb_resize, Texture **attach, RenderTexturePlane slot,
GL_RENDERBUFFER_EXT, _rbm[slot]); GL_RENDERBUFFER_EXT, _rbm[slot]);
} }
} else { } else {
Texture *Tex = attach[slot];
GLuint gl_format = GL_RGBA; GLuint gl_format = GL_RGBA;
#ifndef OPENGLES #ifndef OPENGLES
switch (slot) { switch (slot) {

View File

@ -1955,6 +1955,9 @@ reset() {
#endif #endif
#ifdef OPENGLES_1 #ifdef OPENGLES_1
_supports_framebuffer_multisample = false;
_supports_framebuffer_blit = false;
if (has_extension("GL_OES_framebuffer_object")) { if (has_extension("GL_OES_framebuffer_object")) {
_supports_framebuffer_object = true; _supports_framebuffer_object = true;
_glIsRenderbuffer = (PFNGLISRENDERBUFFEROESPROC) _glIsRenderbuffer = (PFNGLISRENDERBUFFEROESPROC)
@ -2012,9 +2015,76 @@ reset() {
_glGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv; _glGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv;
_glGenerateMipmap = glGenerateMipmap; _glGenerateMipmap = glGenerateMipmap;
#else if (is_at_least_gles_version(3, 0)) {
// TODO: add ARB3.0 version _supports_framebuffer_multisample = true;
if (has_extension("GL_EXT_framebuffer_object")) { _supports_framebuffer_blit = true;
_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)
get_extension_func("glRenderbufferStorageMultisample");
_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFEREXTPROC)
get_extension_func("glBlitFramebuffer");
} else {
if (has_extension("GL_ANGLE_framebuffer_multisample")) {
_supports_framebuffer_multisample = true;
_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC)
get_extension_func("glRenderbufferStorageMultisampleANGLE");
} else {
_supports_framebuffer_multisample = false;
}
if (has_extension("GL_ANGLE_framebuffer_blit")) {
_supports_framebuffer_blit = true;
_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERANGLEPROC)
get_extension_func("glBlitFramebufferANGLE");
} else {
_supports_framebuffer_blit = false;
}
}
#else // Desktop OpenGL case.
if (is_at_least_gl_version(3, 0) || has_extension("GL_ARB_framebuffer_object")) {
_supports_framebuffer_object = true;
_supports_framebuffer_multisample = true;
_supports_framebuffer_blit = true;
_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)
get_extension_func("glIsRenderbuffer");
_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)
get_extension_func("glBindRenderbuffer");
_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)
get_extension_func("glDeleteRenderbuffers");
_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)
get_extension_func("glGenRenderbuffers");
_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)
get_extension_func("glRenderbufferStorage");
_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)
get_extension_func("glGetRenderbufferParameteriv");
_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)
get_extension_func("glIsFramebuffer");
_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)
get_extension_func("glBindFramebuffer");
_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)
get_extension_func("glDeleteFramebuffers");
_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)
get_extension_func("glGenFramebuffers");
_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)
get_extension_func("glCheckFramebufferStatus");
_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)
get_extension_func("glFramebufferTexture1D");
_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)
get_extension_func("glFramebufferTexture2D");
_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)
get_extension_func("glFramebufferTexture3D");
_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)
get_extension_func("glFramebufferRenderbuffer");
_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)
get_extension_func("glGetFramebufferAttachmentParameteriv");
_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)
get_extension_func("glGenerateMipmap");
_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)
get_extension_func("glRenderbufferStorageMultisampleEXT");
_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)
get_extension_func("glBlitFramebuffer");
} else if (has_extension("GL_EXT_framebuffer_object")) {
_supports_framebuffer_object = true; _supports_framebuffer_object = true;
_glIsRenderbuffer = (PFNGLISRENDERBUFFEREXTPROC) _glIsRenderbuffer = (PFNGLISRENDERBUFFEREXTPROC)
get_extension_func("glIsRenderbufferEXT"); get_extension_func("glIsRenderbufferEXT");
@ -2051,14 +2121,25 @@ reset() {
_glGenerateMipmap = (PFNGLGENERATEMIPMAPEXTPROC) _glGenerateMipmap = (PFNGLGENERATEMIPMAPEXTPROC)
get_extension_func("glGenerateMipmapEXT"); get_extension_func("glGenerateMipmapEXT");
} else if (is_at_least_gl_version(3, 0)) { if (has_extension("GL_EXT_framebuffer_multisample")) {
// This case should go away when we support the ARB/3.0 version of FBOs. _supports_framebuffer_multisample = true;
_supports_framebuffer_object = false; _glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)
_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC) get_extension_func("glRenderbufferStorageMultisampleEXT");
get_extension_func("glGenerateMipmap"); } else {
_supports_framebuffer_multisample = false;
}
if (has_extension("GL_EXT_framebuffer_blit")) {
_supports_framebuffer_blit = true;
_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFEREXTPROC)
get_extension_func("glBlitFramebufferEXT");
} else {
_supports_framebuffer_blit = false;
}
} else { } else {
_supports_framebuffer_object = false; _supports_framebuffer_object = false;
_supports_framebuffer_multisample = false;
_supports_framebuffer_blit = false;
_glGenerateMipmap = NULL; _glGenerateMipmap = NULL;
} }
#endif #endif
@ -2087,49 +2168,16 @@ reset() {
} }
#endif // !OPENGLES_1 #endif // !OPENGLES_1
_supports_framebuffer_multisample = false;
if (is_at_least_gles_version(3, 0)) {
_supports_framebuffer_multisample = true;
_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)
get_extension_func("glRenderbufferStorageMultisample");
#ifdef OPENGLES
} else if (has_extension("GL_APPLE_framebuffer_multisample")) {
_supports_framebuffer_multisample = true;
_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC)
get_extension_func("glRenderbufferStorageMultisampleAPPLE");
#else
} else if (has_extension("GL_EXT_framebuffer_multisample")) {
_supports_framebuffer_multisample = true;
_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)
get_extension_func("glRenderbufferStorageMultisampleEXT");
#endif
}
#ifndef OPENGLES #ifndef OPENGLES
_supports_framebuffer_multisample_coverage_nv = false; _supports_framebuffer_multisample_coverage_nv = false;
if (has_extension("GL_NV_framebuffer_multisample_coverage")) { if (_supports_framebuffer_multisample &&
has_extension("GL_NV_framebuffer_multisample_coverage")) {
_supports_framebuffer_multisample_coverage_nv = true; _supports_framebuffer_multisample_coverage_nv = true;
_glRenderbufferStorageMultisampleCoverage = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) _glRenderbufferStorageMultisampleCoverage = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)
get_extension_func("glRenderbufferStorageMultisampleCoverageNV"); get_extension_func("glRenderbufferStorageMultisampleCoverageNV");
} }
#endif #endif
#ifndef OPENGLES_1
_supports_framebuffer_blit = false;
if (is_at_least_gles_version(3, 0)) {
_supports_framebuffer_blit = true;
_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFEREXTPROC)
get_extension_func("glBlitFramebuffer");
} else if (has_extension("GL_EXT_framebuffer_blit")) {
_supports_framebuffer_blit = true;
_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFEREXTPROC)
get_extension_func("glBlitFramebufferEXT");
}
#endif
#if defined(OPENGLES_1) #if defined(OPENGLES_1)
_glDrawBuffers = NULL; _glDrawBuffers = NULL;
_max_color_targets = 1; _max_color_targets = 1;