Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

312 lines
6.7 KiB

/******************************Module*Header*******************************\
* Module Name: glexts.c
*
* This file is for debugging tools and extensions.
*
* Created: 17-Jan-95
* Adapted from gdiexts
* Author: Drew Bliss
*
* Copyright (c) 1995 Microsoft Corporation
\**************************************************************************/
#include "precomp.c"
#pragma hdrstop
char *gaszHelp[] =
{
"=======================================================================\n"
,"GLEXTS debugger extentions:\n"
,"-----------------------------------------------------------------------\n"
,"batch -- Print current message batching\n"
,"df ptr -- Dump a float\n"
,"dd ptr -- Dump a double\n"
,"dgc ptr -- Dump a __glContext\n"
,"dlrc ptr -- Dump an LRC\n"
,"gc -- Print current context\n"
,"cgc -- Print current context (client side only)\n"
,"sgc -- Print current context (server side only)\n"
,"help -- This message\n"
,"=======================================================================\n"
,NULL
};
/******************************Public*Routine******************************\
*
* help
*
* Print help
*
* History:
* Tue Jan 17 14:11:21 1995 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
DBG_ENTRY(help)
{
char **ppsz = gaszHelp;
while (*ppsz)
{
PRINT(*ppsz++);
}
}
/******************************Public*Routine******************************\
*
* batch
*
* Print current message batching
*
* History:
* Tue Jan 31 14:03:11 1995 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
DBG_ENTRY(batch)
{
PTEB pteb;
GLCLTSHAREDSECTIONINFO gssi;
GLMSGBATCHINFO gmbi;
pteb = CURRENT_TEB();
if (pteb == NULL)
{
return;
}
if (pteb->glSectionInfo == NULL ||
pteb->glSection == NULL)
{
PRINT("No current section\n");
return;
}
if (!GM_OBJ((DWORD)pteb->glSectionInfo, gssi) ||
!GM_OBJ((DWORD)pteb->glSection, gmbi))
{
return;
}
if (IS_CSR_SERVER_THREAD())
{
PRINT("Server-side message batching:\n");
}
else
{
PRINT("Client-side message batching:\n");
}
PRINT("Section size : 0x%08lX\n", gssi.ulSectionSize);
PRINT("File mapping : 0x%p\n", gssi.hFileMap);
PRINT("Section address: 0x%p\n", gssi.pvSharedMemory);
PRINT("\n");
PRINT("Maximum offset : 0x%08lX\n", gmbi.MaximumOffset);
PRINT("First offset : 0x%08lX\n", gmbi.FirstOffset);
PRINT("Next offset : 0x%08lX\n", gmbi.NextOffset);
PRINT("Return value : 0x%08lX\n", gmbi.ReturnValue);
}
/******************************Public*Routine******************************\
*
* df
*
* Print float
*
* History:
* Tue Jan 17 14:12:19 1995 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
DBG_ENTRY(df)
{
DWORD pf;
float f;
pf = GET_EXPR(pszArguments);
if (!GM_OBJ(pf, f))
{
return;
}
PRINT("%08x %f\n", pf, f);
}
/******************************Public*Routine******************************\
*
* dd
*
* Print double
*
* History:
* Tue Jan 17 14:12:19 1995 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
DBG_ENTRY(dd)
{
DWORD pd;
double d;
pd = GET_EXPR(pszArguments);
if (!GM_OBJ(pd, d))
{
return;
}
PRINT("%08x %lf\n", pd, d);
}
/******************************Public*Routine******************************\
*
* dgc
*
* Dumps a context
*
* History:
* Thu Jan 26 13:35:47 1995 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
DBG_ENTRY(dgc)
{
DWORD pgc;
__GLcontext gc;
pgc = GET_EXPR(pszArguments);
if (!GM_OBJ(pgc, gc))
{
return;
}
PRINT("__glContext %p:\n", pgc);
PRINT("Begin mode : %d\n", gc.beginMode);
PRINT("Render mode : %d\n", gc.renderMode);
PRINT("Error : %d\n", gc.error);
PRINT("Window dimensions: %d x %d\n",
gc.constants.width, gc.constants.height);
}
/******************************Public*Routine******************************\
*
* dlrc
*
* Dump a client-side RC table entry
*
* History:
* Tue Jan 31 11:35:46 1995 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
DBG_ENTRY(dlrc)
{
LRC lrc;
DWORD plrc;
plrc = GET_EXPR(pszArguments);
if (!GM_OBJ(plrc, lrc))
{
return;
}
PRINT("Client-side RC %p\n", plrc);
PRINT("dhrc : %p\n", lrc.dhrc);
PRINT("hrc : %p\n", lrc.hrc);
PRINT("pf : %d\n", lrc.iPixelFormat);
PRINT("tid : %d\n", lrc.tidCurrent);
PRINT("hdc : %p\n", lrc.hdcCurrent);
PRINT("pglDriver: %p\n", lrc.pGLDriver);
}
/******************************Public*Routine******************************\
*
* cgc
*
* Print current client-side context
*
* History:
* Thu Jan 26 13:34:49 1995 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
DBG_ENTRY(cgc)
{
PTEB pteb;
if (IS_CSR_SERVER_THREAD())
{
PRINT("Not a client-side thread\n");
return;
}
pteb = CURRENT_TEB();
if (pteb == NULL)
{
return;
}
PRINT("Current client-side RC is %p\n", pteb->glCurrentRC);
}
/******************************Public*Routine******************************\
*
* sgc
*
* Print current server-side context
*
* History:
* Tue Jan 31 11:36:21 1995 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
DBG_ENTRY(sgc)
{
PTEB pteb;
if (!IS_CSR_SERVER_THREAD())
{
PRINT("Not a server-side thread\n");
return;
}
pteb = CURRENT_TEB();
if (pteb == NULL)
{
return;
}
PRINT("Current server-side HRC is %p, context is %p\n",
pteb->glCurrentRC, pteb->glContext);
}
/******************************Public*Routine******************************\
*
* gc
*
* Calls either cgc or sgc depending on the current thread state
*
* History:
* Tue Jan 31 14:09:22 1995 -by- Drew Bliss [drewb]
* Created
*
\**************************************************************************/
DBG_ENTRY(gc)
{
if (IS_CSR_SERVER_THREAD())
{
sgc(hCurrentProcess, hCurrentThread, dwCurrentPc, pwea, pszArguments);
}
else
{
cgc(hCurrentProcess, hCurrentThread, dwCurrentPc, pwea, pszArguments);
}
}