From 3d460e04453be503a26cd21a92924243ee15df49 Mon Sep 17 00:00:00 2001 From: Vladimir Vukicevic Date: Mon, 17 Jun 2019 20:28:52 +0200 Subject: [PATCH] Work around emscripten double-reporting GL error --- src/renderer_gl.cpp | 47 ++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 0677580e1..a3f72e02b 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -1055,10 +1055,22 @@ namespace bgfx { namespace gl typedef void (*PostSwapBuffersFn)(uint32_t _width, uint32_t _height); + void flushGlError() + { + for (GLenum err = glGetError(); err != 0; err = glGetError() ); + } + + GLenum getGlError() + { + GLenum err = glGetError(); + flushGlError(); + return err; + } + static const char* getGLString(GLenum _name) { const char* str = (const char*)glGetString(_name); - glGetError(); // ignore error if glGetString returns NULL. + getGlError(); // ignore error if glGetString returns NULL. if (NULL != str) { return str; @@ -1070,7 +1082,7 @@ namespace bgfx { namespace gl static uint32_t getGLStringHash(GLenum _name) { const char* str = (const char*)glGetString(_name); - glGetError(); // ignore error if glGetString returns NULL. + getGlError(); // ignore error if glGetString returns NULL. if (NULL != str) { return bx::hash(str, (uint32_t)bx::strLen(str) ); @@ -1155,7 +1167,7 @@ namespace bgfx { namespace gl { GLint result = 0; glGetIntegerv(_pname, &result); - GLenum err = glGetError(); + GLenum err = getGlError(); BX_WARN(0 == err, "glGetIntegerv(0x%04x, ...) failed with GL error: 0x%04x.", _pname, err); return 0 == err ? result : 0; } @@ -1168,11 +1180,6 @@ namespace bgfx { namespace gl tfi.m_type = _type; } - void flushGlError() - { - for (GLenum err = glGetError(); err != 0; err = glGetError() ); - } - static void texSubImage( GLenum _target , GLint _level @@ -1457,7 +1464,7 @@ namespace bgfx { namespace gl uint32_t block = bx::uint32_max(4, dim); size = (block*block*bpp)/8; compressedTexImage(target, ii, internalFmt, dim, dim, 0, 0, size, data); - err |= glGetError(); + err |= getGlError(); } } else @@ -1467,7 +1474,7 @@ namespace bgfx { namespace gl dim = bx::uint32_max(1, dim); size = (dim*dim*bpp)/8; texImage(target, 0, ii, internalFmt, dim, dim, 0, 0, tfi.m_fmt, tfi.m_type, data); - err |= glGetError(); + err |= getGlError(); } } @@ -1513,7 +1520,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); , _dim , _dim ); - err = glGetError(); + err = getGlError(); } if (0 == err) @@ -1532,7 +1539,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); && _mipAutogen) { glGenerateMipmap(target); - err = glGetError(); + err = getGlError(); } } @@ -1556,7 +1563,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); GLenum err = 0; glTexStorage2D(GL_TEXTURE_2D, 1, s_imageFormat[_format], _dim, _dim); - err |= glGetError(); + err |= getGlError(); if (0 == err) { glBindImageTexture(0 @@ -1567,7 +1574,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); , GL_READ_WRITE , s_imageFormat[_format] ); - err |= glGetError(); + err |= getGlError(); } GL_CHECK(glDeleteTextures(1, &id) ); @@ -1606,7 +1613,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); glBindRenderbuffer(GL_RENDERBUFFER, 0); glDeleteRenderbuffers(1, &rbo); - GLenum err = glGetError(); + GLenum err = getGlError(); return 0 == err; } @@ -1648,7 +1655,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); , id , 0 ); - err = glGetError(); + err = getGlError(); if (0 == err) { @@ -1892,7 +1899,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); if (BX_ENABLED(BGFX_CONFIG_RENDERER_USE_EXTENSIONS) ) { const char* extensions = (const char*)glGetString(GL_EXTENSIONS); - glGetError(); // ignore error if glGetString returns NULL. + getGlError(); // ignore error if glGetString returns NULL. if (NULL != extensions) { bx::StringView ext(extensions); @@ -1912,7 +1919,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); { GLint numExtensions = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions); - glGetError(); // ignore error if glGetIntegerv returns NULL. + getGlError(); // ignore error if glGetIntegerv returns NULL. for (GLint index = 0; index < numExtensions; ++index) { @@ -2205,7 +2212,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); , 1 , &maxSamples ); - GLenum err = glGetError(); + GLenum err = getGlError(); supported |= 0 == err && maxSamples > 0 ? BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA : BGFX_CAPS_FORMAT_TEXTURE_NONE @@ -2217,7 +2224,7 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); , 1 , &maxSamples ); - err = glGetError(); + err = getGlError(); supported |= 0 == err && maxSamples > 0 ? BGFX_CAPS_FORMAT_TEXTURE_MSAA : BGFX_CAPS_FORMAT_TEXTURE_NONE