windows-nt/Source/XPSP1/NT/multimedia/opengl/server/inc/devlock.h
2020-09-26 16:20:57 +08:00

90 lines
3.1 KiB
C

/******************************Module*Header*******************************\
* Module Name: devlock.h
*
* Created: 12-Apr-1994 19:45:42
* Author: Gilman Wong [gilmanw]
*
* Copyright (c) 1994 Microsoft Corporation
\**************************************************************************/
// Engine helper functions to grab/release display semaphore and to
// teardown/restore the cursor.
extern BOOL APIENTRY glsrvGrabLock(__GLGENcontext *gengc);
extern VOID APIENTRY glsrvReleaseLock(__GLGENcontext *gengc);
extern BOOL APIENTRY glsrvGrabSurfaces(__GLGENcontext *gengc,
GLGENwindow *pwnd,
FSHORT surfBits);
extern VOID APIENTRY glsrvReleaseSurfaces(__GLGENcontext *gengc,
GLGENwindow *pwnd,
FSHORT surfBits);
extern void APIENTRY glsrvSynchronizeWithGdi(__GLGENcontext *gengc,
GLGENwindow *pwnd,
FSHORT surfBits);
extern void APIENTRY glsrvDecoupleFromGdi(__GLGENcontext *gengc,
GLGENwindow *pwnd,
FSHORT surfBits);
/******************************Public*Routine******************************\
*
* glsrvLazyGrabSurfaces
*
* Indicates a need for all surfaces whose bits are set in the flags
* word. If the locking code determined that a lock was needed for
* that surface and the lock isn't currently held, the lock is taken.
*
* History:
* Fri May 30 18:17:27 1997 -by- Gilman Wong [gilmanw]
* Created
*
\**************************************************************************/
__inline BOOL glsrvLazyGrabSurfaces(__GLGENcontext *gengc,
FSHORT surfBits)
{
BOOL bRet = TRUE;
if (((gengc->fsGenLocks ^ gengc->fsLocks) & surfBits) != 0)
{
bRet = glsrvGrabSurfaces(gengc, gengc->pwndLocked, surfBits);
}
return bRet;
}
//
// Provide wrappers for DirectDraw surface locking and unlocking so
// that lock tracking can be done on debug builds.
//
// #define VERBOSE_DDSLOCK
#if !defined(DBG) || !defined(VERBOSE_DDSLOCK)
#define DDSLOCK(pdds, pddsd, flags, prect) \
((pdds)->lpVtbl->Lock((pdds), (prect), (pddsd), (flags), NULL))
#define DDSUNLOCK(pdds, ptr) \
((pdds)->lpVtbl->Unlock((pdds), (ptr)))
#else
HRESULT dbgDdsLock(LPDIRECTDRAWSURFACE pdds, DDSURFACEDESC *pddsd,
DWORD flags, char *file, int line);
HRESULT dbgDdsUnlock(LPDIRECTDRAWSURFACE pdds, void *ptr,
char *file, int line);
#define DDSLOCK(pdds, pddsd, flags, prect) \
dbgDdsLock(pdds, pddsd, flags, __FILE__, __LINE__)
#define DDSUNLOCK(pdds, ptr) \
dbgDdsUnlock(pdds, ptr, __FILE__, __LINE__)
#endif
extern DWORD gcmsOpenGLTimer;
//#define BATCH_LOCK_TICKMAX 99
//#define TICK_RANGE_LO 60
//#define TICK_RANGE_HI 100
extern DWORD BATCH_LOCK_TICKMAX;
extern DWORD TICK_RANGE_LO;
extern DWORD TICK_RANGE_HI;
#define GENERIC_BACKBUFFER_ONLY(gc) \
( ((gc)->state.raster.drawBuffer == GL_BACK ) &&\
((gc)->state.pixel.readBuffer == GL_BACK ) )