/******************************Module*Header*******************************\ * Module Name: debug.h * * OpenGL debugging macros. * * Created: 23-Oct-1993 18:33:23 * Author: Gilman Wong [gilmanw] * * Copyright (c) 1992 Microsoft Corporation * \**************************************************************************/ #ifndef __DEBUG_H__ #define __DEBUG_H__ // // LEVEL_ALLOC is the highest level of debug output. For alloc,free, etc. // LEVEL_ENTRY is for function entry. // LEVEL_INFO is for general debug information. // LEVEL_ERROR is for debug error information. // #define LEVEL_ERROR 1L #define LEVEL_INFO 2L #define LEVEL_ENTRY 8L #define LEVEL_ALLOC 10L #if DBG extern long glDebugLevel; extern ULONG glDebugFlags; #define GLDEBUG_DISABLEMCD 0x00000001 // disable MCD driver #define GLDEBUG_DISABLEPRIM 0x00000002 // disable MCD primitives #define GLDEBUG_DISABLEDCI 0x00000004 // disable DCI buffer access // These debug macros are useful for assertions. They are not controlled // by the warning level. #define WARNING(str) DbgPrint("%s(%d): " str,__FILE__,__LINE__) #define WARNING1(str,a) DbgPrint("%s(%d): " str,__FILE__,__LINE__,a) #define WARNING2(str,a,b) DbgPrint("%s(%d): " str,__FILE__,__LINE__,a,b) #define WARNING3(str,a,b,c) DbgPrint("%s(%d): " str,__FILE__,__LINE__,a,b,c) #define WARNING4(str,a,b,c,d) DbgPrint("%s(%d): " str,__FILE__,__LINE__,a,b,c,d) #define RIP(str) {WARNING(str); DebugBreak();} #define RIP1(str,a) {WARNING1(str,a); DebugBreak();} #define RIP2(str,a,b) {WARNING2(str,a,b); DebugBreak();} #define ASSERTOPENGL(expr,str) if(!(expr)) RIP(str) #define ASSERTOPENGL1(expr,str,a) if(!(expr)) RIP1(str,a) #define ASSERTOPENGL2(expr,str,a,b) if(!(expr)) RIP2(str,a,b) // // Use DBGPRINT for general purpose debug message that are NOT // controlled by the warning level. // #define DBGPRINT(str) DbgPrint("OPENGL32: " str) #define DBGPRINT1(str,a) DbgPrint("OPENGL32: " str,a) #define DBGPRINT2(str,a,b) DbgPrint("OPENGL32: " str,a,b) #define DBGPRINT3(str,a,b,c) DbgPrint("OPENGL32: " str,a,b,c) #define DBGPRINT4(str,a,b,c,d) DbgPrint("OPENGL32: " str,a,b,c,d) #define DBGPRINT5(str,a,b,c,d,e) DbgPrint("OPENGL32: " str,a,b,c,d,e) // // Use DBGLEVEL for general purpose debug messages gated by an // arbitrary warning level. // #define DBGLEVEL(n,str) if (glDebugLevel >= (n)) DBGPRINT(str) #define DBGLEVEL1(n,str,a) if (glDebugLevel >= (n)) DBGPRINT1(str,a) #define DBGLEVEL2(n,str,a,b) if (glDebugLevel >= (n)) DBGPRINT2(str,a,b) #define DBGLEVEL3(n,str,a,b,c) if (glDebugLevel >= (n)) DBGPRINT3(str,a,b,c) #define DBGLEVEL4(n,str,a,b,c,d) if (glDebugLevel >= (n)) DBGPRINT4(str,a,b,c,d) #define DBGLEVEL5(n,str,a,b,c,d,e) if (glDebugLevel >= (n)) DBGPRINT5(str,a,b,c,d,e) // // Use DBGERROR for error info. Debug string must not have arguments. // #define DBGERROR(s) if (glDebugLevel >= LEVEL_ERROR) DbgPrint("%s(%d): %s", __FILE__, __LINE__, s) // // Use DBGINFO for general debug info. Debug string must not have // arguments. // #define DBGINFO(s) if (glDebugLevel >= LEVEL_INFO) DBGPRINT(s) // // Use DBGENTRY for function entry. Debug string must not have // arguments. // #define DBGENTRY(s) if (glDebugLevel >= LEVEL_ENTRY) DBGPRINT(s) // // DBGBEGIN/DBGEND for more complex debugging output (for // example, those requiring formatting arguments--%ld, %s, etc.). // // Note: DBGBEGIN/END blocks must be bracketed by #if DBG/#endif. To // enforce this, we will not define these macros in the DBG == 0 case. // Therefore, without the #if DBG bracketing use of this macro, a // compiler (or linker) error will be generated. This is by design. // #define DBGBEGIN(n) if (glDebugLevel >= (n)) { #define DBGEND } #else #define WARNING(str) #define WARNING1(str,a) #define WARNING2(str,a,b) #define WARNING3(str,a,b,c) #define WARNING4(str,a,b,c,d) #define RIP(str) #define RIP1(str,a) #define RIP2(str,a,b) #define ASSERTOPENGL(expr,str) #define ASSERTOPENGL1(expr,str,a) #define ASSERTOPENGL2(expr,str,a,b) #define DBGPRINT(str) #define DBGPRINT1(str,a) #define DBGPRINT2(str,a,b) #define DBGPRINT3(str,a,b,c) #define DBGPRINT4(str,a,b,c,d) #define DBGPRINT5(str,a,b,c,d,e) #define DBGLEVEL(n,str) #define DBGLEVEL1(n,str,a) #define DBGLEVEL2(n,str,a,b) #define DBGLEVEL3(n,str,a,b,c) #define DBGLEVEL4(n,str,a,b,c,d) #define DBGLEVEL5(n,str,a,b,c,d,e) #define DBGERROR(s) #define DBGINFO(s) #define DBGENTRY(s) #endif /* DBG */ #endif /* __DEBUG_H__ */