From f44818b548e715314b332fc06ef6b090c8a0528f Mon Sep 17 00:00:00 2001 From: Christophe Dehais Date: Fri, 1 Apr 2022 03:27:24 +0200 Subject: [PATCH] Import glDrawBuffers() from WEBGL_draw_buffers extension (#2667) --- src/glimports.h | 9 +++++++++ src/renderer_gl.cpp | 25 +++++++++++-------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/glimports.h b/src/glimports.h index e3bbc4404..8cc8854e4 100644 --- a/src/glimports.h +++ b/src/glimports.h @@ -30,6 +30,7 @@ #define GL_IMPORT_NV___(_optional, _proto, _func) GL_EXTENSION(_optional, _proto, _func, _func ## NV) #define GL_IMPORT_OES__(_optional, _proto, _func) GL_EXTENSION(_optional, _proto, _func, _func ## OES) #define GL_IMPORT_IMG__(_optional, _proto, _func) GL_EXTENSION(_optional, _proto, _func, _func ## IMG) +#define GL_IMPORT_WEBGL(_optional, _proto, _func) GL_EXTENSION(_optional, _proto, _func, _func ## WEBGL) #define GL_IMPORT_____x(_optional, _proto, _func) GL_EXTENSION(_optional, _proto, _func, _func ## XXXXX) #if GL_IMPORT_TYPEDEFS @@ -595,7 +596,11 @@ GL_IMPORT_____x(true, PFNGLMEMORYBARRIERPROC, glMemoryBarri GL_IMPORT_____x(true, PFNGLDISPATCHCOMPUTEPROC, glDispatchCompute); GL_IMPORT_____x(true, PFNGLDISPATCHCOMPUTEINDIRECTPROC, glDispatchComputeIndirect); +#if BX_PLATFORM_EMSCRIPTEN +GL_IMPORT_WEBGL(true, PFNGLDRAWBUFFERSPROC, glDrawBuffers); +#else GL_IMPORT_NV___(true, PFNGLDRAWBUFFERSPROC, glDrawBuffers); +#endif GL_IMPORT_NV___(true, PFNGLGENQUERIESPROC, glGenQueries); GL_IMPORT_NV___(true, PFNGLDELETEQUERIESPROC, glDeleteQueries); GL_IMPORT_NV___(true, PFNGLBEGINQUERYPROC, glBeginQuery); @@ -671,7 +676,11 @@ GL_IMPORT______(true, PFNGLMEMORYBARRIERPROC, glMemoryBarri GL_IMPORT______(true, PFNGLDISPATCHCOMPUTEPROC, glDispatchCompute); GL_IMPORT______(true, PFNGLDISPATCHCOMPUTEINDIRECTPROC, glDispatchComputeIndirect); +# if BX_PLATFORM_EMSCRIPTEN +GL_IMPORT_WEBGL(true, PFNGLDRAWBUFFERSPROC, glDrawBuffers); +# else GL_IMPORT______(true, PFNGLDRAWBUFFERSPROC, glDrawBuffers); +# endif GL_IMPORT______(true, PFNGLGENQUERIESPROC, glGenQueries); GL_IMPORT______(true, PFNGLDELETEQUERIESPROC, glDeleteQueries); GL_IMPORT______(true, PFNGLBEGINQUERYPROC, glBeginQuery); diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index d99adb053..f884bc3d2 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -6799,22 +6799,19 @@ namespace bgfx { namespace gl m_num = uint8_t(colorIdx); - if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || s_renderGL->m_gles3 ) + if (0 == colorIdx && BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) ) { - if (0 == colorIdx) - { - if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) ) - { - // When only depth is attached disable draw buffer to avoid - // GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER. - GL_CHECK(glDrawBuffer(GL_NONE) ); - } - } - else - { - GL_CHECK(glDrawBuffers(colorIdx, buffers) ); - } + // When only depth is attached disable draw buffer to avoid + // GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER. + GL_CHECK(glDrawBuffer(GL_NONE) ); + } + else if (g_caps.limits.maxFBAttachments > 0) + { + GL_CHECK(glDrawBuffers(colorIdx, buffers) ); + } + if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || s_renderGL->m_gles3) + { // Disable read buffer to avoid GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER. GL_CHECK(glReadBuffer(GL_NONE) ); }