Misc: Fix wrong description & DEBUG_GLX_ERR
- Fix description of "opengl" VSync. - Add DEBUG_GLX_ERR to check for OpenGL errors. - Update man page.
This commit is contained in:
@ -4175,7 +4175,7 @@ usage(void) {
|
||||
#else
|
||||
#define WARNING
|
||||
#endif
|
||||
" opengl = Try to VSync with SGI_swap_control OpenGL extension. Only\n"
|
||||
" opengl = Try to VSync with SGI_video_sync OpenGL extension. Only\n"
|
||||
" work on some drivers." WARNING"\n"
|
||||
" opengl-oml = Try to VSync with OML_sync_control OpenGL extension.\n"
|
||||
" Only work on some drivers. Experimental." WARNING"\n"
|
||||
|
36
src/opengl.c
36
src/opengl.c
@ -238,6 +238,10 @@ glx_init_blur(session_t *ps) {
|
||||
|
||||
#undef P_GET_UNIFM_LOC
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
glx_check_err(ps);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
#else
|
||||
printf_errf("(): GLSL support not compiled in. Cannot do blur with GLX backend.");
|
||||
@ -515,6 +519,10 @@ glx_bind_pixmap(session_t *ps, glx_texture_t **pptex, Pixmap pixmap,
|
||||
glBindTexture(ptex->target, 0);
|
||||
glDisable(ptex->target);
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
glx_check_err(ps);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -535,6 +543,10 @@ glx_release_pixmap(session_t *ps, glx_texture_t *ptex) {
|
||||
glXDestroyPixmap(ps->dpy, ptex->glpixmap);
|
||||
ptex->glpixmap = 0;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
glx_check_err(ps);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@ -585,6 +597,10 @@ glx_paint_pre(session_t *ps, XserverRegion *preg) {
|
||||
free_region(ps, &all_damage_last);
|
||||
|
||||
glx_set_clip(ps, *preg, NULL);
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
glx_check_err(ps);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@ -664,6 +680,10 @@ glx_set_clip(session_t *ps, XserverRegion reg, const reg_data_t *pcache_reg) {
|
||||
}
|
||||
|
||||
cxfree(rects_free);
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
glx_check_err(ps);
|
||||
#endif
|
||||
}
|
||||
|
||||
#define P_PAINTREG_START() \
|
||||
@ -783,6 +803,10 @@ glx_blur_dst(session_t *ps, int dx, int dy, int width, int height, float z,
|
||||
glDeleteTextures(1, &tex_scr);
|
||||
glDisable(tex_tgt);
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
glx_check_err(ps);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -816,6 +840,10 @@ glx_dim_dst(session_t *ps, int dx, int dy, int width, int height, float z,
|
||||
glColor4f(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
glx_check_err(ps);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -999,6 +1027,10 @@ glx_render(session_t *ps, const glx_texture_t *ptex,
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
}
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
glx_check_err(ps);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1029,6 +1061,10 @@ glx_swap_copysubbuffermesa(session_t *ps, XserverRegion reg) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
glx_check_err(ps);
|
||||
#endif
|
||||
|
||||
cxfree(rects);
|
||||
}
|
||||
|
||||
|
48
src/opengl.h
48
src/opengl.h
@ -12,6 +12,54 @@
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#ifdef DEBUG_GLX_ERR
|
||||
|
||||
/**
|
||||
* Get a textual representation of an OpenGL error.
|
||||
*/
|
||||
static inline const char *
|
||||
glx_dump_err_str(GLenum err) {
|
||||
switch (err) {
|
||||
CASESTRRET(GL_NO_ERROR);
|
||||
CASESTRRET(GL_INVALID_ENUM);
|
||||
CASESTRRET(GL_INVALID_VALUE);
|
||||
CASESTRRET(GL_INVALID_OPERATION);
|
||||
CASESTRRET(GL_INVALID_FRAMEBUFFER_OPERATION);
|
||||
CASESTRRET(GL_OUT_OF_MEMORY);
|
||||
CASESTRRET(GL_STACK_UNDERFLOW);
|
||||
CASESTRRET(GL_STACK_OVERFLOW);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for GLX error.
|
||||
*
|
||||
* http://blog.nobel-joergensen.com/2013/01/29/debugging-opengl-using-glgeterror/
|
||||
*/
|
||||
static inline void
|
||||
glx_check_err_(session_t *ps, const char *func, int line) {
|
||||
if (!ps->glx_context) return;
|
||||
|
||||
GLenum err = GL_NO_ERROR;
|
||||
|
||||
while (GL_NO_ERROR != (err = glGetError())) {
|
||||
print_timestamp(ps);
|
||||
printf("%s():%d: GLX error ", func, line);
|
||||
const char *errtext = glx_dump_err_str(err);
|
||||
if (errtext) {
|
||||
printf_dbg("%s\n", errtext);
|
||||
}
|
||||
else {
|
||||
printf_dbg("%d\n", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define glx_check_err(ps) glx_check_err_(ps, __func__, __LINE__)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Check if a word is in string.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user