[FIX] glGetError probe return value 73/14673/7
authorVitaliy Cherepanov <v.cherepanov@samsung.com>
Thu, 9 Jan 2014 13:37:44 +0000 (17:37 +0400)
committerVitaliy Cherepanov <v.cherepanov@samsung.com>
Mon, 13 Jan 2014 07:11:47 +0000 (11:11 +0400)
now glGetError function returns right value

Change-Id: I3f43b24c83388015b6567c446c59965006afe87a
Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
probe_graphics/da_gles20.h
probe_graphics/da_gles20_tizen.cpp

index fda3f82943b89b329ed513f08096e65a7ddbdd41..ffb8812a343958a751819f63795cc38093b145c4 100644 (file)
 #define AFTER_NO_PARAM(RET_TYPE, RETVAL, APITYPE, CONTEXTVALUE) \
                AFTER(RET_TYPE, RETVAL, APITYPE, CONTEXTVALUE, "", 0)
 
+#define GL_GET_ERROR()                                                 \
+       if (blockresult != 0) {                                         \
+               error = glGetError();                                   \
+       }
+
 #endif /* DA_GLES20_H_ */
 
index 251c69f982a0dbcf0d0bf5692221ee25b31fd713..9a4a8ecd4d6c32627501339d238a857e96945a2c 100644 (file)
@@ -35,6 +35,7 @@
 
 static char contextValue[256];
 static enum DaOptions _sopt = OPT_GLES;
+static __thread GLenum gl_error_external = GL_NO_ERROR;
 
 // ==================================================================
 // A 2
@@ -44,7 +45,7 @@ void glActiveTexture(GLenum texture) {
        typedef void (*methodType)(GLenum);
        BEFORE(glActiveTexture);
        glActiveTexturep(texture);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x",
              (uint64_t)(texture));
 }
@@ -53,7 +54,7 @@ void glAttachShader(GLuint program, GLuint shader) {
        typedef void (*methodType)(GLuint, GLuint);
        BEFORE(glAttachShader);
        glAttachShaderp(program, shader);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dd",
                        program, shader);
 }
@@ -66,7 +67,7 @@ void glBindAttribLocation(GLuint program, GLuint index, const char *name) {
        typedef void (*methodType)(GLuint, GLuint, const char *);
        BEFORE(glBindAttribLocation);
        glBindAttribLocationp(program, index, name);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dds",
                        program, index, name);
 }
@@ -75,7 +76,7 @@ void glBindBuffer(GLenum target, GLuint buffer) {
        typedef void (*methodType)(GLenum, GLuint);
        BEFORE(glBindBuffer);
        glBindBufferp(target, buffer);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xd",
              (uint64_t)(target), buffer);
 }
@@ -84,7 +85,7 @@ void glBindFramebuffer(GLenum target, GLuint framebuffer) {
        typedef void (*methodType)(GLenum, GLuint);
        BEFORE(glBindFramebuffer);
        glBindFramebufferp(target, framebuffer);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xd",
              (uint64_t)(target), framebuffer);
 }
@@ -93,7 +94,7 @@ void glBindRenderbuffer(GLenum target, GLuint renderbuffer) {
        typedef void (*methodType)(GLenum, GLuint);
        BEFORE(glBindRenderbuffer);
        glBindRenderbufferp(target, renderbuffer);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xd",
              (uint64_t)(target), renderbuffer);
 }
@@ -102,7 +103,7 @@ void glBindTexture(GLenum target, GLuint texture) {
        typedef void (*methodType)(GLenum, GLuint);
        BEFORE(glBindTexture);
        glBindTexturep(target, texture);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xd",
              (uint64_t)(target), texture);
 }
@@ -111,7 +112,7 @@ void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
        typedef void (*methodType)(GLclampf, GLclampf, GLclampf, GLclampf);
        BEFORE(glBlendColor);
        glBlendColorp(red, green, blue, alpha);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ffff",
                        red, green, blue, alpha);
 }
@@ -120,7 +121,7 @@ void glBlendEquation(GLenum mode) {
        typedef void (*methodType)(GLenum);
        BEFORE(glBlendEquation);
        glBlendEquationp(mode);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x",
              (uint64_t)(mode));
 }
@@ -129,7 +130,7 @@ void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {
        typedef void (*methodType)(GLenum, GLenum);
        BEFORE(glBlendEquationSeparate);
        glBlendEquationSeparatep(modeRGB, modeAlpha);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xx",
              (uint64_t)(modeRGB), (uint64_t)(modeAlpha));
 }
@@ -138,7 +139,7 @@ void glBlendFunc(GLenum sfactor, GLenum dfactor) {
        typedef void (*methodType)(GLenum, GLenum);
        BEFORE(glBlendFunc);
        glBlendFuncp(sfactor, dfactor);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xx",
              (uint64_t)(sfactor), (uint64_t)(dfactor));
 }
@@ -148,7 +149,7 @@ void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha,
        typedef void (*methodType)(GLenum, GLenum, GLenum, GLenum);
        BEFORE(glBlendFuncSeparate);
        glBlendFuncSeparatep(srcRGB, dstRGB, srcAlpha, dstAlpha);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxxx",
              (uint64_t)(srcRGB), (uint64_t)(dstRGB),
              (uint64_t)(srcAlpha), (uint64_t)(dstAlpha));
@@ -159,7 +160,7 @@ void glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data,
        typedef void (*methodType)(GLenum, GLsizeiptr, const GLvoid *, GLenum);
        BEFORE(glBufferData);
        glBufferDatap(target, size, data, usage);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxpx",
              (uint64_t)(target), (uint64_t)(size),
              voidp_to_uint64(data), (uint64_t)(usage));
@@ -170,7 +171,7 @@ void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
        typedef void (*methodType)(GLenum, GLintptr, GLsizeiptr, const GLvoid *);
        BEFORE(glBufferSubData);
        glBufferSubDatap(target, offset, size, data);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxxp",
              (uint64_t)(target), (uint64_t)(offset),
              (uint64_t)(size), voidp_to_uint64(data));
@@ -184,7 +185,7 @@ GLenum glCheckFramebufferStatus(GLenum target) {
        typedef GLenum (*methodType)(GLenum);
        BEFORE(glCheckFramebufferStatus);
        GLenum ret = glCheckFramebufferStatusp(target);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('d', ret, APITYPE_CONTEXT, "", "x",
              (uint64_t)(target));
 
@@ -195,7 +196,7 @@ void glClear(GLbitfield mask) {
        typedef void (*methodType)(GLbitfield);
        BEFORE(glClear);
        glClearp(mask);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x",
              (uint64_t)(mask));
 }
@@ -204,7 +205,7 @@ void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
        typedef void (*methodType)(GLclampf, GLclampf, GLclampf, GLclampf);
        BEFORE(glClearColor);
        glClearColorp(red, green, blue, alpha);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ffff",
                        red, green, blue, alpha);
 }
@@ -213,7 +214,7 @@ void glClearDepthf(GLclampf depth) {
        typedef void (*methodType)(GLclampf);
        BEFORE(glClearDepthf);
        glClearDepthfp(depth);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "f", depth);
 }
 
@@ -221,7 +222,7 @@ void glClearStencil(GLint s) {
        typedef void (*methodType)(GLint);
        BEFORE(glClearStencil);
        glClearStencilp(s);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "d", s);
 }
 
@@ -230,7 +231,7 @@ void glColorMask(GLboolean red, GLboolean green, GLboolean blue,
        typedef void (*methodType)(GLboolean, GLboolean, GLboolean, GLboolean);
        BEFORE(glColorMask);
        glColorMaskp(red, green, blue, alpha);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dddd",
                        red, green, blue, alpha);
 }
@@ -239,7 +240,7 @@ void glCompileShader(GLuint shader) {
        typedef void (*methodType)(GLuint);
        BEFORE(glCompileShader);
        glCompileShaderp(shader);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(shader));
 }
 
@@ -251,7 +252,7 @@ void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
        BEFORE(glCompressedTexImage2D);
        glCompressedTexImage2Dp(target, level, internalformat, width, height,
                        border, imageSize, data);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xdxddddp",
              (uint64_t)(target), level,
              (uint64_t)(internalformat), width, height, border, imageSize,
@@ -266,7 +267,7 @@ void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset,
        BEFORE(glCompressedTexSubImage2D);
        glCompressedTexSubImage2Dp(target, level, xoffset, yoffset, width, height,
                        format, imageSize, data);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xdddddxdp",
              (uint64_t)(target), level, xoffset, yoffset, width, height,
              (uint64_t)(format), imageSize, voidp_to_uint64(data));
@@ -279,7 +280,7 @@ void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat,
        BEFORE(glCopyTexImage2D);
        glCopyTexImage2Dp(target, level, internalformat, x, y, width, height,
                        border);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xdxddddd",
              (uint64_t)(target), level,
              (uint64_t)(internalformat), x, y, width, height, border);
@@ -291,7 +292,7 @@ void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset,
                        GLsizei, GLsizei);
        BEFORE(glCopyTexSubImage2D);
        glCopyTexSubImage2Dp(target, level, xoffset, yoffset, x, y, width, height);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xddddddd",
              (uint64_t)(target), level, xoffset, yoffset, x, y, width,
              height);
@@ -301,7 +302,7 @@ GLuint glCreateProgram(void) {
        typedef GLuint (*methodType)(void);
        BEFORE(glCreateProgram);
        GLuint ret = glCreateProgramp();
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER_NO_PARAM('d', ret, APITYPE_CONTEXT, "");
 
        return ret;
@@ -311,7 +312,7 @@ GLuint glCreateShader(GLenum shaderType) {
        typedef GLuint (*methodType)(GLenum);
        BEFORE(glCreateShader);
        GLuint ret = glCreateShaderp(shaderType);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('d', ret, APITYPE_CONTEXT, "", "x", (uint64_t)(shaderType));
 
        return ret;
@@ -321,7 +322,7 @@ void glCullFace(GLenum mode) {
        typedef void (*methodType)(GLenum);
        BEFORE(glCullFace);
        glCullFacep(mode);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(mode));
 }
 
@@ -333,7 +334,7 @@ void glDeleteBuffers(GLsizei n, const GLuint * buffers) {
        typedef void (*methodType)(GLsizei, const GLuint *);
        BEFORE(glDeleteBuffers);
        glDeleteBuffersp(n, buffers);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dp",
              n, voidp_to_uint64(buffers));
 }
@@ -342,7 +343,7 @@ void glDeleteFramebuffers(GLsizei n, const GLuint * framebuffers) {
        typedef void (*methodType)(GLsizei, const GLuint *);
        BEFORE(glDeleteFramebuffers);
        glDeleteFramebuffersp(n, framebuffers);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dp",
              n, voidp_to_uint64(framebuffers));
 }
@@ -351,7 +352,7 @@ void glDeleteProgram(GLuint program) {
        typedef void (*methodType)(GLuint);
        BEFORE(glDeleteProgram);
        glDeleteProgramp(program);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "d",
                        program);
 }
@@ -360,7 +361,7 @@ void glDeleteRenderbuffers(GLsizei n, const GLuint * renderbuffers) {
        typedef void (*methodType)(GLsizei, const GLuint *);
        BEFORE(glDeleteRenderbuffers);
        glDeleteRenderbuffersp(n, renderbuffers);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dp",
              n, voidp_to_uint64(renderbuffers));
 }
@@ -369,7 +370,7 @@ void glDeleteShader(GLuint shader) {
        typedef void (*methodType)(GLuint);
        BEFORE(glDeleteShader);
        glDeleteShaderp(shader);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "d", shader);
 }
 
@@ -377,7 +378,7 @@ void glDeleteTextures(GLsizei n, const GLuint * textures) {
        typedef void (*methodType)(GLsizei, const GLuint *);
        BEFORE(glDeleteTextures);
        glDeleteTexturesp(n, textures);
-       error = glGetError();
+       GL_GET_ERROR();
        if (error == GL_NO_ERROR) {
                char buf[128] = "";
                int bufP = 0;
@@ -399,7 +400,7 @@ void glDepthFunc(GLenum func) {
        typedef void (*methodType)(GLenum);
        BEFORE(glDepthFunc);
        glDepthFuncp(func);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(func));
 }
 
@@ -407,7 +408,7 @@ void glDepthMask(GLboolean flag) {
        typedef void (*methodType)(GLboolean);
        BEFORE(glDepthMask);
        glDepthMaskp(flag);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(flag));
 }
 
@@ -415,7 +416,7 @@ void glDepthRangef(GLclampf nearVal, GLclampf farVal) {
        typedef void (*methodType)(GLclampf, GLclampf);
        BEFORE(glDepthRangef);
        glDepthRangefp(nearVal, farVal);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ff",
                        nearVal, farVal);
 }
@@ -424,7 +425,7 @@ void glDetachShader(GLuint program, GLuint shader) {
        typedef void (*methodType)(GLuint, GLuint);
        BEFORE(glDetachShader);
        glDetachShaderp(program, shader);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dd",
                        program, shader);
 }
@@ -433,7 +434,7 @@ void glDisable(GLenum cap) {
        typedef void (*methodType)(GLenum);
        BEFORE(glDisable);
        glDisablep(cap);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(cap));
 }
 
@@ -441,7 +442,7 @@ void glDisableVertexAttribArray(GLuint index) {
        typedef void (*methodType)(GLuint);
        BEFORE(glDisableVertexAttribArray);
        glDisableVertexAttribArrayp(index);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "d", index);
 }
 
@@ -449,7 +450,7 @@ void glDrawArrays(GLenum mode, GLint first, GLsizei count) {
        typedef void (*methodType)(GLenum, GLint, GLsizei);
        BEFORE(glDrawArrays);
        glDrawArraysp(mode, first, count);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xdd",
              (uint64_t)(mode), first, count);
 }
@@ -459,7 +460,7 @@ void glDrawElements(GLenum mode, GLsizei count, GLenum type,
        typedef void (*methodType)(GLenum, GLsizei, GLenum, const GLvoid *);
        BEFORE(glDrawElements);
        glDrawElementsp(mode, count, type, indices);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xdxp",
              (uint64_t)(mode), count, (uint64_t)(type), indices);
 }
@@ -472,7 +473,7 @@ void glEnable(GLenum cap) {
        typedef void (*methodType)(GLenum);
        BEFORE(glEnable);
        glEnablep(cap);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(cap));
 }
 
@@ -480,7 +481,7 @@ void glEnableVertexAttribArray(GLuint index) {
        typedef void (*methodType)(GLuint);
        BEFORE(glEnableVertexAttribArray);
        glEnableVertexAttribArrayp(index);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "d", index);
 }
 
@@ -492,7 +493,7 @@ void glFinish(void) {
        typedef void (*methodType)(void);
        BEFORE(glFinish);
        glFinishp();
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER_NO_PARAM('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "");
 }
 
@@ -500,7 +501,7 @@ void glFlush(void) {
        typedef void (*methodType)(void);
        BEFORE(glFlush);
        glFlushp();
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER_NO_PARAM('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "");
 }
 
@@ -510,7 +511,7 @@ void glFramebufferRenderbuffer(GLenum target, GLenum attachment,
        BEFORE(glFramebufferRenderbuffer);
        glFramebufferRenderbufferp(target, attachment, renderbuffertarget,
                        renderbuffer);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxxd",
              (uint64_t)(target), (uint64_t)(attachment),
              (uint64_t)(renderbuffertarget), renderbuffer);
@@ -521,7 +522,7 @@ void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget,
        typedef void (*methodType)(GLenum, GLenum, GLenum, GLuint, GLint);
        BEFORE(glFramebufferTexture2D);
        glFramebufferTexture2Dp(target, attachment, textarget, texture, level);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxxdd",
              (uint64_t)(target), (uint64_t)(attachment),
              (uint64_t)(textarget), texture, level);
@@ -531,7 +532,7 @@ void glFrontFace(GLenum mode) {
        typedef void (*methodType)(GLenum);
        BEFORE(glFrontFace);
        glFrontFacep(mode);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x",
              (uint64_t)(mode));
 }
@@ -544,7 +545,7 @@ void glGenBuffers(GLsizei n, GLuint * buffers) {
        typedef void (*methodType)(GLsizei, GLuint *);
        BEFORE(glGenBuffers);
        glGenBuffersp(n, buffers);
-       error = glGetError();
+       GL_GET_ERROR();
        if (error == GL_NO_ERROR) {
                char buf[128] = "";
                int bufP = 0;
@@ -566,7 +567,7 @@ void glGenFramebuffers(GLsizei n, GLuint * framebuffers) {
        typedef void (*methodType)(GLsizei, GLuint *);
        BEFORE(glGenFramebuffers);
        glGenFramebuffersp(n, framebuffers);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dp",
              n, voidp_to_uint64(framebuffers));
 }
@@ -575,7 +576,7 @@ void glGenRenderbuffers(GLsizei n, GLuint * renderbuffers) {
        typedef void (*methodType)(GLsizei, GLuint *);
        BEFORE(glGenRenderbuffers);
        glGenRenderbuffersp(n, renderbuffers);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dp",
              n, voidp_to_uint64(renderbuffers));
 }
@@ -584,7 +585,7 @@ void glGenTextures(GLsizei n, GLuint * textures) {
        typedef void (*methodType)(GLsizei, GLuint *);
        BEFORE(glGenTextures);
        glGenTexturesp(n, textures);
-       error = glGetError();
+       GL_GET_ERROR();
        if (error == GL_NO_ERROR) {
                char buf[128] = "";
                int bufP = 0;
@@ -606,7 +607,7 @@ void glGenerateMipmap(GLenum target) {
        typedef void (*methodType)(GLenum);
        BEFORE(glGenerateMipmap);
        glGenerateMipmapp(target);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(target));
 }
 
@@ -615,7 +616,7 @@ void glGetBooleanv(GLenum pname, GLboolean * params) {
        typedef void (*methodType)(GLenum, GLboolean *);
        BEFORE(glGetBooleanv);
        glGetBooleanvp(pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(pname));
 }
 
@@ -624,7 +625,7 @@ void glGetFloatv(GLenum pname, GLfloat * params) {
        typedef void (*methodType)(GLenum, GLfloat *);
        BEFORE(glGetFloatv);
        glGetFloatvp(pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(pname));
 }
 
@@ -633,7 +634,7 @@ void glGetIntegerv(GLenum pname, GLint * params) {
        typedef void (*methodType)(GLenum, GLint *);
        BEFORE(glGetIntegerv);
        glGetIntegervp(pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "x", (uint64_t)(pname));
 }
 
@@ -644,7 +645,7 @@ void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize,
                        GLenum *, char *);
        BEFORE(glGetActiveAttrib);
        glGetActiveAttribp(program, index, bufSize, length, size, type, name);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddd",
                        program, index, bufSize);
 }
@@ -656,7 +657,7 @@ void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize,
                        GLenum *, char *);
        BEFORE(glGetActiveUniform);
        glGetActiveUniformp(program, index, bufSize, length, size, type, name);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddd",
                        program, index, bufSize);
 }
@@ -667,7 +668,7 @@ void glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei *count,
        typedef void (*methodType)(GLuint, GLsizei, GLsizei *, GLuint *);
        BEFORE(glGetAttachedShaders);
        glGetAttachedShadersp(program, maxCount, count, shaders);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dd",
                        program, maxCount);
 }
@@ -678,7 +679,7 @@ int glGetAttribLocation(GLuint program, const char* name)
        typedef int (*methodType)(GLuint , const char*);
        BEFORE(glGetAttribLocation);
        int ret = glGetAttribLocationp(program, name);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xs",
              (uint64_t)(program), name);
        return ret;
@@ -689,7 +690,7 @@ void glGetBufferParameteriv(GLenum target, GLenum value, GLint * data) {
        typedef void (*methodType)(GLenum, GLenum, GLint *);
        BEFORE(glGetBufferParameteriv);
        glGetBufferParameterivp(target, value, data);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xx",
              (uint64_t)(target), (uint64_t)(value));
 }
@@ -698,7 +699,16 @@ GLenum glGetError(void) {
        typedef GLenum (*methodType)(void);
        BEFORE(glGetError);
        GLenum ret = glGetErrorp();
-//     error = glGetError();
+
+       if (gl_error_external == GL_NO_ERROR)
+               gl_error_external = ret;
+
+       if (blockresult) {
+               //external call
+               ret = gl_error_external;
+               gl_error_external = GL_NO_ERROR;
+       }
+
        AFTER_NO_PARAM('d', ret, APITYPE_CONTEXT, "");
 
        return ret;
@@ -710,7 +720,7 @@ void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment,
        typedef void (*methodType)(GLenum, GLenum, GLenum, GLint *);
        BEFORE(glGetFramebufferAttachmentParameteriv);
        glGetFramebufferAttachmentParameterivp(target, attachment, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxx",
              (uint64_t)(target), (uint64_t)(attachment),
              (uint64_t)(pname));
@@ -722,7 +732,7 @@ void glGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length,
        typedef void (*methodType)(GLuint, GLsizei, GLsizei *, char *);
        BEFORE(glGetProgramInfoLog);
        glGetProgramInfoLogp(program, maxLength, length, infoLog);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dd",
                        program, maxLength);
 }
@@ -732,7 +742,7 @@ void glGetProgramiv(GLuint program, GLenum pname, GLint *params) {
        typedef void (*methodType)(GLuint, GLenum, GLint *);
        BEFORE(glGetProgramiv);
        glGetProgramivp(program, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dx",
              program, (uint64_t)(pname));
 }
@@ -742,7 +752,7 @@ void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params) {
        typedef void (*methodType)(GLenum, GLenum, GLint *);
        BEFORE(glGetRenderbufferParameteriv);
        glGetRenderbufferParameterivp(target, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xx",
              (uint64_t)(target), (uint64_t)(pname));
 }
@@ -753,7 +763,7 @@ void glGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length,
        typedef void (*methodType)(GLuint, GLsizei, GLsizei *, char *);
        BEFORE(glGetShaderInfoLog);
        glGetShaderInfoLogp(shader, maxLength, length, infoLog);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dd",
                        shader, maxLength);
 }
@@ -764,7 +774,7 @@ void glGetShaderPrecisionFormat(GLenum shaderType, GLenum precisionType,
        typedef void (*methodType)(GLenum, GLenum, GLint *, GLint *);
        BEFORE(glGetShaderPrecisionFormat);
        glGetShaderPrecisionFormatp(shaderType, precisionType, range, precision);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xx",
              (uint64_t)(shaderType), (uint64_t)(precisionType));
 }
@@ -775,7 +785,7 @@ void glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length,
        typedef void (*methodType)(GLuint, GLsizei, GLsizei *, char *);
        BEFORE(glGetShaderSource);
        glGetShaderSourcep(shader, bufSize, length, source);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dd",
                        shader, bufSize);
 }
@@ -785,7 +795,7 @@ void glGetShaderiv(GLuint shader, GLenum pname, GLint *params) {
        typedef void (*methodType)(GLuint, GLenum, GLint *);
        BEFORE(glGetShaderiv);
        glGetShaderivp(shader, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dx",
              shader, (uint64_t)(pname));
 }
@@ -794,7 +804,7 @@ const GLubyte* glGetString(GLenum name) {
        typedef const GLubyte* (*methodType)(GLenum);
        BEFORE(glGetString);
        const GLubyte* ret = glGetStringp(name);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('p', ret, APITYPE_CONTEXT, "", "x", (uint64_t)(name));
 
        return ret;
@@ -805,7 +815,7 @@ void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat * params) {
        typedef void (*methodType)(GLenum, GLenum, GLfloat *);
        BEFORE(glGetTexParameterfv);
        glGetTexParameterfvp(target, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xx",
              (uint64_t)(target), (uint64_t)(pname));
 }
@@ -815,7 +825,7 @@ void glGetTexParameteriv(GLenum target, GLenum pname, GLint * params) {
        typedef void (*methodType)(GLenum, GLenum, GLint *);
        BEFORE(glGetTexParameteriv);
        glGetTexParameterivp(target, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xx",
              (uint64_t)(target), (uint64_t)(pname));
 }
@@ -825,7 +835,7 @@ void glGetUniformfv(GLuint program, GLint location, GLfloat *params) {
        typedef void (*methodType)(GLuint, GLuint, GLfloat *);
        BEFORE(glGetUniformfv);
        glGetUniformfvp(program, location, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dd",
                        program, location);
 }
@@ -835,7 +845,7 @@ void glGetUniformiv(GLuint program, GLint location, GLint *params) {
        typedef void (*methodType)(GLuint, GLuint, GLint *);
        BEFORE(glGetUniformiv);
        glGetUniformivp(program, location, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dd",
                        program, location);
 }
@@ -845,7 +855,7 @@ GLint glGetUniformLocation(GLuint program, const char *name) {
        typedef GLint (*methodType)(GLuint, const char *);
        BEFORE(glGetUniformLocation);
        GLint ret = glGetUniformLocationp(program, name);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('d', ret, APITYPE_CONTEXT, "", "d", program);
 
        return ret;
@@ -856,7 +866,7 @@ void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params) {
        typedef void (*methodType)(GLuint, GLenum, GLfloat *);
        BEFORE(glGetVertexAttribfv);
        glGetVertexAttribfvp(index, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dx",
              index, (uint64_t)(pname));
 }
@@ -866,7 +876,7 @@ void glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params) {
        typedef void (*methodType)(GLuint, GLenum, GLint *);
        BEFORE(glGetVertexAttribiv);
        glGetVertexAttribivp(index, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dx",
              index, (uint64_t)(pname));
 }
@@ -876,7 +886,7 @@ void glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid **pointer) {
        typedef void (*methodType)(GLuint, GLenum, GLvoid **);
        BEFORE(glGetVertexAttribPointerv);
        glGetVertexAttribPointervp(index, pname, pointer);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dx",
              index, (uint64_t)(pname));
 }
@@ -889,7 +899,7 @@ void glHint(GLenum target, GLenum mode) {
        typedef void (*methodType)(GLenum, GLenum);
        BEFORE(glHint);
        glHintp(target, mode);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xx",
              (uint64_t)(target), (uint64_t)(mode));
 }
@@ -902,7 +912,7 @@ GLboolean glIsBuffer(GLuint buffer) {
        typedef GLboolean (*methodType)(GLuint);
        BEFORE(glIsBuffer);
        GLboolean ret = glIsBufferp(buffer);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('c', ret, APITYPE_CONTEXT, "", "d", buffer);
 
        return ret;
@@ -912,7 +922,7 @@ GLboolean glIsEnabled(GLenum cap) {
        typedef GLboolean (*methodType)(GLenum);
        BEFORE(glIsEnabled);
        GLboolean ret = glIsEnabledp(cap);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('c', ret, APITYPE_CONTEXT, "", "x", (uint64_t)(cap));
 
        return ret;
@@ -922,7 +932,7 @@ GLboolean glIsFramebuffer(GLuint framebuffer) {
        typedef GLboolean (*methodType)(GLuint);
        BEFORE(glIsFramebuffer);
        GLboolean ret = glIsFramebufferp(framebuffer);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('c', ret, APITYPE_CONTEXT, "", "d", framebuffer);
 
        return ret;
@@ -932,7 +942,7 @@ GLboolean glIsProgram(GLuint program) {
        typedef GLboolean (*methodType)(GLuint);
        BEFORE(glIsProgram);
        GLboolean ret = glIsProgramp(program);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('c', ret, APITYPE_CONTEXT, "", "d", program);
 
        return ret;
@@ -942,7 +952,7 @@ GLboolean glIsRenderbuffer(GLuint renderbuffer) {
        typedef GLboolean (*methodType)(GLuint);
        BEFORE(glIsRenderbuffer);
        GLboolean ret = glIsRenderbufferp(renderbuffer);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('c', ret, APITYPE_CONTEXT, "", "d", renderbuffer);
 
        return ret;
@@ -952,7 +962,7 @@ GLboolean glIsShader(GLuint shader) {
        typedef GLboolean (*methodType)(GLuint);
        BEFORE(glIsShader);
        GLboolean ret = glIsShaderp(shader);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('c', ret, APITYPE_CONTEXT, "", "d", shader);
 
        return ret;
@@ -962,7 +972,7 @@ GLboolean glIsTexture(GLuint texture) {
        typedef GLboolean (*methodType)(GLuint);
        BEFORE(glIsTexture);
        GLboolean ret = glIsTexturep(texture);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('c', ret, APITYPE_CONTEXT, "", "d", texture);
 
        return ret;
@@ -976,7 +986,7 @@ void glLineWidth(GLfloat width) {
        typedef void (*methodType)(GLfloat);
        BEFORE(glLineWidth);
        glLineWidthp(width);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "f", width);
 }
 
@@ -984,7 +994,7 @@ void glLinkProgram(GLuint program) {
        typedef void (*methodType)(GLuint);
        BEFORE(glLinkProgram);
        glLinkProgramp(program);
-       error = glGetError();
+       GL_GET_ERROR();
        char buf[512] = "";
        if (error == GL_NO_ERROR) {
                int bufP = 0;
@@ -1030,7 +1040,7 @@ void glPixelStorei(GLenum pname, GLint param) {
        typedef void (*methodType)(GLenum, GLint);
        BEFORE(glPixelStorei);
        glPixelStoreip(pname, param);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xd",
              (uint64_t)(pname), param);
 }
@@ -1039,7 +1049,7 @@ void glPolygonOffset(GLfloat factor, GLfloat units) {
        typedef void (*methodType)(GLfloat, GLfloat);
        BEFORE(glPolygonOffset);
        glPolygonOffsetp(factor, units);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ff",
                        factor, units);
 }
@@ -1055,7 +1065,7 @@ void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
                        GLvoid *);
        BEFORE(glReadPixels);
        glReadPixelsp(x, y, width, height, format, type, data);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "",
              "ddddxx", x, y, width, height,
              (uint64_t)(format), (uint64_t)(type));
@@ -1065,7 +1075,7 @@ void glReleaseShaderCompiler(void) {
        typedef void (*methodType)(void);
        BEFORE(glReleaseShaderCompiler);
        glReleaseShaderCompilerp();
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER_NO_PARAM('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "");
 }
 
@@ -1074,7 +1084,7 @@ void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width,
        typedef void (*methodType)(GLenum, GLenum, GLsizei, GLsizei);
        BEFORE(glRenderbufferStorage);
        glRenderbufferStoragep(target, internalformat, width, height);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxdd",
              (uint64_t)(target), (uint64_t)(internalformat),
              width, height);
@@ -1088,7 +1098,7 @@ void glSampleCoverage(GLclampf value, GLboolean invert) {
        typedef void (*methodType)(GLclampf, GLboolean);
        BEFORE(glSampleCoverage);
        glSampleCoveragep(value, invert);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "fx",
                        value, (uint64_t)(invert));
 }
@@ -1097,7 +1107,7 @@ void glScissor(GLint x, GLint y, GLsizei width, GLsizei height) {
        typedef void (*methodType)(GLint, GLint, GLsizei, GLsizei);
        BEFORE(glScissor);
        glScissorp(x, y, width, height);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dddd",
                        x, y, width, height);
 }
@@ -1109,7 +1119,7 @@ void glShaderBinary(GLsizei n, const GLuint *shaders, GLenum binaryformat,
                        GLsizei);
        BEFORE(glShaderBinary);
        glShaderBinaryp(n, shaders, binaryformat, binary, length);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "",
              "dpxpd", n, voidp_to_uint64(shaders),
              (uint64_t)(binaryformat), voidp_to_uint64(binary), length);
@@ -1121,7 +1131,7 @@ void glShaderSource(GLuint shader, GLsizei count, const char** string,
        typedef void (*methodType)(GLuint, GLsizei, const char**, const GLint*);
        BEFORE(glShaderSource);
        glShaderSourcep(shader, count, string, length);
-       error = glGetError();
+       GL_GET_ERROR();
        if (error == GL_NO_ERROR) {
                GLint length[1];
                glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, length);
@@ -1141,7 +1151,7 @@ void glStencilFunc(GLenum func, GLint ref, GLuint mask) {
        typedef void (*methodType)(GLenum, GLint, GLint);
        BEFORE(glStencilFunc);
        glStencilFuncp(func, ref, mask);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xdd",
              (uint64_t)(func), ref, mask);
 }
@@ -1150,7 +1160,7 @@ void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) {
        typedef void (*methodType)(GLenum, GLenum, GLint, GLuint);
        BEFORE(glStencilFuncSeparate);
        glStencilFuncSeparatep(face, func, ref, mask);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxdd",
              (uint64_t)(face), (uint64_t)(func), ref, mask);
 }
@@ -1159,7 +1169,7 @@ void glStencilMask(GLuint mask) {
        typedef void (*methodType)(GLuint);
        BEFORE(glStencilMask);
        glStencilMaskp(mask);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "d", mask);
 }
 
@@ -1167,7 +1177,7 @@ void glStencilMaskSeparate(GLenum face, GLuint mask) {
        typedef void (*methodType)(GLenum, GLuint);
        BEFORE(glStencilMaskSeparate);
        glStencilMaskSeparatep(face, mask);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xd",
              (uint64_t)(face), mask);
 }
@@ -1176,7 +1186,7 @@ void glStencilOp(GLenum sfail, GLenum dpfail, GLenum dppass) {
        typedef void (*methodType)(GLenum, GLenum, GLenum);
        BEFORE(glStencilOp);
        glStencilOpp(sfail, dpfail, dppass);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxx",
              (uint64_t)(sfail), (uint64_t)(dpfail),
              (uint64_t)(dppass));
@@ -1187,7 +1197,7 @@ void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail,
        typedef void (*methodType)(GLenum, GLenum, GLenum, GLenum);
        BEFORE(glStencilOpSeparate);
        glStencilOpSeparatep(face, sfail, dpfail, dppass);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxxx",
              (uint64_t)(face), (uint64_t)(sfail), (uint64_t)(dpfail),
              (uint64_t)(dppass));
@@ -1206,7 +1216,7 @@ void glTexImage2D(GLenum target, GLint level, GLenum internalformat,
        BEFORE(glTexImage2D);
        glTexImage2Dp(target, level, internalformat, width, height, border, format,
                        type, data);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xdddddxxp",
              (uint64_t)(target), level, internalformat, width, height,
              border, (uint64_t)(format), (uint64_t)(type),
@@ -1217,7 +1227,7 @@ void glTexParameterf(GLenum target, GLenum pname, GLfloat param) {
        typedef void (*methodType)(GLenum, GLenum, GLfloat);
        BEFORE(glTexParameterf);
        glTexParameterfp(target, pname, param);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxf",
              (uint64_t)(target), (uint64_t)(pname), param);
 }
@@ -1226,7 +1236,7 @@ void glTexParameterfv(GLenum target, GLenum pname, const GLfloat * params) {
        typedef void (*methodType)(GLenum, GLenum, const GLfloat *);
        BEFORE(glTexParameterfv);
        glTexParameterfvp(target, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        if(error == GL_NO_ERROR) {
                char param0[8];
                sprintf(param0, "%x", (GLenum)params[0]);
@@ -1244,7 +1254,7 @@ void glTexParameteri(GLenum target, GLenum pname, GLint param) {
        typedef void (*methodType)(GLenum, GLenum, GLint);
        BEFORE(glTexParameteri);
        glTexParameterip(target, pname, param);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxx",
              (uint64_t)(target), (uint64_t)(pname),
              (uint64_t)(param));
@@ -1254,7 +1264,7 @@ void glTexParameteriv(GLenum target, GLenum pname, const GLint * params) {
        typedef void (*methodType)(GLenum, GLenum, const GLint *);
        BEFORE(glTexParameteriv);
        glTexParameterivp(target, pname, params);
-       error = glGetError();
+       GL_GET_ERROR();
        if(error == GL_NO_ERROR) {
                char param0[8];
                sprintf(param0, "%x", (GLenum)params[0]);
@@ -1277,7 +1287,7 @@ void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
        BEFORE(glTexSubImage2D);
        glTexSubImage2Dp(target, level, xoffset, yoffset, width, height, format, type,
                        data);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "",
              "xdddddxxp",
              (uint64_t)(target), level, xoffset, yoffset, width, height,
@@ -1292,7 +1302,7 @@ void glUniform1f(GLint location, GLfloat v0) {
        typedef void (*methodType)(GLint, GLfloat);
        BEFORE(glUniform1f);
        glUniform1fp(location, v0);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "df",
                        location, v0);
 }
@@ -1301,7 +1311,7 @@ void glUniform2f(GLint location, GLfloat v0, GLfloat v1) {
        typedef void (*methodType)(GLint, GLfloat, GLfloat);
        BEFORE(glUniform2f);
        glUniform2fp(location, v0, v1);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dff",
                        location, v0, v1);
 }
@@ -1310,7 +1320,7 @@ void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {
        typedef void (*methodType)(GLint, GLfloat, GLfloat, GLfloat);
        BEFORE(glUniform3f);
        glUniform3fp(location, v0, v1, v2);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dfff",
                        location, v0, v1, v2);
 }
@@ -1320,7 +1330,7 @@ void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2,
        typedef void (*methodType)(GLint, GLfloat, GLfloat, GLfloat, GLfloat);
        BEFORE(glUniform4f);
        glUniform4fp(location, v0, v1, v2, v3);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "",
                        "dffff", location, v0, v1, v2, v3);
 }
@@ -1329,7 +1339,7 @@ void glUniform1fv(GLint location, GLsizei count, const GLfloat *value) {
        typedef void (*methodType)(GLint, GLsizei, const GLfloat *);
        BEFORE(glUniform1fv);
        glUniform1fvp(location, count, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
              location, count, voidp_to_uint64(value));
 }
@@ -1338,7 +1348,7 @@ void glUniform2fv(GLint location, GLsizei count, const GLfloat *value) {
        typedef void (*methodType)(GLint, GLsizei, const GLfloat *);
        BEFORE(glUniform2fv);
        glUniform2fvp(location, count, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
              location, count, voidp_to_uint64(value));
 }
@@ -1347,7 +1357,7 @@ void glUniform3fv(GLint location, GLsizei count, const GLfloat *value) {
        typedef void (*methodType)(GLint, GLsizei, const GLfloat *);
        BEFORE(glUniform3fv);
        glUniform3fvp(location, count, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
              location, count, voidp_to_uint64(value));
 }
@@ -1356,7 +1366,7 @@ void glUniform4fv(GLint location, GLsizei count, const GLfloat *value) {
        typedef void (*methodType)(GLint, GLsizei, const GLfloat *);
        BEFORE(glUniform4fv);
        glUniform4fvp(location, count, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
              location, count, voidp_to_uint64(value));
 }
@@ -1365,7 +1375,7 @@ void glUniform1i(GLint location, GLint v0) {
        typedef void (*methodType)(GLint, GLint);
        BEFORE(glUniform1i);
        glUniform1ip(location, v0);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dd",
                        location, v0);
 }
@@ -1374,7 +1384,7 @@ void glUniform2i(GLint location, GLint v0, GLint v1) {
        typedef void (*methodType)(GLint, GLint, GLint);
        BEFORE(glUniform2i);
        glUniform2ip(location, v0, v1);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddd",
                        location, v0, v1);
 }
@@ -1383,7 +1393,7 @@ void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) {
        typedef void (*methodType)(GLint, GLint, GLint, GLint);
        BEFORE(glUniform3i);
        glUniform3ip(location, v0, v1, v2);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dddd",
                        location, v0, v1, v2);
 }
@@ -1392,7 +1402,7 @@ void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {
        typedef void (*methodType)(GLint, GLint, GLint, GLint, GLint);
        BEFORE(glUniform4i);
        glUniform4ip(location, v0, v1, v2, v3);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "",
                        "ddddd", location, v0, v1, v2, v3);
 }
@@ -1401,7 +1411,7 @@ void glUniform1iv(GLint location, GLsizei count, const GLint *value) {
        typedef void (*methodType)(GLint, GLsizei, const GLint *);
        BEFORE(glUniform1iv);
        glUniform1ivp(location, count, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
              location, count, voidp_to_uint64(value));
 }
@@ -1410,7 +1420,7 @@ void glUniform2iv(GLint location, GLsizei count, const GLint *value) {
        typedef void (*methodType)(GLint, GLsizei, const GLint *);
        BEFORE(glUniform2iv);
        glUniform2ivp(location, count, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
              location, count, voidp_to_uint64(value));
 }
@@ -1419,7 +1429,7 @@ void glUniform3iv(GLint location, GLsizei count, const GLint *value) {
        typedef void (*methodType)(GLint, GLsizei, const GLint *);
        BEFORE(glUniform3iv);
        glUniform3ivp(location, count, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
              location, count, voidp_to_uint64(value));
 }
@@ -1429,7 +1439,7 @@ void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose,
        typedef void (*methodType)(GLint, GLsizei, GLboolean, const GLfloat *);
        BEFORE(glUniformMatrix2fv);
        glUniformMatrix2fvp(location, count, transpose, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxp",
              location, count, (uint64_t)(transpose), voidp_to_uint64(value));
 }
@@ -1439,7 +1449,7 @@ void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose,
        typedef void (*methodType)(GLint, GLsizei, GLboolean, const GLfloat *);
        BEFORE(glUniformMatrix3fv);
        glUniformMatrix3fvp(location, count, transpose, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxp",
              location, count, (uint64_t)(transpose), voidp_to_uint64(value));
 }
@@ -1449,7 +1459,7 @@ void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose,
        typedef void (*methodType)(GLint, GLsizei, GLboolean, const GLfloat *);
        BEFORE(glUniformMatrix4fv);
        glUniformMatrix4fvp(location, count, transpose, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxp",
              location, count, (uint64_t)(transpose), voidp_to_uint64(value));
 }
@@ -1458,7 +1468,7 @@ void glUniform4iv(GLint location, GLsizei count, const GLint *value) {
        typedef void (*methodType)(GLint, GLsizei, const GLint *);
        BEFORE(glUniform4iv);
        glUniform4ivp(location, count, value);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
              location, count, voidp_to_uint64(value));
 }
@@ -1467,7 +1477,7 @@ void glUseProgram(GLuint program) {
        typedef void (*methodType)(GLuint);
        BEFORE(glUseProgram);
        glUseProgramp(program);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "d",
                        program);
 }
@@ -1480,7 +1490,7 @@ void glValidateProgram(GLuint program) {
        typedef void (*methodType)(GLuint);
        BEFORE(glValidateProgram);
        glValidateProgramp(program);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "d",
                        program);
 }
@@ -1494,7 +1504,7 @@ void glVertexAttrib1f(GLuint index, GLfloat v0) {
        glGetVertexAttribfv(index, GL_CURRENT_VERTEX_ATTRIB, cv);
        sprintf(contextValue, "%f,%f,%f,%f", cv[0], cv[1], cv[2], cv[3]);
 
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, contextValue,
                        "df", index, v0);
 }
@@ -1508,7 +1518,7 @@ void glVertexAttrib2f(GLuint index, GLfloat v0, GLfloat v1) {
        glGetVertexAttribfv(index, GL_CURRENT_VERTEX_ATTRIB, cv);
        sprintf(contextValue, "%f,%f,%f,%f", cv[0], cv[1], cv[2], cv[3]);
 
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, contextValue,
                        "dff", index, v0, v1);
 }
@@ -1522,7 +1532,7 @@ void glVertexAttrib3f(GLuint index, GLfloat v0, GLfloat v1, GLfloat v2) {
        glGetVertexAttribfv(index, GL_CURRENT_VERTEX_ATTRIB, cv);
        sprintf(contextValue, "%f,%f,%f,%f", cv[0], cv[1], cv[2], cv[3]);
 
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, contextValue,
                        "dfff", index, v0, v1, v2);
 }
@@ -1537,7 +1547,7 @@ void glVertexAttrib4f(GLuint index, GLfloat v0, GLfloat v1, GLfloat v2,
        glGetVertexAttribfv(index, GL_CURRENT_VERTEX_ATTRIB, cv);
        sprintf(contextValue, "%f,%f,%f,%f", cv[0], cv[1], cv[2], cv[3]);
 
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, contextValue,
                        "dffff", index, v0, v1, v2, v3);
 }
@@ -1551,7 +1561,7 @@ void glVertexAttrib1fv(GLuint index, const GLfloat *v) {
        glGetVertexAttribfv(index, GL_CURRENT_VERTEX_ATTRIB, cv);
        sprintf(contextValue, "%f,%f,%f,%f", cv[0], cv[1], cv[2], cv[3]);
 
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, contextValue,
              "dp", index, voidp_to_uint64(v));
 }
@@ -1565,7 +1575,7 @@ void glVertexAttrib2fv(GLuint index, const GLfloat *v) {
        glGetVertexAttribfv(index, GL_CURRENT_VERTEX_ATTRIB, cv);
        sprintf(contextValue, "%f,%f,%f,%f", cv[0], cv[1], cv[2], cv[3]);
 
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, contextValue,
              "dp", index, voidp_to_uint64(v));
 }
@@ -1579,7 +1589,7 @@ void glVertexAttrib3fv(GLuint index, const GLfloat *v) {
        glGetVertexAttribfv(index, GL_CURRENT_VERTEX_ATTRIB, cv);
        sprintf(contextValue, "%f,%f,%f,%f", cv[0], cv[1], cv[2], cv[3]);
 
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, contextValue,
              "dp", index, voidp_to_uint64(v));
 }
@@ -1592,7 +1602,7 @@ void glVertexAttrib4fv(GLuint index, const GLfloat *v) {
        glGetVertexAttribfv(index, GL_CURRENT_VERTEX_ATTRIB, cv);
        sprintf(contextValue, "%f,%f,%f,%f", cv[0], cv[1], cv[2], cv[3]);
 
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, contextValue,
              "dp", index, voidp_to_uint64(v));
 }
@@ -1603,7 +1613,7 @@ void glVertexAttribPointer(GLuint index, GLint size, GLenum type,
                        const GLvoid *);
        BEFORE(glVertexAttribPointer);
        glVertexAttribPointerp(index, size, type, normalized, stride, pointer);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxxdp",
              index, size, (uint64_t)(type), (uint64_t)(normalized),
              stride, voidp_to_uint64(pointer));
@@ -1613,7 +1623,7 @@ void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
        typedef void (*methodType)(GLint, GLint, GLsizei, GLsizei);
        BEFORE(glViewport);
        glViewportp(x, y, width, height);
-       error = glGetError();
+       GL_GET_ERROR();
        AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dddd",
                        x, y, width, height);
 }