|
@@ -2225,8 +2225,6 @@ namespace bgfx { namespace gl
|
|
|
m_glslVersion = getGLString(GL_SHADING_LANGUAGE_VERSION);
|
|
m_glslVersion = getGLString(GL_SHADING_LANGUAGE_VERSION);
|
|
|
|
|
|
|
|
{
|
|
{
|
|
|
- int32_t glVersion = 0;
|
|
|
|
|
-
|
|
|
|
|
if (BX_ENABLED(BX_PLATFORM_EMSCRIPTEN) )
|
|
if (BX_ENABLED(BX_PLATFORM_EMSCRIPTEN) )
|
|
|
{
|
|
{
|
|
|
int32_t majorGlVersion = 0;
|
|
int32_t majorGlVersion = 0;
|
|
@@ -2240,15 +2238,16 @@ namespace bgfx { namespace gl
|
|
|
|
|
|
|
|
bx::fromString(&majorGlVersion, version);
|
|
bx::fromString(&majorGlVersion, version);
|
|
|
bx::fromString(&minorGlVersion, version + 2);
|
|
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);
|
|
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)
|
|
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
|
|
|| 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
|
|
|| s_extension[Extension::EXT_shadow_samplers].m_supported
|
|
|
;
|
|
;
|
|
|
|
|
|
|
@@ -3350,8 +3349,7 @@ namespace bgfx { namespace gl
|
|
|
, at[0].mip
|
|
, 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) );
|
|
GL_CHECK(glReadBuffer(GL_COLOR_ATTACHMENT0) );
|
|
|
}
|
|
}
|
|
@@ -3618,7 +3616,7 @@ namespace bgfx { namespace gl
|
|
|
if (!BX_ENABLED(BX_PLATFORM_OSX) )
|
|
if (!BX_ENABLED(BX_PLATFORM_OSX) )
|
|
|
{
|
|
{
|
|
|
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
|
|
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
|
|
|
- || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) )
|
|
|
|
|
|
|
+ || m_gles3 )
|
|
|
{
|
|
{
|
|
|
if (m_samplerObjectSupport)
|
|
if (m_samplerObjectSupport)
|
|
|
{
|
|
{
|
|
@@ -3819,7 +3817,7 @@ namespace bgfx { namespace gl
|
|
|
GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER, _msaa, GL_DEPTH24_STENCIL8, _width, _height) );
|
|
GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER, _msaa, GL_DEPTH24_STENCIL8, _width, _height) );
|
|
|
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_msaaBackBufferRbos[0]) );
|
|
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_STENCIL_ATTACHMENT
|
|
|
: GL_DEPTH_ATTACHMENT
|
|
: GL_DEPTH_ATTACHMENT
|
|
|
;
|
|
;
|
|
@@ -3862,7 +3860,7 @@ namespace bgfx { namespace gl
|
|
|
GL_CHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0) );
|
|
GL_CHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0) );
|
|
|
uint32_t width = m_resolution.width;
|
|
uint32_t width = m_resolution.width;
|
|
|
uint32_t height = m_resolution.height;
|
|
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_NEAREST
|
|
|
: GL_LINEAR
|
|
: GL_LINEAR
|
|
|
;
|
|
;
|
|
@@ -3913,7 +3911,7 @@ namespace bgfx { namespace gl
|
|
|
|
|
|
|
|
void invalidateCache()
|
|
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_samplerObjectSupport)
|
|
|
{
|
|
{
|
|
|
m_samplerStateCache.invalidate();
|
|
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])
|
|
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)
|
|
&& m_samplerObjectSupport)
|
|
|
{
|
|
{
|
|
|
if (0 == (BGFX_SAMPLER_INTERNAL_DEFAULT & _flags) )
|
|
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) );
|
|
GL_CHECK(glSamplerParameterf(sampler, GL_TEXTURE_MAX_ANISOTROPY_EXT, m_maxAnisotropy) );
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
|
|
|
|
|
|
|
+ if (m_gles3
|
|
|
|| m_shadowSamplersSupport)
|
|
|| m_shadowSamplersSupport)
|
|
|
{
|
|
{
|
|
|
const uint32_t cmpFunc = (_flags&BGFX_SAMPLER_COMPARE_MASK)>>BGFX_SAMPLER_COMPARE_SHIFT;
|
|
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) );
|
|
GL_CHECK(glVertexAttribDivisor(loc, 0) );
|
|
|
|
|
|
|
|
uint32_t baseVertex = _baseVertex*_layout.m_stride + _layout.m_offset[attr];
|
|
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)
|
|
&& (AttribType::Uint8 == type || AttribType::Int16 == type)
|
|
|
&& !normalized)
|
|
&& !normalized)
|
|
|
{
|
|
{
|
|
@@ -5383,7 +5381,7 @@ namespace bgfx { namespace gl
|
|
|
, _height
|
|
, _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
|
|
GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER
|
|
|
, msaaQuality
|
|
, msaaQuality
|
|
@@ -5793,7 +5791,7 @@ namespace bgfx { namespace gl
|
|
|
|
|
|
|
|
void TextureGL::setSamplerState(uint32_t _flags, const float _rgba[4])
|
|
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])
|
|
&& !s_textureFilter[m_textureFormat])
|
|
|
{
|
|
{
|
|
|
// Force point sampling when texture format doesn't support linear sampling.
|
|
// 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_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]) );
|
|
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)
|
|
|| s_extension[Extension::APPLE_texture_max_level].m_supported)
|
|
|
{
|
|
{
|
|
|
GL_CHECK(glTexParameteri(targetMsaa, GL_TEXTURE_MAX_LEVEL, numMips-1) );
|
|
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) );
|
|
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)
|
|
|| s_renderGL->m_shadowSamplersSupport)
|
|
|
{
|
|
{
|
|
|
const uint32_t cmpFunc = (flags&BGFX_SAMPLER_COMPARE_MASK)>>BGFX_SAMPLER_COMPARE_SHIFT;
|
|
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) );
|
|
GL_CHECK(glBindTexture(m_target, m_id) );
|
|
|
|
|
|
|
|
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES)
|
|
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.
|
|
// GLES2 doesn't have support for sampler object.
|
|
|
setSamplerState(flags, _palette[index]);
|
|
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
|
|
bx::write(&writer
|
|
|
, "#define lowp\n"
|
|
, "#define lowp\n"
|
|
@@ -6730,8 +6728,8 @@ namespace bgfx { namespace gl
|
|
|
|
|
|
|
|
if (0 != texture.m_rbo)
|
|
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_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER
|
|
|
, GL_DEPTH_ATTACHMENT
|
|
, GL_DEPTH_ATTACHMENT
|
|
@@ -6745,7 +6743,6 @@ namespace bgfx { namespace gl
|
|
|
) );
|
|
) );
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
-#endif
|
|
|
|
|
{
|
|
{
|
|
|
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER
|
|
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER
|
|
|
, attachment
|
|
, attachment
|
|
@@ -6801,7 +6798,7 @@ namespace bgfx { namespace gl
|
|
|
|
|
|
|
|
m_num = uint8_t(colorIdx);
|
|
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)
|
|
if (0 == colorIdx)
|
|
|
{
|
|
{
|
|
@@ -6981,7 +6978,10 @@ namespace bgfx { namespace gl
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
GL_CHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo[0]) );
|
|
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) );
|
|
GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, s_renderGL->m_msaaBackBufferFbo) );
|
|
|
}
|
|
}
|
|
|
|
|
|