1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#include <stdlib.h>
#ifdef _WEBGL
#endif
#include <iostream>
#include "GraphicsUtil.h"
// -----------------------------------------------------------------------------
// UTIL
// Prints a backtrace during runtime of the last ^ stack frames
void print_trace();
void print_trace() {
#ifdef _WEBGL
#else
printf("Use debugger with `b %s` to get a backtrace\n", __func__);
#endif
}
bool glCheckOkay() {
int err = 0;
if ((err = glGetError()) != 0) {
printf("GL_ERROR : 0x%04x\n", err);
#if 0
print_trace();
#endif
return false;
}
return true;
}
/**
* GL debugging callback - enable with "pymol --gldebug"
*
* glDebugMessageCallback(gl_debug_proc, NULL);
* glEnable(GL_DEBUG_OUTPUT);
*/
void GLAPIENTRY gl_debug_proc(
GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar *msg,
const void *)
{
#ifdef GL_DEBUG_TYPE_ERROR
if (type == GL_DEBUG_TYPE_ERROR) {
printf("glDebug: %s\n", msg);
print_trace();
}
#endif
}
void GLAPIENTRY gl_debug_proc(
GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar *msg,
void* userParams)
{
gl_debug_proc(source, type, id, severity, length, msg,
const_cast<const void*>(userParams));
}
// Returns the size in bytes of the opengl type
size_t gl_sizeof(GLenum type){
size_t size = 1;
switch (type) {
case GL_UNSIGNED_BYTE:
case GL_BYTE:
size = 1;
break;
case GL_UNSIGNED_SHORT:
case GL_SHORT:
size = 2;
break;
case GL_UNSIGNED_INT:
case GL_INT:
case GL_FLOAT:
size = 4;
break;
default :
printf("Unsupported GL Type!");
break;
}
return size;
}
|