You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
5.8 KiB
180 lines
5.8 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
// TOGL CODE LICENSE
|
||
|
//
|
||
|
// Copyright 2011-2014 Valve Corporation
|
||
|
// All Rights Reserved.
|
||
|
//
|
||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
// of this software and associated documentation files (the "Software"), to deal
|
||
|
// in the Software without restriction, including without limitation the rights
|
||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
// copies of the Software, and to permit persons to whom the Software is
|
||
|
// furnished to do so, subject to the following conditions:
|
||
|
//
|
||
|
// The above copyright notice and this permission notice shall be included in
|
||
|
// all copies or substantial portions of the Software.
|
||
|
//
|
||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||
|
// THE SOFTWARE.
|
||
|
#ifndef GLMDEBUG_H
|
||
|
#define GLMDEBUG_H
|
||
|
|
||
|
#include "tier0/platform.h"
|
||
|
#include <stdarg.h>
|
||
|
|
||
|
// include this anywhere you need to be able to compile-out code related specifically to GLM debugging.
|
||
|
|
||
|
// we expect DEBUG to be driven by the build system so you can include this header anywhere.
|
||
|
// when we come out, GLMDEBUG will be defined to a value - 0, 1, or 2
|
||
|
// 0 means no GLM debugging is possible
|
||
|
// 1 means it's possible and resulted from being a debug build
|
||
|
// 2 means it's possible and resulted from being manually forced on for a release build
|
||
|
|
||
|
#ifdef POSIX
|
||
|
#ifndef GLMDEBUG
|
||
|
#ifdef DEBUG
|
||
|
#define GLMDEBUG 1 // normally 1 here, testing
|
||
|
#else
|
||
|
// #define GLMDEBUG 2 // don't check this in enabled..
|
||
|
#endif
|
||
|
|
||
|
#ifndef GLMDEBUG
|
||
|
#define GLMDEBUG 0
|
||
|
#endif
|
||
|
#endif
|
||
|
#else
|
||
|
#ifndef GLMDEBUG
|
||
|
#define GLMDEBUG 0
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//===============================================================================
|
||
|
// debug channels
|
||
|
|
||
|
enum EGLMDebugChannel
|
||
|
{
|
||
|
ePrintf,
|
||
|
eDebugger,
|
||
|
eGLProfiler
|
||
|
};
|
||
|
|
||
|
#if GLMDEBUG
|
||
|
// make all these prototypes disappear in non GLMDEBUG
|
||
|
void GLMDebugInitialize( bool forceReinit=false );
|
||
|
|
||
|
bool GLMDetectOGLP( void );
|
||
|
bool GLMDetectGDB( void );
|
||
|
uint GLMDetectAvailableChannels( void );
|
||
|
|
||
|
uint GLMDebugChannelMask( uint *newValue = NULL );
|
||
|
// note that GDB and OGLP can both come and go during run - forceCheck will allow that to be detected.
|
||
|
// mask returned is in form of 1<<n, n from EGLMDebugChannel
|
||
|
#endif
|
||
|
|
||
|
//===============================================================================
|
||
|
// debug message flavors
|
||
|
|
||
|
enum EGLMDebugFlavor
|
||
|
{
|
||
|
eAllFlavors, // 0
|
||
|
eDebugDump, // 1 debug dump flavor -D-
|
||
|
eTenure, // 2 code tenures > <
|
||
|
eComment, // 3 one off messages ---
|
||
|
eMatrixData, // 4 matrix data -M-
|
||
|
eShaderData, // 5 shader data (params) -S-
|
||
|
eFrameBufData, // 6 FBO data (attachments) -F-
|
||
|
eDXStuff, // 7 dxabstract spew -X-
|
||
|
eAllocations, // 8 tracking allocs and frees -A-
|
||
|
eSlowness, // 9 slow things happening (srgb flips..) -Z-
|
||
|
eDefaultFlavor, // not specified (no marker)
|
||
|
eFlavorCount
|
||
|
};
|
||
|
uint GLMDebugFlavorMask( uint *newValue = NULL );
|
||
|
|
||
|
// make all these prototypes disappear in non GLMDEBUG
|
||
|
#if GLMDEBUG
|
||
|
// these are unconditional outputs, they don't interrogate the string
|
||
|
void GLMStringOut( const char *string );
|
||
|
void GLMStringOutIndented( const char *string, int indentColumns );
|
||
|
|
||
|
#ifdef TOGL_DLL_EXPORT
|
||
|
// these will look at the string to guess its flavor: <, >, ---, -M-, -S-
|
||
|
DLL_EXPORT void GLMPrintfVA( const char *fmt, va_list vargs );
|
||
|
DLL_EXPORT void GLMPrintf( const char *fmt, ... );
|
||
|
#else
|
||
|
DLL_IMPORT void GLMPrintfVA( const char *fmt, va_list vargs );
|
||
|
DLL_IMPORT void GLMPrintf( const char *fmt, ... );
|
||
|
#endif
|
||
|
|
||
|
// these take an explicit flavor with a default value
|
||
|
void GLMPrintStr( const char *str, EGLMDebugFlavor flavor = eDefaultFlavor );
|
||
|
|
||
|
#define GLMPRINTTEXT_NUMBEREDLINES 0x80000000
|
||
|
void GLMPrintText( const char *str, EGLMDebugFlavor flavor = eDefaultFlavor, uint options=0 ); // indent each newline
|
||
|
|
||
|
int GLMIncIndent( int indentDelta );
|
||
|
int GLMGetIndent( void );
|
||
|
void GLMSetIndent( int indent );
|
||
|
|
||
|
#endif
|
||
|
|
||
|
// helpful macro if you are in a position to call GLM functions directly (i.e. you live in materialsystem / shaderapidx9)
|
||
|
#if GLMDEBUG
|
||
|
#define GLMPRINTF(args) GLMPrintf args
|
||
|
#define GLMPRINTSTR(args) GLMPrintStr args
|
||
|
#define GLMPRINTTEXT(args) GLMPrintText args
|
||
|
#else
|
||
|
#define GLMPRINTF(args)
|
||
|
#define GLMPRINTSTR(args)
|
||
|
#define GLMPRINTTEXT(args)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//===============================================================================
|
||
|
// knob twiddling
|
||
|
#ifdef TOGL_DLL_EXPORT
|
||
|
DLL_EXPORT float GLMKnob( char *knobname, float *setvalue ); // Pass NULL to not-set the knob value
|
||
|
DLL_EXPORT float GLMKnobToggle( char *knobname );
|
||
|
#else
|
||
|
DLL_IMPORT float GLMKnob( char *knobname, float *setvalue ); // Pass NULL to not-set the knob value
|
||
|
DLL_IMPORT float GLMKnobToggle( char *knobname );
|
||
|
#endif
|
||
|
|
||
|
//===============================================================================
|
||
|
// other stuff
|
||
|
|
||
|
#if GLMDEBUG
|
||
|
void GLMTriggerDebuggerBreak();
|
||
|
inline void GLMDebugger( void )
|
||
|
{
|
||
|
if (GLMDebugChannelMask() & (1<<eDebugger))
|
||
|
{
|
||
|
DebuggerBreak();
|
||
|
}
|
||
|
|
||
|
if (GLMDebugChannelMask() & (1<<eGLProfiler))
|
||
|
{
|
||
|
GLMTriggerDebuggerBreak();
|
||
|
}
|
||
|
}
|
||
|
#else
|
||
|
#define GLMDebugger() do { } while(0)
|
||
|
#endif
|
||
|
|
||
|
// helpers for CGLSetOption - no op if no profiler
|
||
|
void GLMProfilerClearTrace( void );
|
||
|
void GLMProfilerEnableTrace( bool enable );
|
||
|
|
||
|
// helpers for CGLSetParameter - no op if no profiler
|
||
|
void GLMProfilerDumpState( void );
|
||
|
|
||
|
void CheckGLError( int line );
|
||
|
|
||
|
#endif // GLMDEBUG_H
|