summaryrefslogtreecommitdiffstats
path: root/public/oak/inc/mcdrv.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/oak/inc/mcdrv.h771
1 files changed, 771 insertions, 0 deletions
diff --git a/public/oak/inc/mcdrv.h b/public/oak/inc/mcdrv.h
new file mode 100644
index 000000000..055a6d0c9
--- /dev/null
+++ b/public/oak/inc/mcdrv.h
@@ -0,0 +1,771 @@
+/******************************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 Microsoft Corporation
+*
+\**************************************************************************/
+
+#ifndef _MCDRV_H
+#define _MCDRV_H
+
+#define MCD_VER_MAJOR 1
+#define MCD_VER_MINOR 0
+
+#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 RXFUNCS
+
+#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
+
+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;
+
+} 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 textureKey; // Must be filled in by the driver
+ ULONG userFlags;
+ VOID *pvUser;
+} MCDTEXTURE;
+
+
+typedef struct _MCDMEM {
+ ULONG memSize;
+ ULONG createFlags;
+ UCHAR *pMemBase;
+ ULONG userFlags;
+ VOID *pvUser;
+} MCDMEM;
+
+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
+
+//
+// MCDSTATE_RENDER is derived from the MCDSTATE structure and is used to pass
+// all MCD rendering state (MCDALLSTATE) in a single command.
+//
+// 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:
+//
+// GL_FOG_COLOR becomes fogColor
+// GL_POINT_SMOOTH becomes pointSmoothEnable
+//
+// In addition, there are few multiple values that are accessed via a single
+// GLenum. For example, GL_POLYGON_MODE returns both a front and a back
+// polygon mode, so:
+//
+// GL_POLYGON_MODE becomes polygonModeFront *and* polygonModeBack
+//
+
+// Enable flags for enables field in MCDALLSTATE
+
+#define MCD_ALPHA_TEST_ENABLE (1 << 0)
+#define MCD_BLEND_ENABLE (1 << 1)
+#define MCD_INDEX_LOGIC_OP_ENABLE (1 << 2)
+#define MCD_DITHER_ENABLE (1 << 3)
+#define MCD_DEPTH_TEST_ENABLE (1 << 4)
+#define MCD_FOG_ENABLE (1 << 5)
+#define MCD_LIGHTING_ENABLE (1 << 6)
+#define MCD_COLOR_MATERIAL_ENABLE (1 << 7) // Not currently used
+#define MCD_LINE_STIPPLE_ENABLE (1 << 8)
+#define MCD_LINE_SMOOTH_ENABLE (1 << 9)
+#define MCD_POINT_SMOOTH_ENABLE (1 << 10)
+#define MCD_POLYGON_SMOOTH_ENABLE (1 << 11)
+#define MCD_CULL_FACE_ENABLE (1 << 12)
+#define MCD_POLYGON_STIPPLE_ENABLE (1 << 13)
+#define MCD_SCISSOR_TEST_ENABLE (1 << 14)
+#define MCD_STENCIL_TEST_ENABLE (1 << 15)
+#define MCD_TEXTURE_1D_ENABLE (1 << 16)
+#define MCD_TEXTURE_2D_ENABLE (1 << 17)
+#define MCD_TEXTURE_GEN_S_ENABLE (1 << 18) // Not currently used
+#define MCD_TEXTURE_GEN_T_ENABLE (1 << 19) // Not currently used
+#define MCD_TEXTURE_GEN_R_ENABLE (1 << 20) // Not currently used
+#define MCD_TEXTURE_GEN_Q_ENABLE (1 << 21) // Not currently used
+#define MCD_NORMALIZE_ENABLE (1 << 22) // Not currently used
+#define MCD_AUTO_NORMAL_ENABLE (1 << 23) // Not currently used
+#define MCD_POLYGON_OFFSET_POINT_ENABLE (1 << 24)
+#define MCD_POLYGON_OFFSET_LINE_ENABLE (1 << 25)
+#define MCD_POLYGON_OFFSET_FILL_ENABLE (1 << 26)
+#define MCD_COLOR_LOGIC_OP_ENABLE (1 << 27)
+
+typedef struct _MCDRENDERSTATE {
+
+ // state enables
+
+ ULONG enables;
+
+ // texture state
+
+ BOOL textureEnabled;
+
+ // fog state
+
+ MCDCOLOR fogColor;
+ MCDFLOAT fogIndex;
+ MCDFLOAT fogDensity;
+ MCDFLOAT fogStart;
+ MCDFLOAT fogEnd;
+ ULONG fogMode;
+
+ // shading model state
+
+ ULONG shadeModel;
+
+ // point drawing state
+
+ MCDFLOAT pointSize;
+
+ // line drawing state
+
+ MCDFLOAT lineWidth;
+ USHORT lineStipplePattern;
+ SHORT lineStippleRepeat;
+
+ // polygon drawing state
+
+ ULONG cullFaceMode;
+ ULONG frontFace;
+ ULONG polygonModeFront;
+ ULONG polygonModeBack;
+ BYTE polygonStipple[4*32];
+ MCDFLOAT zOffsetFactor;
+ MCDFLOAT zOffsetUnits;
+
+ // stencil test state
+
+ BOOL stencilTestFunc;
+ USHORT stencilMask;
+ USHORT stencilRef;
+ ULONG stencilFail;
+ ULONG stencilDepthFail;
+ ULONG stencilDepthPass;
+
+ // alpha test state
+
+ ULONG alphaTestFunc;
+ MCDFLOAT alphaTestRef;
+
+ // depth test state
+
+ ULONG depthTestFunc;
+
+ // blend state
+
+ ULONG blendSrc;
+ ULONG blendDst;
+
+ // logic op state
+
+ ULONG logicOpMode;
+
+ // frame buffer control state
+
+ ULONG drawBuffer;
+ ULONG indexWritemask;
+ BOOL colorWritemask[4];
+ BOOL depthWritemask; //!!!mcd -- called mask, but really a write enable
+ USHORT stencilWritemask;
+ MCDCOLOR colorClearValue;
+ MCDFLOAT indexClearValue;
+ MCDDOUBLE depthClearValue;
+ USHORT stencilClearValue;
+
+ // lighting
+
+ BOOL twoSided;
+
+ // clipping control
+
+ MCDCOORD userClipPlanes[MCD_MAX_USER_CLIP_PLANES];
+
+ // hints
+
+ ULONG perspectiveCorrectionHint;
+ ULONG pointSmoothHint;
+ ULONG lineSmoothHint;
+ ULONG polygonSmoothHint;
+ ULONG fogHint;
+
+} MCDRENDERSTATE;
+
+typedef struct _MCDSTATE_RENDER {
+ ULONG state; // must be MCD_RENDER_STATE
+ ULONG size; // must be sizeof(MCDSTATE_RENDER)
+ MCDRENDERSTATE allState;
+} MCDSTATE_RENDER;
+
+//
+// MCDSTATEPIXEL is a variant of the MCDSTATE structure that is used to pass
+// all pixel state (MCDPIXELSTATE) in a single command.
+//
+// Note: for MCDrvDrawPixels, the MCDUNPACK structure can be overridden by
+// the packed parameter to the function. If set, the source of the data is
+// a display list and the structure of the data for that call may be assumed
+// to be:
+//
+// swapEndian = FALSE
+// lsbFirst = FALSE
+// lineLength = width (from MCDrvDrawPixels parameter list)
+// skipLines = 0
+// skipPixels = 0
+// alignment = 1
+//
+
+typedef struct _MCDPIXELTRANSFER {
+ MCDFLOAT redScale, greenScale, blueScale, alphaScale, depthScale;
+ MCDFLOAT redbias, greenBias, blueBias, aalphaBias, depthBias;
+ MCDFLOAT zoomX;
+ MCDFLOAT zoomY;
+
+ LONG indexShift;
+ LONG indexOffset;
+
+ BOOL mapColor;
+ BOOL mapStencil;
+} MCDPIXELTRANSFER;
+
+typedef struct _MCDPIXELPACK {
+ BOOL swapEndian;
+ BOOL lsbFirst;
+
+ LONG lineLength;
+ LONG skipLines;
+ LONG skipPixels;
+ LONG alignment;
+} MCDPIXELPACK;
+
+typedef struct _MCDPIXELUNPACK {
+ BOOL swapEndian;
+ BOOL lsbFirst;
+
+ LONG lineLength;
+ LONG skipLines;
+ LONG skipPixels;
+ LONG alignment;
+} MCDPIXELUNPACK;
+
+typedef struct _MCDPIXELSTATE {
+ MCDPIXELTRANSFER pixelTransferModes;
+ MCDPIXELPACK pixelPackModes;
+ MCDPIXELUNPACK pixelUnpackModes;
+ ULONG readBuffer;
+ MCDCOORD rasterPos;
+} MCDPIXELSTATE;
+
+typedef struct _MCDSTATE_PIXEL {
+ ULONG state; // must be MCD_PIXEL_STATE
+ ULONG size; // must be sizeof(MCDSTATE_PIXEL)
+ MCDPIXELSTATE pixelState;
+} MCDSTATE_PIXEL;
+
+typedef struct _MCDSTATE_SCISSOR_RECT {
+ ULONG state; // must be MCD_SCISSOR_RECT_STATE
+ ULONG size; // must be sizeof(MCDSTATE_SCISSOR_RECT)
+ RECTL scissorRect;
+} MCDSTATE_SCISSOR_RECT;
+
+typedef struct _MCDVIEWPORT {
+ MCDFLOAT xScale, xCenter;
+ MCDFLOAT yScale, yCenter;
+ MCDFLOAT zScale, zCenter;
+} MCDVIEWPORT;
+
+//
+// MCD surface flags:
+//
+// MCDSURFACE_HWND Currently must be set.
+
+#define MCDSURFACE_HWND 0x00000001
+
+typedef struct _MCDSURFACE {
+ MCDWINDOW *pWnd; // Region support
+ SURFOBJ *pso;
+ WNDOBJ *pwo;
+ ULONG reserved[4];
+ ULONG surfaceFlags;
+} MCDSURFACE;
+
+#define MCDSPAN_FRONT 1
+#define MCDSPAN_BACK 2
+#define MCDSPAN_DEPTH 3
+
+typedef struct _MCDSPAN {
+ LONG x;
+ LONG y;
+ LONG numPixels;
+ ULONG type;
+ VOID *pPixels;
+} MCDSPAN;
+
+//
+// MCDBUF.bufFlags flags:
+//
+// MCDBUF_ENABLED If set, direct buffer access is enabled (i.e., the
+// bufOffset and bufStride values are valid and may
+// be used to access the buffer).
+//
+// MCDBUF_NOCLIP If set, indicates that clipping is not required
+// for the current state of the window.
+//
+
+#define MCDBUF_ENABLED 0x00000001
+#define MCDBUF_NOCLIP 0x00000002
+
+typedef struct _MCDBUF {
+ ULONG bufFlags;
+ LONG bufOffset; // offset relative to beginning of framebuffer
+ LONG bufStride;
+} MCDBUF;
+
+typedef struct _MCDBUFFERS {
+ MCDBUF mcdFrontBuf;
+ MCDBUF mcdBackBuf;
+ MCDBUF mcdDepthBuf;
+} MCDBUFFERS;
+
+//
+// MCDrvSwap flags
+//
+
+#define MCDSWAP_MAIN_PLANE 0x00000001
+#define MCDSWAP_OVERLAY1 0x00000002
+#define MCDSWAP_OVERLAY2 0x00000004
+#define MCDSWAP_OVERLAY3 0x00000008
+#define MCDSWAP_OVERLAY4 0x00000010
+#define MCDSWAP_OVERLAY5 0x00000020
+#define MCDSWAP_OVERLAY6 0x00000040
+#define MCDSWAP_OVERLAY7 0x00000080
+#define MCDSWAP_OVERLAY8 0x00000100
+#define MCDSWAP_OVERLAY9 0x00000200
+#define MCDSWAP_OVERLAY10 0x00000400
+#define MCDSWAP_OVERLAY11 0x00000800
+#define MCDSWAP_OVERLAY12 0x00001000
+#define MCDSWAP_OVERLAY13 0x00002000
+#define MCDSWAP_OVERLAY14 0x00004000
+#define MCDSWAP_OVERLAY15 0x00008000
+#define MCDSWAP_UNDERLAY1 0x00010000
+#define MCDSWAP_UNDERLAY2 0x00020000
+#define MCDSWAP_UNDERLAY3 0x00040000
+#define MCDSWAP_UNDERLAY4 0x00080000
+#define MCDSWAP_UNDERLAY5 0x00100000
+#define MCDSWAP_UNDERLAY6 0x00200000
+#define MCDSWAP_UNDERLAY7 0x00400000
+#define MCDSWAP_UNDERLAY8 0x00800000
+#define MCDSWAP_UNDERLAY9 0x01000000
+#define MCDSWAP_UNDERLAY10 0x02000000
+#define MCDSWAP_UNDERLAY11 0x04000000
+#define MCDSWAP_UNDERLAY12 0x08000000
+#define MCDSWAP_UNDERLAY13 0x10000000
+#define MCDSWAP_UNDERLAY14 0x20000000
+#define MCDSWAP_UNDERLAY15 0x40000000
+
+// MCDDRIVER structure containing driver functions
+
+typedef LONG (*MCDRVDESCRIBEPIXELFORMATFUNC)(MCDSURFACE *pMCDSurface, LONG iPixelFormat,
+ ULONG nBytes, MCDPIXELFORMAT *pMCDPixelFmt, ULONG flags);
+typedef BOOL (*MCDRVDESCRIBELAYERPLANEFUNC)(MCDSURFACE *pMCDSurface, LONG iPixelFormat,
+ LONG iLayerPlane, ULONG nBytes, MCDLAYERPLANE *pMCDLayerPlane,
+ ULONG flags);
+typedef LONG (*MCDRVSETLAYERPALETTEFUNC)(MCDSURFACE *pMCDSurface, LONG iLayerPlane, BOOL bRealize, LONG cEntries, COLORREF *pcr);
+typedef BOOL (*MCDRVINFOFUNC)(MCDSURFACE *pMCDSurface, MCDDRIVERINFO *pMCDDriverInfo);
+typedef ULONG (*MCDRVCREATECONTEXTFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDRCINFO *pDrvRcInfo);
+typedef ULONG (*MCDRVDELETECONTEXTFUNC)(MCDRC *pRc, DHPDEV dhpdev);
+typedef ULONG (*MCDRVCREATETEXTUREFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDTEXTURE *pTex);
+typedef ULONG (*MCDRVUPDATESUBTEXTUREFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDTEXTURE *pTex,
+ ULONG lod, RECTL *pRect);
+typedef ULONG (*MCDRVUPDATETEXTUREPALETTEFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDTEXTURE *pTex,
+ ULONG start, ULONG numEntries);
+typedef ULONG (*MCDRVUPDATETEXTUREPRIORITYFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDTEXTURE *pTex);
+typedef ULONG (*MCDRVUPDATETEXTURESTATEFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDTEXTURE *pTex);
+typedef ULONG (*MCDRVTEXTURESTATUSFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDTEXTURE *pTex);
+typedef ULONG (*MCDRVDELETETEXTUREFUNC)(MCDTEXTURE *pTex, DHPDEV dhpdev);
+typedef ULONG (*MCDRVCREATEMEMFUNC)(MCDSURFACE *pMCDSurface, MCDMEM *pMCDMem);
+typedef ULONG (*MCDRVDELETEMEMFUNC)(MCDMEM *pMCDMem, DHPDEV dhpdev);
+typedef ULONG (*MCDRVDRAWFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDMEM *prxExecMem, UCHAR *pStart, UCHAR *pEnd);
+typedef ULONG (*MCDRVCLEARFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, ULONG buffers);
+typedef ULONG (*MCDRVSWAPFUNC)(MCDSURFACE *pMCDSurface, ULONG flags);
+typedef ULONG (*MCDRVSTATEFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDMEM *pMCDMem,
+ UCHAR *pStart, LONG length, ULONG numStates);
+typedef ULONG (*MCDRVVIEWPORTFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDVIEWPORT *pMCDViewport);
+typedef HDEV (*MCDRVGETHDEVFUNC)(MCDSURFACE *pMCDSurface);
+typedef ULONG (*MCDRVSPANFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDMEM *pMCDMem,
+ MCDSPAN *pMCDSpan, BOOL bRead);
+typedef VOID (*MCDRVTRACKWINDOWFUNC)(WNDOBJ *pWndObj, MCDWINDOW *pMCDWnd, ULONG flags);
+typedef ULONG (*MCDRVGETBUFFERSFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDBUFFERS *pMCDBuffers);
+typedef ULONG (*MCDRVALLOCBUFFERSFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc);
+typedef ULONG (*MCDRVBINDCONTEXTFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc);
+typedef ULONG (*MCDRVSYNCFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc);
+typedef ULONG (*MCDRVDRAWPIXELS)(MCDSURFACE *pMcdSurface, MCDRC *pRc,
+ ULONG width, ULONG height, ULONG format,
+ ULONG type, VOID *pPixels, BOOL packed);
+typedef ULONG (*MCDRVREADPIXELS)(MCDSURFACE *pMcdSurface, MCDRC *pRc,
+ LONG x, LONG y, ULONG width, ULONG height, ULONG format,
+ ULONG type, VOID *pPixels);
+typedef ULONG (*MCDRVCOPYPIXELS)(MCDSURFACE *pMcdSurface, MCDRC *pRc,
+ LONG x, LONG y, ULONG width, ULONG height, ULONG type);
+typedef ULONG (*MCDRVPIXELMAP)(MCDSURFACE *pMcdSurface, MCDRC *pRc,
+ ULONG mapType, ULONG mapSize, VOID *pMap);
+
+typedef struct _MCDDRIVER {
+ ULONG ulSize;
+ MCDRVDESCRIBEPIXELFORMATFUNC pMCDrvDescribePixelFormat;
+ MCDRVDESCRIBELAYERPLANEFUNC pMCDrvDescribeLayerPlane;
+ MCDRVSETLAYERPALETTEFUNC pMCDrvSetLayerPalette;
+ MCDRVINFOFUNC pMCDrvInfo;
+ MCDRVCREATECONTEXTFUNC pMCDrvCreateContext;
+ MCDRVDELETECONTEXTFUNC pMCDrvDeleteContext;
+ MCDRVBINDCONTEXTFUNC pMCDrvBindContext;
+ MCDRVCREATETEXTUREFUNC pMCDrvCreateTexture;
+ MCDRVDELETETEXTUREFUNC pMCDrvDeleteTexture;
+ MCDRVUPDATESUBTEXTUREFUNC pMCDrvUpdateSubTexture;
+ MCDRVUPDATETEXTUREPALETTEFUNC pMCDrvUpdateTexturePalette;
+ MCDRVUPDATETEXTUREPRIORITYFUNC pMCDrvUpdateTexturePriority;
+ MCDRVUPDATETEXTURESTATEFUNC pMCDrvUpdateTextureState;
+ MCDRVTEXTURESTATUSFUNC pMCDrvTextureStatus;
+ MCDRVCREATEMEMFUNC pMCDrvCreateMem;
+ MCDRVDELETEMEMFUNC pMCDrvDeleteMem;
+ MCDRVDRAWFUNC pMCDrvDraw;
+ MCDRVCLEARFUNC pMCDrvClear;
+ MCDRVSWAPFUNC pMCDrvSwap;
+ MCDRVSTATEFUNC pMCDrvState;
+ MCDRVVIEWPORTFUNC pMCDrvViewport;
+ MCDRVGETHDEVFUNC pMCDrvGetHdev;
+ MCDRVSPANFUNC pMCDrvSpan;
+ MCDRVTRACKWINDOWFUNC pMCDrvTrackWindow;
+ MCDRVALLOCBUFFERSFUNC pMCDrvAllocBuffers;
+ MCDRVGETBUFFERSFUNC pMCDrvGetBuffers;
+ MCDRVSYNCFUNC pMCDrvSync;
+ MCDRVDRAWPIXELS pMCDrvDrawPixels;
+ MCDRVREADPIXELS pMCDrvReadPixels;
+ MCDRVCOPYPIXELS pMCDrvCopyPixels;
+ MCDRVPIXELMAP pMCDrvPixelMap;
+} MCDDRIVER;
+
+
+//
+// Clip codes:
+//
+
+#define MCD_CLIP_LEFT 0x00000001
+#define MCD_CLIP_RIGHT 0x00000002
+#define MCD_CLIP_BOTTOM 0x00000004
+#define MCD_CLIP_TOP 0x00000008
+#define MCD_CLIP_NEAR 0x00000010
+#define MCD_CLIP_FAR 0x00000020
+#define MCD_CLIP_MASK 0x0000003f
+
+//
+// Vertex flags:
+//
+
+#define MCDVERTEX_EDGEFLAG 0x00000001
+#define MCDVERTEX_FRONTFACE 0
+#define MCDVERTEX_BACKFACE 1
+
+//
+// Note: vertex colors are scaled to the color depths reported in the
+// pixel format.
+//
+
+typedef struct _MCDVERTEX {
+
+ ULONG flags; // vertex flags
+ MCDCOLOR *pColor; // pointer to active vertex color
+ ULONG clipCode; // clip code
+ MCDFLOAT fog; // fog value (0..1)
+ MCDCOORD clipCoord; // clip-space coordinate
+ MCDCOORD windowCoord; // window coordinate
+ MCDCOORD texCoord; // texture coordinate
+ MCDCOORD normal; // vertex normal
+ MCDCOLOR colors[2]; // front and back vertex colors
+ MCDCOORD eyeCoord; // eye coordinate
+} MCDVERTEX;
+
+typedef struct _MCDCOMMAND MCDCOMMAND;
+
+#define MCDCOMMAND_RESET_STIPPLE 0x00004000
+#define MCDCOMMAND_RENDER_PRIMITIVE 0x00008000
+#define MCDCOMMAND_SAME_COLOR 0x00040000
+
+typedef struct _MCDCOMMAND {
+ ULONG flags; // flags for this command
+ MCDVERTEX *pEndVertex;
+ ULONG reserved2;
+ ULONG reserved3;
+ ULONG reserved4;
+ ULONG reserved5;
+ MCDVERTEX *pStartVertex;
+ ULONG reserved7;
+ ULONG reserved8;
+ ULONG reserved9;
+ ULONG reserved10;
+ ULONG reserved11;
+ ULONG reserved12;
+ ULONG reserved13;
+ ULONG reserved14;
+ ULONG command; // primitive type or command (GL_TRIANGLES, etc.)
+ ULONG clipCodes;
+ ULONG reserved17;
+ ULONG reserved18;
+ MCDCOMMAND *pNextCmd;
+ ULONG numIndices;
+ UCHAR *pIndices;
+ ULONG reserved22;
+ ULONG textureKey;
+} MCDCOMMAND;
+
+
+// Top-level (global) driver function established at DLL initialization time
+// through MCDEngInit(). All other driver functions are obtained through the
+// MCDrvGetEntryPoints funtion:
+
+typedef BOOL (*MCDRVGETENTRYPOINTSFUNC)(MCDSURFACE *pMCDSurface, MCDDRIVER *pMCDDriver);
+
+// MCD Server engine functions:
+
+#define MCDENGINITFUNCNAME "MCDEngInit"
+#define MCDENGESCFILTERNAME "MCDEngEscFilter"
+#define MCDENGSETMEMSTATUSNAME "MCDEngSetMemStatus"
+
+typedef BOOL (WINAPI *MCDENGINITFUNC)(SURFOBJ *pso,
+ MCDRVGETENTRYPOINTSFUNC);
+
+typedef BOOL (WINAPI *MCDENGESCFILTERFUNC)(SURFOBJ *pso, ULONG iEsc,
+ ULONG cjIn, VOID *pvIn,
+ ULONG cjOut, VOID *pvOut,
+ ULONG *pRetVal);
+
+typedef BOOL (WINAPI *MCDENGSETMEMSTATUSFUNC)(MCDMEM *pMCDMem, ULONG status);
+
+#endif