From c0729cb09baab824fbcde7fd48f4da5377f30b2c Mon Sep 17 00:00:00 2001 From: Christophe Dehais Date: Fri, 19 Nov 2021 16:26:47 +0100 Subject: [PATCH] Use m_gles3 flag more extensively (instead of compile-time ES version) (#2665) --- src/renderer_gl.cpp | 58 ++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 2166d94b6..469b9b5a0 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -2225,8 +2225,6 @@ namespace bgfx { namespace gl m_glslVersion = getGLString(GL_SHADING_LANGUAGE_VERSION); { - int32_t glVersion = 0; - if (BX_ENABLED(BX_PLATFORM_EMSCRIPTEN) ) { int32_t majorGlVersion = 0; @@ -2240,15 +2238,16 @@ namespace bgfx { namespace gl bx::fromString(&majorGlVersion, version); bx::fromString(&minorGlVersion, version + 2); - glVersion = majorGlVersion*10 + minorGlVersion; + int32_t glVersion = majorGlVersion*10 + minorGlVersion; BX_TRACE("WebGL context version %d (%d.%d).", glVersion, majorGlVersion, minorGlVersion); - } - m_gles3 = false - || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) - || (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES) && glVersion >= 30) - ; + m_gles3 = glVersion >= 30; + } + else + { + m_gles3 = BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30); + } } for (uint32_t ii = 0; ii < BX_COUNTOF(s_vendorIds); ++ii) @@ -2873,7 +2872,7 @@ namespace bgfx { namespace gl || s_extension[Extension::ARB_sampler_objects].m_supported ); - m_shadowSamplersSupport = !!(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30) + m_shadowSamplersSupport = !!(BGFX_CONFIG_RENDERER_OPENGL || m_gles3) || s_extension[Extension::EXT_shadow_samplers].m_supported ; @@ -3350,8 +3349,7 @@ namespace bgfx { namespace gl , at[0].mip ) ); - if (!BX_ENABLED(BX_PLATFORM_EMSCRIPTEN) - && !BX_ENABLED(BX_PLATFORM_IOS) ) + if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || m_gles3) { GL_CHECK(glReadBuffer(GL_COLOR_ATTACHMENT0) ); } @@ -3618,7 +3616,7 @@ namespace bgfx { namespace gl if (!BX_ENABLED(BX_PLATFORM_OSX) ) { if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) - || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) ) + || m_gles3 ) { if (m_samplerObjectSupport) { @@ -3819,7 +3817,7 @@ namespace bgfx { namespace gl GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER, _msaa, GL_DEPTH24_STENCIL8, _width, _height) ); GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_msaaBackBufferRbos[0]) ); - GLenum attachment = BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) + GLenum attachment = BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || m_gles3 ? GL_DEPTH_STENCIL_ATTACHMENT : GL_DEPTH_ATTACHMENT ; @@ -3862,7 +3860,7 @@ namespace bgfx { namespace gl GL_CHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0) ); uint32_t width = m_resolution.width; uint32_t height = m_resolution.height; - GLenum filter = BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES < 30) + GLenum filter = BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || !m_gles3 ? GL_NEAREST : GL_LINEAR ; @@ -3913,7 +3911,7 @@ namespace bgfx { namespace gl void invalidateCache() { - if ( (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) ) + if ( (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || m_gles3) && m_samplerObjectSupport) { m_samplerStateCache.invalidate(); @@ -3922,7 +3920,7 @@ namespace bgfx { namespace gl void setSamplerState(uint32_t _stage, uint32_t _numMips, uint32_t _flags, const float _rgba[4]) { - if ( (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) ) + if ( (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || m_gles3) && m_samplerObjectSupport) { if (0 == (BGFX_SAMPLER_INTERNAL_DEFAULT & _flags) ) @@ -4004,7 +4002,7 @@ namespace bgfx { namespace gl GL_CHECK(glSamplerParameterf(sampler, GL_TEXTURE_MAX_ANISOTROPY_EXT, m_maxAnisotropy) ); } - if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) + if (m_gles3 || m_shadowSamplersSupport) { const uint32_t cmpFunc = (_flags&BGFX_SAMPLER_COMPARE_MASK)>>BGFX_SAMPLER_COMPARE_SHIFT; @@ -5165,7 +5163,7 @@ namespace bgfx { namespace gl GL_CHECK(glVertexAttribDivisor(loc, 0) ); uint32_t baseVertex = _baseVertex*_layout.m_stride + _layout.m_offset[attr]; - if ( (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL >= 30) || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 31) ) + if ( (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL >= 30) || s_renderGL->m_gles3) && (AttribType::Uint8 == type || AttribType::Int16 == type) && !normalized) { @@ -5383,7 +5381,7 @@ namespace bgfx { namespace gl , _height ) ); } - else if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30) ) + else if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || s_renderGL->m_gles3) { GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER , msaaQuality @@ -5793,7 +5791,7 @@ namespace bgfx { namespace gl void TextureGL::setSamplerState(uint32_t _flags, const float _rgba[4]) { - if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES < 30) + if (!s_renderGL->m_gles3 && !s_textureFilter[m_textureFormat]) { // Force point sampling when texture format doesn't support linear sampling. @@ -5836,7 +5834,7 @@ namespace bgfx { namespace gl GL_CHECK(glTexParameteri(target, GL_TEXTURE_WRAP_S, s_textureAddress[(flags&BGFX_SAMPLER_U_MASK)>>BGFX_SAMPLER_U_SHIFT]) ); GL_CHECK(glTexParameteri(target, GL_TEXTURE_WRAP_T, s_textureAddress[(flags&BGFX_SAMPLER_V_MASK)>>BGFX_SAMPLER_V_SHIFT]) ); - if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 30) + if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || s_renderGL->m_gles3 || s_extension[Extension::APPLE_texture_max_level].m_supported) { GL_CHECK(glTexParameteri(targetMsaa, GL_TEXTURE_MAX_LEVEL, numMips-1) ); @@ -5870,7 +5868,7 @@ namespace bgfx { namespace gl GL_CHECK(glTexParameterf(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, s_renderGL->m_maxAnisotropy) ); } - if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) + if (s_renderGL->m_gles3 || s_renderGL->m_shadowSamplersSupport) { const uint32_t cmpFunc = (flags&BGFX_SAMPLER_COMPARE_MASK)>>BGFX_SAMPLER_COMPARE_SHIFT; @@ -5901,7 +5899,7 @@ namespace bgfx { namespace gl GL_CHECK(glBindTexture(m_target, m_id) ); if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES) - && BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES < 30) ) + && !s_renderGL->m_gles3) { // GLES2 doesn't have support for sampler object. setSamplerState(flags, _palette[index]); @@ -6569,7 +6567,7 @@ namespace bgfx { namespace gl ); } - if (!BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) ) + if (!s_renderGL->m_gles3) { bx::write(&writer , "#define lowp\n" @@ -6730,8 +6728,8 @@ namespace bgfx { namespace gl if (0 != texture.m_rbo) { -#if !(BGFX_CONFIG_RENDERER_OPENGL >= 30 || BGFX_CONFIG_RENDERER_OPENGLES >= 30) - if (GL_DEPTH_STENCIL_ATTACHMENT == attachment) + if (!(BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL >= 30) || s_renderGL->m_gles3) + && GL_DEPTH_STENCIL_ATTACHMENT == attachment) { GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER , GL_DEPTH_ATTACHMENT @@ -6745,7 +6743,6 @@ namespace bgfx { namespace gl ) ); } else -#endif { GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER , attachment @@ -6801,7 +6798,7 @@ namespace bgfx { namespace gl m_num = uint8_t(colorIdx); - if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL || BGFX_CONFIG_RENDERER_OPENGLES >= 31) ) + if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || s_renderGL->m_gles3 ) { if (0 == colorIdx) { @@ -6981,7 +6978,10 @@ namespace bgfx { namespace gl } GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo[0]) ); - GL_CHECK(glReadBuffer(GL_NONE) ); + if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || s_renderGL->m_gles3) + { + GL_CHECK(glReadBuffer(GL_NONE) ); + } GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, s_renderGL->m_msaaBackBufferFbo) ); }