layer0/GraphicsUtil.cpp (87 lines of code) (raw):

#include <stdlib.h> #if !defined(_WIN32) && !defined(_WEBGL) #include <execinfo.h> #endif #ifdef _WEBGL #endif #include <iostream> #include "GraphicsUtil.h" // ----------------------------------------------------------------------------- // UTIL namespace { const int stack_frames = 12; // Prints a backtrace during runtime of the last ^ stack frames void print_trace() { #if !defined(_WIN32) && !defined(_WEBGL) void *array[stack_frames]; size_t size; char **strings; size = backtrace (array, stack_frames); strings = backtrace_symbols (array, size); printf ("Obtained %zd stack frames.\n", size); for (size_t i = 1; i < size; i++) printf ("%s\n", strings[i]); free (strings); #endif #ifdef _WEBGL #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; }