Work around emscripten double-reporting GL error

This commit is contained in:
Vladimir Vukicevic
2019-06-17 20:28:52 +02:00
committed by Бранимир Караџић
parent 6838719246
commit 3d460e0445

View File

@@ -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<bx::HashMurmur2A>(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