Remove infinite loops clearing GL error flags in case something breaks

This commit is contained in:
baldurk
2015-08-05 18:47:17 +02:00
parent 32ae45d992
commit da87eaf55a
3 changed files with 30 additions and 18 deletions
+26 -10
View File
@@ -113,8 +113,8 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context)
if(gl.glGetError && gl.glGetIntegeri_v)
{
// clear all error flags.
GLenum err = gl.glGetError();
while(err != eGL_NONE) err = gl.glGetError();
GLenum err = eGL_NONE;
ClearGLErrors(gl);
GLint dummy = 0;
gl.glGetIntegeri_v(eGL_VERTEX_BINDING_BUFFER, 0, &dummy);
@@ -177,8 +177,8 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context)
if(gl.glGetIntegerv && gl.glGetError)
{
// clear all error flags.
GLenum err = gl.glGetError();
while(err != eGL_NONE) err = gl.glGetError();
GLenum err = eGL_NONE;
ClearGLErrors(gl);
GLint dummy[2] = {0};
gl.glGetIntegerv(eGL_POLYGON_MODE, dummy);
@@ -209,8 +209,8 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context)
gl.glTexParameteri(eGL_TEXTURE_2D, eGL_TEXTURE_MAX_LEVEL, 1);
// clear all error flags.
GLenum err = gl.glGetError();
while(err != eGL_NONE) err = gl.glGetError();
GLenum err = eGL_NONE;
ClearGLErrors(gl);
gl.glCopyImageSubData(texs[0], eGL_TEXTURE_2D, 0, 0, 0, 0, texs[1], eGL_TEXTURE_2D, 0, 0, 0, 0, 1, 1, 1);
@@ -227,7 +227,7 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context)
gl.glBindTexture(eGL_TEXTURE_2D, 0);
gl.glDeleteTextures(2, texs);
while(gl.glGetError());
ClearGLErrors(gl);
//////////////////////////////////////////////////////////////////////////
// Check copying cubemaps
@@ -294,7 +294,7 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context)
gl.glBindTexture(eGL_TEXTURE_CUBE_MAP, 0);
gl.glDeleteTextures(2, texs);
while(gl.glGetError());
ClearGLErrors(gl);
}
if(gl.glGetError && gl.glGenProgramPipelines && gl.glDeleteProgramPipelines && gl.glGetProgramPipelineiv)
@@ -303,8 +303,8 @@ void DoVendorChecks(const GLHookSet &gl, GLWindowingData context)
gl.glGenProgramPipelines(1, &pipe);
// clear all error flags.
GLenum err = gl.glGetError();
while(err != eGL_NONE) err = gl.glGetError();
GLenum err = eGL_NONE;
ClearGLErrors(gl);
GLint dummy = 0;
gl.glGetProgramPipelineiv(pipe, eGL_COMPUTE_SHADER, &dummy);
@@ -514,6 +514,22 @@ GLenum ShaderEnum(size_t idx)
return eGL_NONE;
}
void ClearGLErrors(const GLHookSet &gl)
{
int i=0;
GLenum err = gl.glGetError();
while(err)
{
err = gl.glGetError();
i++;
if(i > 100)
{
RDCERR("Couldn't clear GL errors - something very wrong!");
return;
}
}
}
GLuint GetBoundVertexBuffer(const GLHookSet &gl, GLuint i)
{
GLuint buffer = 0;
+2
View File
@@ -98,6 +98,8 @@ GLenum MakeGLPrimitiveTopology(PrimitiveTopology Topo);
const char *BlendString(GLenum blendenum);
const char *SamplerString(GLenum smpenum);
void ClearGLErrors(const GLHookSet &gl);
GLuint GetBoundVertexBuffer(const GLHookSet &gl, GLuint idx);
void GetBindpointMapping(const GLHookSet &gl, GLuint curProg, int shadIdx, ShaderReflection *refl, ShaderBindpointMapping &mapping);
+2 -8
View File
@@ -2183,10 +2183,7 @@ void WrappedOpenGL::SwapBuffers(void *windowHandle)
// app (although it means we might swallow an error from before the
// SwapBuffers call, it can't be helped.
if(ctxdata.Legacy() && m_Real.glGetError)
{
GLenum err = m_Real.glGetError();
while(err) err = m_Real.glGetError();
}
ClearGLErrors(m_Real);
}
}
@@ -2449,10 +2446,7 @@ bool WrappedOpenGL::EndFrameCapture(void *dev, void *wnd)
// app (although it means we might swallow an error from before the
// SwapBuffers call, it can't be helped.
if(ctxdata.Legacy() && m_Real.glGetError)
{
GLenum err = m_Real.glGetError();
while(err) err = m_Real.glGetError();
}
ClearGLErrors(m_Real);
}
m_FrameRecord.back().frameInfo.frameNumber = m_FrameCounter+1;