/******************************Module*Header*******************************\ * Module Name: glp.h * * GL system routines shared between the front and back end * * Created: 12-Nov-1993 17:36:00 * Author: Gilman Wong [gilmanw] * * Copyright (c) 1992-1995 Microsoft Corporation * \**************************************************************************/ #ifndef _glp_ #define _glp_ // Calls into the back end typedef struct GLGENwindowRec GLGENwindow; // Fake object type for DirectDraw. BITMAP is used because it // shouldn't come up in the places we use GetObjectType. #define OBJ_DDRAW OBJ_BITMAP // Surface flags // HDC available #define GLSURF_HDC 0x00000001 // DirectDraw surfaces available #define GLSURF_DIRECTDRAW 0x00000002 // Metafile-based #define GLSURF_METAFILE 0x00000004 // Direct memory access possible #define GLSURF_DIRECT_ACCESS 0x00000008 // Screen surface, only set for HDC surfaces #define GLSURF_SCREEN 0x00000010 // Direct DC surface #define GLSURF_DIRECTDC 0x00000020 // Surface is in video memory #define GLSURF_VIDEO_MEMORY 0x00000040 // Special surface types // Memory DC #define GLSURF_IS_MEMDC(dwFlags) \ (((dwFlags) & (GLSURF_HDC | GLSURF_DIRECTDC | GLSURF_METAFILE)) == \ GLSURF_HDC) // Non-memory, non-info DC #define GLSURF_IS_DIRECTDC(dwFlags) \ (((dwFlags) & (GLSURF_HDC | GLSURF_DIRECTDC | GLSURF_METAFILE)) == \ (GLSURF_HDC | GLSURF_DIRECTDC)) // Direct DC for the screen #define GLSURF_IS_SCREENDC(dwFlags) \ (((dwFlags) & (GLSURF_HDC | GLSURF_DIRECTDC | GLSURF_METAFILE | \ GLSURF_SCREEN)) == \ (GLSURF_HDC | GLSURF_DIRECTDC | GLSURF_SCREEN)) typedef struct IDirectDrawSurface *LPDIRECTDRAWSURFACE; typedef struct _GLDDSURF { LPDIRECTDRAWSURFACE pdds; DDSURFACEDESC ddsd; DWORD dwBitDepth; } GLDDSURF; typedef struct _GLDDSURFACES { GLDDSURF gddsFront; GLDDSURF gddsZ; } GLDDSURFACES; typedef struct _GLSURF { DWORD dwFlags; int iLayer; int ipfd; PIXELFORMATDESCRIPTOR pfd; // Needed for ExtEscape calls for hardware even for surfaces, like // DirectDraw surfaces, which don't need a DC for access HDC hdc; // Source-specific fields union { HWND hwnd; GLDDSURFACES dd; }; } GLSURF; DWORD APIENTRY DdbdToCount(DWORD ddbd); // The documentation says that depths returned in DDPIXELFORMATs are // DDBD_ constants, but they seem to be real numbers. Hide the conversion // necessary in case it needs to change. #define DdPixDepthToCount(ddpd) (ddpd) BYTE APIENTRY DdPixelDepth(DDSURFACEDESC *pddsd); void APIENTRY MaskToBitsAndShift(DWORD dwMask, BYTE *pbBits, BYTE *pbShift); BOOL APIENTRY InitDeviceSurface(HDC hdc, int ipfd, int iLayer, DWORD dwObjectType, BOOL bUpdatePfd, GLSURF *pgsurf); BOOL APIENTRY IsDirectDrawDevice(HDC hdc); BOOL APIENTRY glsrvAttention(PVOID, PVOID, PVOID, HANDLE); PVOID APIENTRY glsrvCreateContext(struct _GLWINDOWID *, GLSURF *); BOOL APIENTRY glsrvMakeCurrent(struct _GLWINDOWID *, PVOID, GLGENwindow *); VOID APIENTRY glsrvLoseCurrent(PVOID); BOOL APIENTRY glsrvDeleteContext(PVOID); BOOL APIENTRY glsrvSwapBuffers(HDC, GLGENwindow *); VOID APIENTRY glsrvThreadExit(void); VOID APIENTRY glsrvCleanupWindow(PVOID, GLGENwindow *); ULONG APIENTRY glsrvShareLists(PVOID, PVOID); BOOL APIENTRY glsrvCopyContext(PVOID, PVOID, UINT); BOOL APIENTRY glsrvBindDirectDrawTexture(struct __GLcontextRec *, int, LPDIRECTDRAWSURFACE *, DDSURFACEDESC *, ULONG); void APIENTRY glsrvUnbindDirectDrawTexture(struct __GLcontextRec *); BOOL APIENTRY __wglGetBitfieldColorFormat(HDC hdc, UINT cColorBits, PIXELFORMATDESCRIPTOR *ppfd, BOOL bDescribeSurf); BOOL APIENTRY wglIsDirectDevice(HDC hdc); // Cleans up any orphaned window information VOID APIENTRY wglValidateWindows(void); // GL metafile support function DWORD APIENTRY wglObjectType(HDC hdc); // Find pixel format counts VOID APIENTRY wglNumHardwareFormats(HDC hdc, DWORD dwType, int *piMcd, int *piIcd); // Calls from the back end to the front end int WINAPI __DrvDescribePixelFormat(HDC hdc, int ipfd, UINT cjpfd, LPPIXELFORMATDESCRIPTOR ppfd); BOOL WINAPI __DrvSetPixelFormat(HDC hdc, int ipfd, PVOID *pwnd); BOOL WINAPI __DrvSwapBuffers(HDC hdc, BOOL bFinish); extern CRITICAL_SECTION gcsPixelFormat; extern CRITICAL_SECTION gcsPaletteWatcher; extern DWORD tidPaletteWatcherThread; extern ULONG ulPaletteWatcherCount; extern HWND hwndPaletteWatcher; extern DWORD dwPlatformId; #define NT_PLATFORM ( dwPlatformId == VER_PLATFORM_WIN32_NT ) #define WIN95_PLATFORM ( dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) extern LONG lThreadsAttached; typedef HRESULT (WINAPI *PFN_GETSURFACEFROMDC)(HDC, LPDIRECTDRAWSURFACE *, HDC *); extern PFN_GETSURFACEFROMDC pfnGetSurfaceFromDC; #ifdef GL_METAFILE // OpenGL metafile support routines in GDI, dynamically linked // so the DLL can be run on platforms without metafile support extern BOOL (APIENTRY *pfnGdiAddGlsRecord)(HDC hdc, DWORD cb, BYTE *pb, LPRECTL prclBounds); extern BOOL (APIENTRY *pfnGdiAddGlsBounds)(HDC hdc, LPRECTL prclBounds); extern BOOL (APIENTRY *pfnGdiIsMetaPrintDC)(HDC hdc); #if DBG // Use NULL-checking thunks in debug mode to check erroneous DLL usage BOOL APIENTRY GlGdiAddGlsRecord(HDC hdc, DWORD cb, BYTE *pb, LPRECTL prclBounds); BOOL APIENTRY GlGdiAddGlsBounds(HDC hdc, LPRECTL prclBounds); BOOL APIENTRY GlGdiIsMetaPrintDC(HDC hdc); #else // Call directly through points in retail builds #define GlGdiAddGlsRecord(hdc, cb, pb, prcl) \ pfnGdiAddGlsRecord(hdc, cb, pb, prcl) #define GlGdiAddGlsBounds(hdc, prcl) \ pfnGdiAddGlsBounds(hdc, prcl) #define GlGdiIsMetaPrintDC(hdc) \ pfnGdiIsMetaPrintDC(hdc) #endif #endif #include #include #endif // _glp_