#ifndef SQ_OPENGL_RENDERER_H
#define SQ_OPENGL_RENDERER_H
#if defined(macintoshSqueak)
# include "sqMacOpenGL.h"
#elif defined(WIN32)
# include "sqWin32OpenGL.h"
#elif defined(UNIX)
# include "sqUnixOpenGL.h"
#endif
#if !defined(GL_RENDERER_DEFINED)
typedef struct glRenderer {
GLint bufferRect[4];
GLint viewport[4];
} glRenderer;
#endif
struct glRenderer *glRendererFromHandle(int rendererHandle);
int glMakeCurrentRenderer(struct glRenderer *renderer);
int glSwapBuffers(struct glRenderer *renderer);
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
static int glErr = GL_NO_ERROR; /* this is only for debug purposes */
static char *glErrString(void) {
static char errString[50];
switch(glErr) {
case 0x0500: return "GL_INVALID_ENUM";
case 0x0501: return "GL_INVALID_VALUE";
case 0x0502: return "GL_INVALID_OPERATION";
case 0x0503: return "GL_STACK_OVERFLOW";
case 0x0504: return "GL_STACK_UNDERFLOW";
case 0x0505: return "GL_OUT_OF_MEMORY";
}
sprintf(errString, "error code %d", glErr);
return errString;
}
#define ERROR_CHECK_2(glFn, sqFn) \
{ if( (glErr = glGetError()) != GL_NO_ERROR) DPRINTF3D(1, (fp,"ERROR (%s): %s failed -- %s\n", sqFn, glFn, glErrString())); }
#define ERROR_CHECK_1(glFn) \
{ if( (glErr = glGetError()) != GL_NO_ERROR) DPRINTF3D(1, (fp,"ERROR (file %s, line %d): %s failed -- %s\n", __FILE__, __LINE__, glFn, glErrString())); }
#define ERROR_CHECK ERROR_CHECK_1("a GL function")
/* Verbose level for debugging purposes:
0 - print NO information ever
1 - print critical debug errors
2 - print debug warnings
3 - print extra information
4 - print per-frame statistics
5 - print information about textures, lights, materials, and primitives
6 - print information about background synchronization
10 - print information about each vertex and face
*/
extern int verboseLevel;
/* define forceFlush if we should fflush() before closing file */
#define forceFlush 1
/* Note: Print this stuff into a file in case we lock up*/
#undef DPRINTF3D
# define DPRINTF3D(vLevel, args) if(vLevel <= verboseLevel) {\
FILE *fp = fopen("Squeak3D.log", "at");\
if(fp) { fprintf args; if(forceFlush) fflush(fp); fclose(fp); }}
#endif /* sqOpenGLRenderer.h */
|