diff options
Diffstat (limited to 'xc/extras/Mesa/src/Trace/tr_control.c')
-rw-r--r-- | xc/extras/Mesa/src/Trace/tr_control.c | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/xc/extras/Mesa/src/Trace/tr_control.c b/xc/extras/Mesa/src/Trace/tr_control.c new file mode 100644 index 000000000..ff67b15c3 --- /dev/null +++ b/xc/extras/Mesa/src/Trace/tr_control.c @@ -0,0 +1,147 @@ +#ifdef MESA_TRACE +#include "glheader.h" +#include "glapi.h" +#include "context.h" /* for _mesa_error */ +#include "mtypes.h" +#include "tr_context.h" +#include "tr_write.h" + + +void glEnableTraceMESA( GLbitfield mask ) +{ + trace_context_t * tctx = trCtx(); + + tctx->traceEnableLogBits = mask; + tctx->traceEnabled = GL_TRUE; +} + + +void glDisableTraceMESA( GLbitfield mask ) +{ + /* Reset traceEnableLogBits ? */ + trCtx()->traceEnabled = GL_FALSE; +} + + +void glNewTraceMESA( GLbitfield logbits, const GLubyte * traceName ) +{ + char * newname; + GLint length; + GLcontext * ctx; + const char * defaultName = "traceGL"; + + ctx = (GLcontext *)_glapi_get_context(); + + assert(ctx); + assert(ctx->TraceCtx); + assert(ctx->TraceDispatch); + if( !ctx || /* Do we even have a context ? */ + (ctx->TraceCtx->betweenBeginEnd == GL_TRUE) || /* Are we currently between glBegin and glEnd ? */ + (ctx->TraceDispatch == _glapi_get_override_dispatch(1)) ) { /* Has a trace already started ? */ + _mesa_error(ctx, GL_INVALID_OPERATION, __FUNCTION__ ); + return; + } + + /* FIXME!!! When do we free tracename after the app is finished? */ + if( ctx->TraceCtx->traceName ) { + free( ctx->TraceCtx->traceName ); + } + + length = strlen((char *)traceName) + 1; + if( length != 1 ) { + newname = (char *)malloc( length ); + strncpy( (char *)newname, (char *)traceName, length ); + } else { + length = strlen( defaultName ); + newname = (char *)malloc( length ); + strncpy( (char *)newname, defaultName, length ); + } + ctx->TraceCtx->traceName = newname; + ctx->TraceCtx->traceAttribLogBits = logbits; + + trOpenLogFile(); + trSetTraceDispatch(); +} + + +void glEndTraceMESA(void) +{ + GLcontext * ctx; + + ctx = (GLcontext *)_glapi_get_context(); + assert(ctx); + assert(ctx->TraceCtx); + assert(ctx->TraceDispatch); + + /* Do we even have a context ? */ + /* Are we currently between glBegin and glEnd ? */ + /* Are we sure the current dispatch _is_ the TraceDispatch ? */ + if (!ctx || + (ctx->TraceCtx->betweenBeginEnd == GL_TRUE) || + (ctx->TraceDispatch != _glapi_get_override_dispatch(1)) ) { + _mesa_error(ctx, GL_INVALID_OPERATION, __FUNCTION__ ); + return; + } + +#if 0 + /* Always dump the max indices */ +// But not yet... + trWriteCMD( VAR_COLORPOINTER ); + trWritei( ctx->TraceCtx->trColorPtrState.maxIndex ); + trWriteCMD( VAR_EDGEFLAGPOINTER ); + trWritei( ctx->TraceCtx->trEdgeFlagPtrState.maxIndex ); + trWriteCMD( VAR_INDEXPOINTER ); + trWritei( ctx->TraceCtx->trIndexPtrState.maxIndex ); + trWriteCMD( VAR_NORMALPOINTER ); + trWritei( ctx->TraceCtx->trNormalPtrState.maxIndex ); + trWriteCMD( VAR_TEXCOORDPOINTER ); + trWritei( ctx->TraceCtx->trTexCoordPtrState.maxIndex ); + trWriteCMD( VAR_VERTEXPOINTER ); + trWritei( ctx->TraceCtx->trVertexPtrState.maxIndex ); +#endif + + trCloseLogFile(); + trSetOriginalDispatch(); +} + + +void glTraceAssertAttribMESA( GLbitfield attribMask ) +{ +#warning TraceAssertAttrib not implemented +} + + +void glTraceCommentMESA( const GLubyte * comment ) +{ + trWriteString( (char *)comment ); +} + + +void glTraceTextureMESA( GLuint name, const GLubyte* comment ) +{ +#warning TraceTexture not implemented +} + +void glTraceListMESA( GLuint name, const GLubyte* comment ) +{ +#warning TraceList not implemented +} + + +void glTracePointerMESA( GLvoid* pointer, const GLubyte* comment ) +{ +#warning TracePointer not implemented +} + + +void glTracePointerRangeMESA( const GLvoid* first, const GLvoid* last, const GLubyte* comment ) +{ +#warning TracePointerRange not implemented +} + +#else +extern void tr_control_dummy_func(void); +void tr_control_dummy_func(void) +{ +} +#endif |