Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*****************************************************************************
* * file name: sxci.h * ******************************************************************************/
/* [dlee] Modified for Windows NT */
#ifdef WINDOWS_NT
extern PVOID pMgaDeviceExtension; #endif
/*
* opcodes for SXCI */
/*** general opcodes ***/ #define CLEAR 0x0004
#define DONE 0x0001
#define INITRC 0x0E00
#define NOOP 0x0501
#define SETBUFFERCONFIGURATION 0x0300
#define SETBGCOLOR 0x1800
#define SETCLIPLIST 0x0500
#define SETENDPOINT 0x1700
#define SETFGCOLOR 0x0402
#define SETFILLPATTERN 0x1600
#define SETLINESTYLE 0x0502
#define SETLINESTYLEOFFSET 0x0600
#define SETLOGICOP 0x0800
#define SETTRANSPARENCY 0x1400
#define SETTRIVIALIN 0x1300
#define SYNC 0x0301
/*** screen opcodes ***/ #define RENDERSCPOLYLINE 0x0304
#define RENDERSCPOLYGON 0x0404
#define SPANLINE 0x0204
/*** 2D opcodes ***/ #define RENDER2DMULTIPOLYLINE 0x0602
#define RENDER2DMULTIPOLYLINE32 0x0a02
#define RENDER2DPOLYGON 0x0302
#define RENDER2DPOLYGON32 0x0902
#define SET2DVIEWPORT 0x0002
#define SET2DWINDOW 0x0102
#define SET2DWINDOW32 0x0702
/*** 3D opcodes ***/ #define CHANGEMATRIX 0x0000
#define RENDERPOLYLINE 0x0103
#define RENDERPOLYQUAD 0x0203
#define RENDERPOLYTRIANGLE 0x0303
#define SETCLIP3D 0x0400
#define SETLIGHTSOURCES 0x0700
#define SETRENDERDATA 0x1000
#define SETRENDERMODE 0x0A00
#define SETSURFACEATTR 0x1100
#define SETVIEWER 0x0B00
#define SETZBUFFER 0x0c00
/*
* typedefs for SXCI data */
typedef float IFLOAT; /* integer value passed as a float */ typedef float NFLOAT; /* a normalized float 0.0 <= value <= 1.0 */
typedef struct { double x; double y; double z; } point;
typedef enum { Xaxis, Yaxis, Zaxis, Waxis } axis_name;
typedef struct { double data[4][4]; } matrix;
typedef struct { float M[4][4]; } MATRIX4;
typedef struct { float X; float Y; float Z; } POINT3;
typedef struct { NFLOAT X; NFLOAT Y; NFLOAT Z; } NORM3; /* where X*X + Y*Y + Z*Z = 1.0 */
typedef struct { NFLOAT Red; NFLOAT Green; NFLOAT Blue; } COLOR3;
/* sxci interprets these 16-bit datum as a signed values */ typedef struct { word X; word Y; } IPOINT2;
/* sxci interprets these 32-bit datum as a signed values */ typedef struct { dword X; dword Y; } IPOINT2_32;
#define NULL_LIGHT_TYPE 0.0
typedef struct { float Type; /* Type = 0.0 */ } NULL_LIGHT;
#define AMBIENT_LIGHT_TYPE 1.0
typedef struct { float Type; /* Type = 1.0 */ COLOR3 AmbientCol; } AMBIENT_LIGHT;
#define DIRECTIONAL_LIGHT_TYPE 2.0
typedef struct { float Type; /* Type = 2.0 */ COLOR3 DiffuseCol; COLOR3 SpecularCol; NORM3 Direction; } DIRECTIONAL_LIGHT;
#define POSITIONAL_LIGHT_TYPE 3.0
typedef struct { float Type; /* Type = 3.0 */ COLOR3 DiffuseCol; COLOR3 SpecularCol; POINT3 Position; NFLOAT AttGlobal; NFLOAT AttDist; } POSITIONAL_LIGHT;
#define SPOT_LIGHT_TYPE 4.0
typedef struct { float Type; /* Type = 4.0 */ COLOR3 DiffuseCol; COLOR3 SpecularCol; POINT3 Position; NORM3 Direction; NFLOAT AttGlobal; NFLOAT AttDist; IFLOAT ConeExp; NFLOAT CosMaxIAngle; NFLOAT CosAttIAngle; } SPOT_LIGHT;
typedef union { NULL_LIGHT Null_Light; AMBIENT_LIGHT Ambient_Light; DIRECTIONAL_LIGHT Directional_Light; POSITIONAL_LIGHT Positional_Light; SPOT_LIGHT Spot_Light; } LIGHT_SOURCES;
/*
* typedefs for SXCI commands (templates) */
/* -------------------------------------------------------------------
* General Opcodes * ------------------------------------------------------------------- */
/*** Clear ***/ #define DISPLAY_AND_Z 0x0
#define DISPLAY_ONLY 0x1
#define Z_ONLY 0x2
#define Z_NEAR 0.0
#define Z_FAR 1.0
typedef struct { short Opcode; /* 0x0004 */ short ClearMode; /* 0 = clear display and z */ /* 1 = clear display only */ /* 2 = clear Z-buffer only */ long RcId; /* Rendering context Id */ COLOR3 ClearColor; /* color for display clear */ NFLOAT ClearDepth; /* Depth for Z-buffer clear */ } Clear;
/*** Done ***/ typedef struct { short Opcode; /* 0x0001 */ char Null; char Reserved; } Done;
/*** InitRc ***/ typedef struct { short Opcode; /* 0x0E00 */ short Null; long RcId; } InitRc;
/*** NoOp ***/ typedef struct { short Opcode; /* 0x0501 */ short Len; /* Number of longs to skip */ long RcId; /* Rendering context Id */ long Data[1]; /* Data buffer to skip */ } NoOp;
/*** SetBufferConfiguration ***/ #define TC_FULL_DEPTH 0 /* Normal mode:display full depth frame buffer */
#define TC_BUF_A 1 /* Double-buffer mode: display frame buffer A */
#define TC_BUF_B 2 /* Double-buffer mode: display frame buffer B */
typedef struct { short Opcode; /* 0x0300 */ char BcDisplayMode; char BcDrawMode; long RcId; /* Rendering context Id */ } SetBufferConfiguration;
/*** SetBgColor ***/ typedef struct { short Opcode; /* 0x1800 */ short Null; long RcId; /* Rendering context Id */ COLOR3 BgColor; /* Background color */ } SetBgColor;
/*** SetCliplist ***/ typedef struct { short Opcode; short CliplistLength; long RcId; long ClipId; mtxClipList Cliplist; } SetCliplist;
/*** SetEndPoint ***/ typedef struct { short Opcode; /* 0x1700 */ short EndPoint; /* 0 = disabled, 1 = Enabled */ long RcId; /* Rendering context Id */ } SetEndPoint;
/*** SetFgColor ***/ typedef struct { short Opcode; /* 0x0402 */ short Null; long RcId; /* Rendering context Id */ COLOR3 FgColor; /* Foreground color */ } SetFgColor;
/*** SetFillPattern ***/ typedef struct { short Opcode; /* 0x1600 */ short PattMode; /* 0 = disabled, 1 = Enabled */ long RcId; /* Rendering context Id */ char FillPatt[8]; /* Fill pattern data */ } SetFillPattern;
/*** SetLinesStyle ***/ typedef struct { short Opcode; /* 0x0502 */ short LsMode; /* 0 = disabled, 1 = Enabled */ long RcId; /* Rendering context Id */ long LineStyle; /* 32-bit line style */ } SetLineStyle;
/*** SetLinesStyleOffset ***/ typedef struct { short Opcode; /* 0x0600 */ short Offset; /* Offset to shift the pattern when it is */ /* reset (value 0 to 31 */ long RcId; /* Rendering context Id */ } SetLineStyleOffset;
/*** SetLogicOp ***/ #define CLEAR_OP ((word)0x0)
#define NOR ((word)0x1)
#define ANDINVERTED ((word)0x2)
#define REPLACEINVERTED ((word)0x3)
#define ANDREVERSE ((word)0x4)
#define INVERT ((word)0x5)
#define XOR ((word)0x6)
#define NAND ((word)0x7)
#define AND ((word)0x8)
#define EQUIV ((word)0x9)
#define NOOP_OP ((word)0xa)
#define ORINVERTED ((word)0xb)
#define REPLACE ((word)0xc)
#define ORREVERSE ((word)0xd)
#define OR ((word)0xe)
#define SET ((word)0xf)
typedef struct { short Opcode; /* 0x0800 */ short LogicOp; long RcId; /* Rendering context Id */ } SetLogicOp;
/*** SetTransparency ***/ #if !defined(OPAQUE)
#define OPAQUE ((word)0x0)
#endif
#if !defined(TRANSPARENT)
#define TRANSPARENT ((word)0x1)
#endif
typedef struct { short Opcode; /* 0x1400 */ short TranspMode; /* 0 = opaque, 1 = transparent */ long RcId; /* Rendering context Id */ } SetTransparency;
/*** SetTrivialIn ***/ typedef struct { short Opcode; short TrivMode; long RcId; } SetTrivialIn;
/*** Sync ***/ typedef struct { short Opcode; /* 0x0301 */ char Null; char Reserved; long RcId; /* Special RcId set to -1 */ } Sync;
/* -------------------------------------------------------------------
* Screen Opcodes * ------------------------------------------------------------------- */
/*** RenderScPolyline ***/ typedef struct { short Opcode; /* 0x0304 */ short Npts; /* Number of points */ long RcId; /* Rendering context Id */ IPOINT2 Points[1]; /* xy coordinates */ } RenderScPolyline;
/*** RenderScPolygon ***/ typedef struct { short Opcode; /* 0x0404 */ short Npts; /* MUST be 3 or 4 */ long RcId; /* Rendering context Id */ IPOINT2 Points[1]; /* Array of points */ } RenderScPolygon;
/*** SpanLine ***/ typedef struct { short Opcode; /* 0x0204 */ short Null; long RcId; /* Rendering context Id */ long YPosition; /* Vertical screen position */ long XStart; /* Start point (screen coords) */ long XEnd; /* End point (screen coords) */ long ZStart; /* Start Z value (screen coords) */ long ZEnd; /* End Z value (screen coords) */ COLOR3 RGBStart; /* Start RGB value */ COLOR3 RGBEnd; /* End RGB value */ } SpanLine;
/* -------------------------------------------------------------------
* 2D Opcodes * ------------------------------------------------------------------- */
/*** Render2dMultiPolyline ***/ typedef struct { short Opcode; /* 0x0602 */ short Npts; /* Number of points */ long RcId; /* Rendering context Id */ IPOINT2 Data[1]; /* Data consisting of tag fields and xy coords */ } Render2dMultiPolyline;
/*** Render2dMultiPolyline32 ***/ typedef struct { short Opcode; /* 0x0A02 */ short Npts; /* Number of points */ long RcId; /* Rendering context Id */ IPOINT2_32 Data[1]; /* Data consisting of tag fields and xy coords */ } Render2dMultiPolyline32;
/*** Render2dPolygon ***/ typedef struct { short Opcode; /* 0x0302 */ short Npts; /* MUST be 3 or 4 */ long RcId; /* Rendering context Id */ IPOINT2 Points[1]; /* Array of points */ } Render2dPolygon;
/*** Render2dPolygon32 ***/ typedef struct { short Opcode; /* 0x0902 */ short Npts; /* MUST be 3 or 4 */ long RcId; /* Rendering context Id */ IPOINT2_32 Data[1]; /* Array of points */ } Render2dPolygon32;
/*** Set2dViewport ***/ typedef struct { short Opcode; /* 0x0002 */ short Null; long RcId; IPOINT2 XMinYMin; IPOINT2 XMaxYMax; } Set2dViewport;
/*** Set2dWindow ***/ typedef struct { short Opcode; /* 0x0102 */ short Null; long RcId; IPOINT2 XMinYMin; /* upper left hand corner of virtual window */ IPOINT2 XMaxYMax; /* lower right hand corner of virtual window */ } Set2dWindow;
/*** Set2dWindow32 ***/ typedef struct { short Opcode; /* 0x0702 */ short Null; long RcId; IPOINT2_32 XMinYMin; /* upper left hand corner of virtual window */ IPOINT2_32 XMaxYMax; /* lower right hand corner of virtual window */ } Set2dWindow32;
/* -------------------------------------------------------------------
* 3D Opcodes * ------------------------------------------------------------------- */
/*** ChangeMatrix ***/ #define MW 0 /* Modeling to world coordinate matrix */
#define WV 1 /* World to viewing coordinate matrix */
#define VS 2 /* Viewing to screen coordinate matrix */
#define MAT_REPLACE 0 /* Replace M=source */
#define MAT_PREMULT 1 /* Pre-multiply M=source*M */
#define MAT_POSTMULT 2 /* Post-multiply M=M*source */
#define IEEE 0
/* XG3 support declaration */ #define DEVICE_DEPENDANT 1
typedef struct { short Opcode; /* 0x0000 */ short MatrixNo; /* MW, WV or VS */ long RcId; /* index to target Rc */ short Operation; /* 0=Replace, 1=Pre-mult, 2=Post-mult */ short Mode; /* must be 0 = source in IEEE floating point */ MATRIX4 Source; } ChangeMatrix;
/*** RenderPolyline ***/ typedef struct { short Opcode; /* 0x0103 */ short LenVertexList; /* length of VertexList[] in longs */ long RcId; POINT3 Points[1]; /* VertexPosition */ } RenderPolyline;
typedef struct { POINT3 VertexPosition; /* Vertex position */ NORM3 OptVertexNormal; /* Optional vertex normal */ } TileVertexList;
typedef struct { IFLOAT VertexInfo; /* Which vertices are specified */ NORM3 OptTileNormal; /* Optional tile normal */ TileVertexList TileVertexLst[1]; } TileList;
/*** RenderPolyQuad ***/ typedef struct { short Opcode; /* 0x0203 */ short LenTileList; /* Length of TileList in longs */ long RcId; TileList TileLst[1]; } RenderPolyQuad;
/*** RenderPolyTriangle ***/ typedef struct { short Opcode; /* 0x0303 */ short LenTileList; /* Length of tileList[] in longs */ long RcId; TileList TileLst[1]; } RenderPolyTriangle;
/*** SetClip3D defines ***/
#define CLIP_LEFT 0x01
#define CLIP_TOP 0x02
#define CLIP_RIGHT 0x04
#define CLIP_BOTTOM 0x08
#define CLIP_FRONT 0x10
#define CLIP_BACK 0x20
#define CLIP_ALL 0x3f
typedef struct { short Opcode; /* 0x0400 */ short Clip3DPlanes; /* see defines above */ long RcId; } SetClip3D;
/*** SetLightSources ***/ typedef struct { short Opcode; /* 0x0700 */ short LenLSDB; /* Length of LSDB[] in longs */ long RcId; long LSDBId; /* buffer id for sxci to store LSDB */ float LSDB[1]; /* light source description buffer data */ } SetLightSources;
/*** SetRenderData ***/ #define RD_VERTEX_NORMAL (0x1 << 0)
#define RD_TILE_NORMAL (0x1 << 8)
typedef struct { short Opcode; /* 0x1000 */ short Null; long RcId; long OptData; /* see defines above */ NORM3 Reserved; COLOR3 Reserved1; NORM3 Reserved2; } SetRenderData;
/*** SetRenderMode ***/ #define WIREFRAME_NORMAL 0 /* Wireframe - special for AutoCAD */
#define WIREFRAME_ACAD 0 /* Wireframe - special for AutoCAD */
#define FLAT_EXTENDED 8 /* solves double lighting problem of mode 2,
the view direction and viewing matrix must be correctly set */ #define GOURAUD_EXTENDED 9 /* solves double lighting problem of mode 4,
the view direction and viewing matrix must be correctly set */
typedef struct { short Opcode; /* 0x0A00 */ short RenderMode; /* see defines above */ long RcId; } SetRenderMode;
/*** SetSurfaceAttr ***/ typedef struct { short Opcode; /* 0x1100 */ short Null; long RcId; COLOR3 SurfEmission; /* Emission color */ COLOR3 SurfAmbient; /* Ambient reflectivity constant */ COLOR3 SurfDiffuse; /* Diffuse reflectivity constant */ COLOR3 SurfSpecular; /* Specular reflectivity constant */ IFLOAT SurfSpecExp; /* Specular reflectivity exponent */ } SetSurfaceAttr;
#define INFINITE_VIEWER 0
#define LOCAL_VIEWER 1
/*** SetViewer, formerly SetViewDirection ***/ typedef struct { short Opcode; /* 0x0B00 */ short ViewMode; /* mode = 0 infinite viewer */ /* mode = 1 local viewer */ long RcId; POINT3 ViewerPosition; /* Viewer position in world coords */ NORM3 ViewerDirection; /* normalized direction */ } SetViewer;
/*** SetZBuffer ***/ #define ZF_DISABLE ((short)0) /* Z buffering disabled */
#define ZF_ENABLE ((short)1) /* Z buffering enabled */
#define ZF_LESS ((long)0) /* NEVER replace intensity */
#define ZF_LEQUAL ((long)1) /* LESS than or EQUAL */
typedef struct { short Opcode; /* 0x0C00 */ short ZMode; /* 0=disable, 1=enable */ long RcId; long ZFunction; /* 0 = < compares */ } SetZBuffer; /* 1 = <= compares */
/* -------------------------------------------------------------------
* For SXCI.DLL * ------------------------------------------------------------------- */
#define SXCI_2D 2
#define SXCI_3D 3
#define ID_mtxAllocBuffer 1
#define ID_mtxAllocCL 2
#define ID_mtxAllocRC 3
#define ID_mtxAllocLSDB 4
#define ID_mtxFreeBuffer 5
#define ID_mtxFreeCL 6
#define ID_mtxFreeLSDB 7
#define ID_mtxFreeRC 8
#define ID_mtxPostBuffer 9
#define ID_mtxSetCL 10
#define ID_mtxBlendCL 11
#define ID_mtxGetBlockSize 12
#define ID_mtxScScBitBlt 13
#define ID_mtxScMemBitBlt 14
#define ID_mtxMemScBitBlt 15
#define ID_mtxAllocHugeBuffer 16
#define ID_mtxFreeHugeBuffer 17
#define ID_CallCaddiInit 30
#define ID_PassPoolMem 31
|