Blame |
Last modification |
View Log
| RSS feed
#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