📄 mcdrv.h
字号:
BOOL colorWritemask[4];
BOOL depthWritemask; // Called mask, but really a write enable.
USHORT stencilWritemask;
MCDCOLOR colorClearValue;
MCDFLOAT indexClearValue;
MCDDOUBLE depthClearValue;
USHORT stencilClearValue;
} MCDFRAMEBUFSTATE;
// Light model state.
typedef struct _MCDLIGHTMODELSTATE {
MCDCOLOR ambient; // Scaled
BOOL localViewer;
BOOL twoSided;
} MCDLIGHTMODELSTATE;
// Hint state.
typedef struct _MCDHINTSTATE {
ULONG perspectiveCorrectionHint;
ULONG pointSmoothHint;
ULONG lineSmoothHint;
ULONG polygonSmoothHint;
ULONG fogHint;
} MCDHINTSTATE;
// Clipping state.
typedef struct _MCDCLIPSTATE {
ULONG userClipEnables;
// Given by program
MCDCOORD userClipPlanes[MCD_MAX_USER_CLIP_PLANES];
// userClipPlanes transformed by modelview inverse
MCDCOORD userClipPlanesInv[MCD_MAX_USER_CLIP_PLANES];
} MCDCLIPSTATE;
// Stencil test state.
typedef struct _MCDSTENCILTESTSTATE {
BOOL stencilTestFunc;
USHORT stencilMask;
USHORT stencilRef;
ULONG stencilFail;
ULONG stencilDepthFail;
ULONG stencilDepthPass;
} MCDSTENCILTESTSTATE;
//
// 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;
//
// MCD surface flags:
//
// MCDSURFACE_HWND
#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;
//
// 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
//
// 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
//
// Color indices:
//
#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;
MCDVERTEX *pVertexBuffer;
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;
// 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_PTR (*MCDRVDRAWFUNC)(MCDSURFACE *pMCDSurface, MCDRC *pRc, MCDMEM *pMCDExecMem, 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);
#define MCDDRIVER_V10_SIZE (sizeof(ULONG)+31*sizeof(void *))
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;
// Top-level (global) driver functions established at DLL initialization time
// through MCD initialization. All other driver functions are obtained through
// the MCDrvGetEntryPoints funtion:
typedef BOOL (*MCDRVGETENTRYPOINTSFUNC)(MCDSURFACE *pMCDSurface,
MCDDRIVER *pMCDDriver);
typedef struct _MCDGLOBALDRIVERFUNCS {
ULONG ulSize;
MCDRVGETENTRYPOINTSFUNC pMCDrvGetEntryPoints;
} MCDGLOBALDRIVERFUNCS;
// MCD Server engine functions:
#define MCDENGINITFUNCNAME "MCDEngInit"
#define MCDENGINITEXFUNCNAME "MCDEngInitEx"
#define MCDENGUNINITFUNCNAME "MCDEngUninit"
#define MCDENGESCFILTERNAME "MCDEngEscFilter"
#define MCDENGSETMEMSTATUSNAME "MCDEngSetMemStatus"
typedef BOOL (WINAPI *MCDENGINITFUNC)(SURFOBJ *pso,
MCDRVGETENTRYPOINTSFUNC);
typedef BOOL (WINAPI *MCDENGINITEXFUNC)(SURFOBJ *pso,
MCDGLOBALDRIVERFUNCS *pMCDGlobalDriverFuncs,
void *pReserved);
typedef void (WINAPI *MCDENGUNINITFUNC)(SURFOBJ *pso);
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -