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

188 lines
6.1 KiB
C

/******************************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 <alloc.h>
#include <debug.h>
#endif // _glp_