📄 mcdrv.h
字号:
/******************************Module*Header*******************************\
* Module Name: mcdrv.h
*
* Server-side data structure for MCD driver interface. These structures and
* values are used by the MCD driver to process calls made to the driver.
*
* Copyright (c) 1996-1997 Microsoft Corporation
*
\**************************************************************************/
#ifndef _MCDRV_H
#define _MCDRV_H
//
// The MCD version is defaulted to the most conservative version number.
// Override these defines if you wish to compile a driver with different
// version information.
//
#ifndef MCD_VER_MAJOR
#define MCD_VER_MAJOR 1
#endif
#ifndef MCD_VER_MINOR
#define MCD_VER_MINOR 0
#endif
#define MCD_MAX_USER_CLIP_PLANES 6
#define MCDRV_MEM_BUSY 1
#define MCDRV_MEM_NOT_BUSY 2
typedef ENUMRECTS MCDENUMRECTS;
typedef HANDLE MCDHANDLE;
typedef float MCDFLOAT;
typedef double MCDDOUBLE;
#define MCDENGDLLNAME "MCDSRV32.DLL"
#define MCDFUNCS 3076
#define MCDRV_MEM_DMA 0x0001
#define MCDRV_TEXTURE_RESIDENT 0x0001
typedef struct _MCDRIVERINFO {
ULONG verMajor;
ULONG verMinor;
ULONG verDriver;
CHAR idStr[200];
ULONG drvMemFlags;
ULONG drvBatchMemSizeMax;
} MCDDRIVERINFO;
typedef struct _MCDWINDOW
{
RECTL clientRect; // Rectangle describing current window
// client area
RECTL clipBoundsRect; // Bounding rectangle for the individual
// clipping rectangles
MCDENUMRECTS *pClip; // List of rectangles describing the
// current clip region intersected
// with the current scissors rectangle
MCDENUMRECTS *pClipUnscissored; // Unscissored version of above
VOID *pvUser;
} MCDWINDOW;
// Rendering context
// MCD context createFlags:
//
// MCDCONTEXT_SWAPSYNC If set, synchronize MCDrvSwap to VSYNC
// for a tearless swap (if possible).
//
// MCDCONTEXT_IO_PRIORITY If set, allow OpenGL to have a higher priority
// on the bus (if possible, let OpenGL "hog" the
// bus).
//
#define MCDCONTEXT_SWAPSYNC 0x00000001
#define MCDCONTEXT_IO_PRIORITY 0x00000002
typedef struct _MCDRC
{
LONG iPixelFormat; // Pixel format for the RC
LONG iLayerPlane; // Layer plane for the RC
ULONG createFlags; // Creation flags
ULONG userFlags; // User-specified flags
VOID *pvUser; // User-specified pointer for expansion
} MCDRC;
#define MCDRCINFO_NOVIEWPORTADJUST 0x0001
#define MCDRCINFO_Y_LOWER_LEFT 0x0002
#define MCDRCINFO_DEVCOLORSCALE 0x0004
#define MCDRCINFO_DEVZSCALE 0x0008
// If set the system provides state updates
// with fine-grained state updates rather
// than through RENDERSTATE. This is
// required if the driver exports
// MCDrvProcess.
#define MCDRCINFO_FINE_GRAINED_STATE 0x0010
typedef struct _MCRCINFO
{
ULONG requestFlags;
MCDFLOAT redScale;
MCDFLOAT greenScale;
MCDFLOAT blueScale;
MCDFLOAT alphaScale;
MCDDOUBLE zScale; // This is a double to preserve accuracy
ULONG depthBufferMax;
LONG viewportXAdjust;
LONG viewportYAdjust;
ULONG reserved[12];
} MCDRCINFO;
// MCD pixel format descriptor
typedef struct _MCDPIXELFORMAT {
WORD nSize;
DWORD dwFlags; // Any combination of:
//
// PFD_DOUBLEBUFFER
// PFD_NEED_PALETTE
// PFD_NEED_SYSTEM_PALETTE
// PFD_SWAP_EXCHANGE
// PFD_SWAP_COPY
// PFD_SWAP_LAYER_BUFFERS
BYTE iPixelType; // One of the following:
//
// PFD_TYPE_RGBA
// PFD_TYPE_COLORINDEX
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cDepthBits; // Number of significant depth bits
BYTE cDepthShift;
BYTE cDepthBufferBits; // Element size of depth buffer
// (eg, a depth buffer with cDepthBits = 24
// might have a cDepthBufferBits = 32)
BYTE cStencilBits;
BYTE cOverlayPlanes; // Count of up to 15 overlay planes
BYTE cUnderlayPlanes; // Count of up to 15 underlay planes
DWORD dwTransparentColor; // If there is an underlay plane, specifies
// transparent color or index.
} MCDPIXELFORMAT;
// MCD layer plane descriptor
typedef struct _MCDLAYERPLANE {
WORD nSize;
WORD nVersion;
DWORD dwFlags; // Any combination of:
//
// LPD_SUPPORT_OPENGL
// LPD_SUPPORT_GDI
// LPD_DOUBLEBUFFER
// LPD_STEREO
// LPD_SWAP_EXCHANGE
// LPD_SWAP_COPY
// LPD_TRANSPARANT
// LPD_SHARE_DEPTH
// LPD_SHARE_STENCIL
// LPD_SHARE_ACCUM
BYTE iPixelType; // One of the following:
//
// LPD_TYPE_RGBA
// LPD_TYPE_COLORINDEX
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAuxBuffers;
BYTE iLayerPlane;
COLORREF crTransparent;
} MCDLAYERPLANE;
//
// Basic rendering types:
//
typedef struct _MCDCOLOR {
MCDFLOAT r, g, b, a;
} MCDCOLOR;
typedef struct _MCDCOORD {
MCDFLOAT x, y, z, w;
} MCDCOORD;
//
// Texture structures:
//
typedef struct __MCDMIPMAPLEVEL {
UCHAR *pTexels; // pointer to client texture data
LONG width, height;
LONG widthImage, heightImage; // Image dimensions without the border
MCDFLOAT widthImagef, heightImagef; // Floatin-point versions of above
LONG widthLog2, heightLog2; // Log2 of above
LONG border; // Border size
LONG requestedFormat; // Requested internal format
LONG baseFormat; // Base format
LONG internalFormat; // Actual internal format
LONG redSize; // Component resolution
LONG greenSize;
LONG blueSize;
LONG alphaSize;
LONG luminanceSize;
LONG intensitySize;
ULONG reserved;
} MCDMIPMAPLEVEL;
typedef struct __MCDTEXTURESTATE {
ULONG sWrapMode; // Wrap modes
ULONG tWrapMode;
ULONG minFilter; // Min/mag filters
ULONG magFilter;
MCDCOLOR borderColor; // Border color
} MCDTEXTURESTATE;
typedef struct __MCDTEXTUREOBJSTATE {
ULONG name; // "name" of texture object
MCDFLOAT priority; // priority of the texture object
} MCDTEXTUREOBJSTATE;
typedef struct __MCDTEXTUREDATA {
MCDTEXTURESTATE textureState;
MCDTEXTUREOBJSTATE textureObjState;
MCDMIPMAPLEVEL *level;
ULONG textureDimension;
// Support for texture palettes:
ULONG paletteSize;
RGBQUAD *paletteData;
ULONG paletteBaseFormat; // Type of palette data
ULONG paletteRequestedFormat;
} MCDTEXTUREDATA;
typedef struct _MCDTEXTURE {
MCDTEXTUREDATA *pMCDTextureData;
VOID *pSurface;
ULONG createFlags;
ULONG_PTR textureKey; // Must be filled in by the driver
ULONG userFlags;
VOID *pvUser;
} MCDTEXTURE;
//
// Memory block.
//
typedef struct _MCDMEM {
ULONG memSize;
ULONG createFlags;
UCHAR *pMemBase;
ULONG userFlags;
VOID *pvUser;
} MCDMEM;
//
// Generic description prefix for any state change.
//
typedef struct _MCDSTATE_PREFIX {
ULONG state;
ULONG size;
} MCDSTATE_PREFIX;
typedef struct _MCDSTATE {
ULONG state;
ULONG size;
ULONG stateValue;
} MCDSTATE;
#define MCD_RENDER_STATE 0
#define MCD_PIXEL_STATE 1
#define MCD_SCISSOR_RECT_STATE 2
#define MCD_TEXENV_STATE 3
#define MCD_ENABLE_STATE 4
#define MCD_TEXTURE_ENABLE_STATE 5
#define MCD_FOG_STATE 6
#define MCD_SHADEMODEL_STATE 7
#define MCD_POINTDRAW_STATE 8
#define MCD_LINEDRAW_STATE 9
#define MCD_POLYDRAW_STATE 10
#define MCD_ALPHATEST_STATE 11
#define MCD_DEPTHTEST_STATE 12
#define MCD_BLEND_STATE 13
#define MCD_LOGICOP_STATE 14
#define MCD_FRAMEBUF_STATE 15
#define MCD_LIGHT_MODEL_STATE 16
#define MCD_HINT_STATE 17
#define MCD_CLIP_STATE 18
#define MCD_STENCILTEST_STATE 19
//
// MCDSTATE_RENDER is derived from the MCDSTATE_PREFIX structure and is used
// to pass all MCD rendering state (MCDRENDERSTATE) in a single command
// via MCDrvState.
//
// State field names are derived from the GLenum constant names by removing
// the GL_ prefix, replacing the "_" separators with case changes, and
// adding the "Enable" suffix to state enables.
//
// For example:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -