/***************************************************************************** * * 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