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.
800 lines
34 KiB
800 lines
34 KiB
|
|
/**************************************************************************
|
|
***************************************************************************
|
|
*
|
|
* Copyright (c) 1997, Cirrus Logic, Inc.
|
|
* All Rights Reserved
|
|
*
|
|
* FILE: l3d.h
|
|
*
|
|
* DESCRIPTION: 546X 3D engine defines and structures
|
|
*
|
|
* AUTHOR: Goran Devic, Mark Einkauf
|
|
*
|
|
***************************************************************************
|
|
***************************************************************************/
|
|
#ifndef _L3D_H_
|
|
#define _L3D_H_
|
|
|
|
/*********************************************************************
|
|
* Defines and basic types
|
|
**********************************************************************/
|
|
#ifndef OPENGL_MCD // LL3D's type.h redundant with basic type definitions in other DDK/msdev headers
|
|
#include "type.h" /* Include basic types */
|
|
#endif // ndef OPENGL_MCD
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Library initialization defines
|
|
*
|
|
**********************************************************************/
|
|
#define LL_USE_BUFFER_B 0x0001 /* Use double buffering */
|
|
#define LL_USE_BUFFER_Z 0x0002 /* Use Z buffer */
|
|
#define LL_BUFFER_Z_8BPP 0x0004 /* Use 8bpp instead of 16bpp Z */
|
|
#define LL_BUFFER_Z888 0x0008 /* Only in 32bpp use Z888 */
|
|
#define LL_8BPP_INDEXED 0x0010 /* Only in 8bpp - indexed mode */
|
|
#define LL_HARDWARE_CURSOR 0x0020 /* Use hardware cursor */
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Buffer identification numbers and Z stride info.
|
|
*
|
|
* Used with LL_InitLib()
|
|
*
|
|
**********************************************************************/
|
|
#define LL_ID_BUFFER_A 0 /* ID of the primary buffer */
|
|
#define LL_ID_BUFFER_B 1 /* ID of the secondary buffer */
|
|
#define LL_ID_BUFFER_Z 2 /* ID of the Z buffer in RDRAM */
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Destination defines for the objects
|
|
*
|
|
* Used with LL_SetZBuffer
|
|
*
|
|
**********************************************************************/
|
|
#define LL_IN_RDRAM 0 /* Object is in the RDRAM memory */
|
|
#define LL_IN_HOST 1 /* Object is in Host memory */
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Rendering mode
|
|
*
|
|
* Used with LL_SetRenderingMode
|
|
*
|
|
**********************************************************************/
|
|
#define LL_PROCESSOR_MODE 0 /* Use processor mode */
|
|
#define LL_COPROCESSOR_MODE 1 /* Use coprocessor indirect mode */
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Texture flag values
|
|
*
|
|
* Used with LL_RegisterTexture
|
|
*
|
|
**********************************************************************/
|
|
#define LL_SYSTEM_ONLY 1 /* Put texture in system memory */
|
|
#define LL_VIDEO_ONLY 2 /* Put texture in video memory */
|
|
#define LL_DEFAULT 0 /* Try video, then system */
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Texture types
|
|
*
|
|
* Used with LL_RegisterTexture
|
|
*
|
|
**********************************************************************/
|
|
#define LL_TEX_4BPP 0 /* 4 Bpp indexed */
|
|
#define LL_TEX_8BPP 2 /* 8 Bpp indexed */
|
|
#define LL_TEX_332 3 /* 3:3:2 true color */
|
|
#define LL_TEX_565 4 /* 5:6:5 true color */
|
|
#define LL_TEX_1555 5 /* (mask):5:5:5 true color */
|
|
#define LL_TEX_1888 6 /* (mask):8:8:8 true color */
|
|
#define LL_TEX_8_ALPHA 10 /* alpha only */
|
|
#define LL_TEX_4444 12 /* 4:4:4:4 true color */
|
|
#define LL_TEX_8888 14 /* 8:8:8:8 true color */
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Cursor modes
|
|
*
|
|
* Used with LL_SetCursor
|
|
*
|
|
**********************************************************************/
|
|
#define LL_CUR_DISABLE 0 /* Turn off cursor */
|
|
#define LL_CUR_32x3 1 /* 32x32 cursor, 3 colors/t */
|
|
#define LL_CUR_32x2 2 /* 32x32 cursor, 2 colors */
|
|
#define LL_CUR_32x2H 3 /* 32x32 cursor, 2 colors+hghlt */
|
|
#define LL_CUR_64x3 5 /* 64x64 cursor, 3 colors/t */
|
|
#define LL_CUR_64x2 6 /* 64x64 cursor, 2 colors */
|
|
#define LL_CUR_64x2H 7 /* 64x64 cursor, 2 colors+hghlt */
|
|
|
|
//These are new for CGL 1.70, and are defined in CGL as:
|
|
#define LL_ALT_32x3 0x09
|
|
#define LL_ALT_32x2H 0x0A
|
|
#define LL_ALT_32x2 0x0B
|
|
#define LL_ALT_64x3 0x0D
|
|
#define LL_ALT_64x2H 0x0E
|
|
#define LL_ALT_64x2 0x0F
|
|
|
|
#define NEED_MOUSE_UPDATE 0x01 //if the coordinates of cursor need updated
|
|
#define MOUSE_IS_UPDATED 0x00 //if the coordinates have been updated
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Z Compare modes:
|
|
*
|
|
* Used with LL_SetZCompareMode(mode), LL_GetZCompareMode()
|
|
*
|
|
**********************************************************************/
|
|
#define LL_Z_WRITE_GREATER_EQUAL 0x00000000 /* True if new >= old */
|
|
#define LL_Z_WRITE_GREATER 0x00000001 /* True if new > old */
|
|
#define LL_Z_WRITE_LESS_EQUAL 0x00000002 /* True if new <= old */
|
|
#define LL_Z_WRITE_LESS 0x00000003 /* True if new < old */
|
|
#define LL_Z_WRITE_NOT_EQUAL 0x00000004 /* True if new <> old */
|
|
#define LL_Z_WRITE_EQUAL 0x00000005 /* True if new = old */
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Functional Z modes:
|
|
*
|
|
* Used with LL_SetZMode(mode), LL_GetZMode()
|
|
*
|
|
**********************************************************************/
|
|
#define LL_Z_MODE_NORMAL 0x00000000 /* Normal operation */
|
|
#define LL_Z_MODE_MASK 0x00000001 /* Z not written */
|
|
#define LL_Z_MODE_ALWAYS 0x00000002 /* Z, color always wrt*/
|
|
#define LL_Z_MODE_ONLY 0x00000003 /* Color not written */
|
|
#define LL_Z_MODE_HIT 0x00000004 /* collision dtct only*/
|
|
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Color compare controls
|
|
*
|
|
* Used with LL_ColorBoundsControl( dwControl)
|
|
*
|
|
**********************************************************************/
|
|
#define LL_COLOR_SATURATE_ENABLE 0x00000040 /* for indexed mode */
|
|
#define LL_COLOR_SATURATE_DISABLE 0x00000000 /* (default) */
|
|
|
|
#define LL_COLOR_COMPARE_INCLUSIVE 0x00000400 /* tc modes */
|
|
#define LL_COLOR_COMPARE_EXCLUSIVE 0x00000000 /* tc modes (default) */
|
|
#define LL_COLOR_COMPARE_BLUE 0x00000200 /* blue (default off) */
|
|
#define LL_COLOR_COMPARE_GREEN 0x00000100 /* green (default off)*/
|
|
#define LL_COLOR_COMPARE_RED 0x00000080 /* red (default off) */
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Notes on Alpha blending and Lighting section:
|
|
*
|
|
* If used separately, every combination of alpha mode and destination
|
|
* is valid. Note that if LL_ALPHA_DEST_INTERP or LL_LIGHTING_INTERP_RGB
|
|
* are selected, color interpolators may not be used.
|
|
*
|
|
* When using alpha blending and lighting at the same time, be careful
|
|
* not to use Polyeng or LA-interpolators more than once.
|
|
*
|
|
**********************************************************************/
|
|
/*********************************************************************
|
|
*
|
|
* Alpha mode: Magnitude of alpha blending will be taken from
|
|
* - constant alpha, use LL_SetConstantAlpha(src/new,dest/old)
|
|
* this mode uses LA-interpolators
|
|
* - interpolated, variable alpha from LA-interpolators
|
|
* this mode also uses LA-interpolators
|
|
* - alpha field from the frame buffer
|
|
*
|
|
* Used with LL_SetAlphaMode(mode), LL_GetAlphaMode()
|
|
*
|
|
**********************************************************************/
|
|
#define LL_ALPHA_CONST 0x00000000 /* Constant alpha */
|
|
#define LL_ALPHA_TEXTURE 0x00000001 /* Texture alpha */
|
|
#define LL_ALPHA_INTERP 0x00000002 /* Using LA interp. */
|
|
#define LL_ALPHA_FRAME 0x00000003 /* Using frame values */
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Alpha destination: Selects where the second color input to the
|
|
* alpha multiplier comes from
|
|
* - color from the frame buffer ("normal" alpha blending)
|
|
* - constant color (also called fog) from COLOR0 register
|
|
* - interpolated, shaded color from the polygon engine (also fog)
|
|
* also LL_GOURAUD must be set in the flags
|
|
* this mode uses Polyengine color registers
|
|
*
|
|
* Fog: Use aliases LL_FOG_CONST and LL_FOG_INTERP to avoid fetching
|
|
* colors from the frame and to set the fog color.
|
|
*
|
|
* Used with LL_SetAlphaDestColor(mode), LL_GetAlphaDestColor()
|
|
*
|
|
**********************************************************************/
|
|
#define LL_ALPHA_DEST_FRAME 0x00000000 /* Using frame color */
|
|
#define LL_ALPHA_DEST_CONST 0x00000001 /* Constant color */
|
|
#define LL_ALPHA_DEST_INTERP 0x00000002 /* Using poly engine */
|
|
|
|
#define LL_FOG_CONST 0x00000001 /* Constant fog */
|
|
#define LL_FOG_INTERP 0x00000002 /* Using poly engine */
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Lighting source: Selects the value for the lighting multiplier
|
|
* - interpolated light from the polygon engine
|
|
* load lighting values as r,g,b components
|
|
* also LL_GOURAUD must be set in the flags
|
|
* this mode uses Polyengine color registers
|
|
* - interpolated light from the alpha interpolator
|
|
* load lighting values as alpha components
|
|
* this mode uses LA-interpolators
|
|
* - constant light from the COLOR1 register
|
|
*
|
|
* Used with LL_SetLightingSource(mode), LL_GetLightingSource()
|
|
*
|
|
**********************************************************************/
|
|
#define LL_LIGHTING_INTERP_RGB 0x00000000 /* Using poly engine */
|
|
#define LL_LIGHTING_INTERP_ALPHA 0x00000001 /* Using LA interp. */
|
|
#define LL_LIGHTING_CONST 0x00000002 /* Constant light */
|
|
#define LL_LIGHTING_TEXTURE 0x00000003 /* FrameScaling Mode */
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Rendering instruction modifiers
|
|
*
|
|
* Used in dwFlags field with LL_POINT...LL_INDEXED_POLY
|
|
*
|
|
**********************************************************************/
|
|
#define LL_SAME_COLOR 0x00008000 /* Use previously loaded color */
|
|
#define LL_Z_BUFFER 0x00002000 /* Use Z buffer */
|
|
#define LL_ALPHA 0x00000001 /* Do Alpha blending */
|
|
#define LL_LIGHTING 0x00040000 /* Do lighting */
|
|
#define LL_STIPPLE 0x00080000 /* Enable stipple or */
|
|
#define LL_PATTERN 0x00100000 /* Enable pattern or */
|
|
#define LL_DITHER 0x00200000 /* Enable dither,use PATTERN_RAM */
|
|
#define LL_GOURAUD 0x00001000 /* Enable Gouraud shading */
|
|
#define LL_TEXTURE 0x00020000 /* Use texture mapping */
|
|
#define LL_PERSPECTIVE 0x00010000 /* Perspective corrected texture */
|
|
#define LL_TEX_FILTER 0x40000000 /* Filtered textures */
|
|
#define LL_TEX_SATURATE 0x20000000 /* Texture saturation (opp wrap) */
|
|
#define LL_TEX_DECAL 0x10000000 /* Texture masking (1555,1888) */
|
|
#define LL_TEX_DECAL_INTERP 0x18000000 /*Texture masking (1555,1888)*/
|
|
|
|
//positions in TxCtl0_3D register
|
|
#define CLMCD_TEX_FILTER 0x00040000 /* Filtered textures */
|
|
#define CLMCD_TEX_U_SATURATE 0x00000008 /* Texture saturation (opp wrap) */
|
|
#define CLMCD_TEX_V_SATURATE 0x00000080 /* Texture saturation (opp wrap) */
|
|
#define CLMCD_TEX_DECAL 0x00200000 /* Texture masking (1555,1888) */
|
|
#define CLMCD_TEX_DECAL_INTERP 0x00400000 /* Texture masking (1555,1888) */
|
|
#define CLMCD_TEX_DECAL_POL 0x00100000 /* Texture masking (1555,1888) */
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Type of the line mesh:
|
|
* - lines are concatenated, each reusing the predecessor's
|
|
* vertex as its first vertex
|
|
* - first vertex defines the center of a "wheel" structure with
|
|
* each succesive vertex defining the outer point
|
|
* - list of independent pairs of vertices
|
|
*
|
|
**********************************************************************/
|
|
#define LL_LINE_STRIP 0x02000000 /* Line strip mesh of lines */
|
|
#define LL_LINE_FAN 0x01000000 /* Line fan mesh of lines */
|
|
#define LL_LINE_LIST 0x00000000 /* Line list mesh of lines */
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Type of the polygon mesh:
|
|
* - triangles are concatenated, each reusing the predecessor's
|
|
* last two vertices as its own first two
|
|
* - first vertex defines the center of a "wheel" structure with
|
|
* each succesive vertex pair defining the outer points
|
|
* - list of independent triplets of vertices
|
|
*
|
|
**********************************************************************/
|
|
#define LL_POLY_STRIP 0x02000000 /* Poly strip mesh of triangles */
|
|
#define LL_POLY_FAN 0x01000000 /* Poly fan mesh of triangles */
|
|
#define LL_POLY_LIST 0x00000000 /* Poly list mesh of triangles */
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* Commands for the bOp field of a batch cell
|
|
*
|
|
***************************************************************************/
|
|
#define LL_IDLE 0x00 /* Stops Laguna execution */
|
|
#define LL_NOP 0x01 /* Does nothing */
|
|
|
|
#define LL_POINT 0x02 /* Point primitive(s) */
|
|
#define LL_LINE 0x03 /* Line primitive(s) */
|
|
#define LL_POLY 0x04 /* Triangle primitive(s) */
|
|
|
|
#define LL_SET_COLOR0 0x08 /* Sets color0 register w/dwFlags*/
|
|
#define LL_SET_COLOR1 0x09 /* Sets color1 register w/dwFlags*/
|
|
|
|
#define LL_SET_DEST_COLOR_BOUNDS 0x0B /* Sets the color bounds regs */
|
|
#define LL_SET_CLIP_REGION 0x0C /* Sets clip region and flags */
|
|
#define LL_SET_Z_MODE 0x0D /* Sets the Z functional mode */
|
|
#define LL_SET_Z_BUFFER 0x0E /* Sets the location of the Zbuf */
|
|
#define LL_SET_Z_COMPARE_MODE 0x0F /* Sets the Z compare mode */
|
|
#define LL_SET_ALPHA_MODE 0x10 /* Sets the alpha blending mode */
|
|
#define LL_SET_CONSTANT_ALPHA 0x11 /* Sets the constants for alpha */
|
|
#define LL_SET_ALPHA_DEST_COLOR 0x12 /* Sets the alpha destination col*/
|
|
#define LL_SET_LIGHTING_SOURCE 0x13 /* Sets the lighting source */
|
|
#define LL_AALINE 0x14 /* Anti-aliased True Color Line(s*/
|
|
#define LL_RAW_DATA 0x15 /* Copy data into d-list */
|
|
#define LL_QUALITY 0x16 /* Sets the speed/quality dial */
|
|
#define LL_SET_TEXTURE_COLOR_BOUNDS 0x17 /* Sets the texture color bounds */
|
|
#define LL_SET_PATTERN 0x18 /* Sets pattern registers */
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* LL_Vert structure defines a vertex with its X,Y,Z coordinates.
|
|
* Also, the coordinates on the texture that may be associated with
|
|
* it are also stored in this structure as (U,V) fields. If the
|
|
* texture is perspective corrected, the vertex' W factor is used.
|
|
*
|
|
* The pixel on the screen that is associated with this vertex has
|
|
* color 'index' (if THE indexed mode is used), or (r,g,b) if a true
|
|
* color mode is used.
|
|
*
|
|
* If alpha blending is used, alpha value is stored in the 'a' field.
|
|
*
|
|
* Add DWORD values are fixed point 16:16.
|
|
*
|
|
**********************************************************************/
|
|
typedef struct /* Vertex structure */
|
|
{
|
|
DWORD x; /* X screen coordinate */
|
|
DWORD y; /* Y screen coordinate */
|
|
DWORD z; /* Z coordinate */
|
|
DWORD u; /* Texture u coordinate */
|
|
DWORD v; /* Texture v coordinate */
|
|
float w; /* Perspective w factor */
|
|
|
|
union
|
|
{
|
|
BYTE index; /* Indexed color value */
|
|
struct
|
|
{
|
|
BYTE r; /* Red component */
|
|
BYTE g; /* Green component */
|
|
BYTE b; /* Blue component */
|
|
BYTE a; /* Alpha component */
|
|
};
|
|
};
|
|
|
|
} LL_Vert;
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* LL_Batch structure holds the operation that is being requested,
|
|
* along with its parameters.
|
|
*
|
|
* The array of the vertices used in the current operation
|
|
* is pointed to by pVert pointer.
|
|
*
|
|
**********************************************************************/
|
|
typedef struct /* Batch cell structure */
|
|
{
|
|
BYTE bOp; /* Operation requested */
|
|
BYTE bRop; /* Raster operation for 2D */
|
|
WORD wBuf; /* Texture / Buffer designator */
|
|
WORD wCount; /* General purpose counter */
|
|
DWORD dwFlags; /* Operation flag modifiers */
|
|
LL_Vert *pVert; /* Pointer to the associated */
|
|
/* array of vertices */
|
|
} LL_Batch;
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* LL_Pattern structure holds the pattern to be stored in the
|
|
* PATTERN_RAM registers. These values are used for pattern,
|
|
* dither or stipple (only one at a time).
|
|
*
|
|
**********************************************************************/
|
|
typedef struct /* pattern holding structure */
|
|
{
|
|
DWORD pat[ 8 ]; /* 8 word pattern */
|
|
|
|
} LL_Pattern;
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* LL_Rect structure defines a general rectangular region
|
|
*
|
|
**********************************************************************/
|
|
typedef struct
|
|
{
|
|
DWORD left; /* x1 */
|
|
DWORD top; /* y1 */
|
|
DWORD right; /* x2 */
|
|
DWORD bottom; /* y2 */
|
|
|
|
} LL_Rect;
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* LL_Color structure defines color by its components or index
|
|
*
|
|
**********************************************************************/
|
|
typedef struct
|
|
{
|
|
union
|
|
{
|
|
struct /* If in true color mode, */
|
|
{
|
|
BYTE r; /* Red component */
|
|
BYTE g; /* Green component */
|
|
BYTE b; /* Blue component */
|
|
};
|
|
BYTE index; /* Index if in 8bpp indexed mode */
|
|
};
|
|
|
|
} LL_Color;
|
|
|
|
typedef struct {
|
|
float x;
|
|
float y;
|
|
float w;
|
|
float u;
|
|
float v;
|
|
} TEXTURE_VERTEX;
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* LL_Texture structure defines a texture map
|
|
*
|
|
**********************************************************************/
|
|
typedef struct _LL_Texture
|
|
{
|
|
void *pohTextureMap; // control block for region containing map in offscreen memory
|
|
MCDTEXTURE *pTex; // ptr to texture in user memory
|
|
// LL_Color * ColPalette; /* Pointer to palette if indexed */
|
|
// BYTE bMem; /* Index to the texture memory block */
|
|
DWORD dwTxCtlBits;
|
|
float fWidth; /* Texture X dimension in texels */
|
|
float fHeight; /* Texture Y dimension in texels */
|
|
BYTE bSizeMask; /* Encoded size 0=16,... Y[7:4],X[3:0] */
|
|
BYTE bType; /* Texture type */
|
|
// BYTE fIndexed; /* True for indexed textures */
|
|
// BYTE bLookupOffset; /* Palette lookup offset (indexed only)*/
|
|
WORD wXloc; /* X offset location in bytes */
|
|
WORD wYloc; /* Y offset location in lines */
|
|
float fLastDrvDraw; /* time stamp, sort of */
|
|
|
|
BYTE bAlphaInTexture;
|
|
BYTE bNegativeMap;
|
|
BYTE bMasking;
|
|
|
|
// doubly linked list pointers
|
|
struct _LL_Texture* prev;
|
|
struct _LL_Texture* next;
|
|
|
|
} LL_Texture;
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* LL_DeviceState structure hold the information about the state
|
|
* of the graphics processor (hardware).
|
|
*
|
|
* During the library initialization, the following fields have to
|
|
* be initialized:
|
|
*
|
|
* dwFlags with optional
|
|
* LL_USE_BUFFER_B or
|
|
* LL_USE_BUFFER_Z or
|
|
* LL_BUFFER_Z_8BPP or
|
|
* LL_BUFFER_Z888 or
|
|
* LL_8BPP_INDEXED or
|
|
* LL_HARDWARE_CURSOR
|
|
*
|
|
* dwDisplayListLen with the amount of memory to lock for the
|
|
* physical graphics device display list (in bytes).
|
|
*
|
|
* dwSystemTexturesLen with the total size for the system
|
|
* textures (in bytes)
|
|
*
|
|
**********************************************************************/
|
|
typedef struct
|
|
{
|
|
/* These three fields may be set before calling the LL_InitLib function */
|
|
|
|
DWORD dwFlags; /* Init flags */
|
|
DWORD dwDisplayListLen; /* Total size for the display lists in bytes */
|
|
DWORD dwSystemTexturesLen; /* Total size for the system textures in bytes */
|
|
|
|
/* These variables may be used by the software */
|
|
|
|
DWORD *pRegs; /* Register apperture, pointer to memory mappped I/O */
|
|
BYTE *pFrame; /* Frame apperture, pointer to the linear frame buffer */
|
|
DWORD dwVRAM; /* Amount of video memory on the card in bytes */
|
|
WORD wHoriz; /* Current horizontal resolution */
|
|
WORD wVert; /* Current vertical resolution */
|
|
|
|
} LL_DeviceState;
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* LL_Point structure defines a general point coordinates
|
|
*
|
|
**********************************************************************/
|
|
typedef struct
|
|
{
|
|
DWORD nX; /* x coordinate */
|
|
DWORD nY; /* y coordinate */
|
|
|
|
} LL_Point;
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Font support structures and macros
|
|
*
|
|
**********************************************************************/
|
|
typedef struct // Font header structure
|
|
{
|
|
WORD nMinimum; // Font minimum character code value
|
|
WORD nMaximum; // Font maximum character code value
|
|
WORD nDefault; // Font default character code value
|
|
WORD nHeight; // Font height in pixels
|
|
DWORD nReserved; // Font reserved data
|
|
WORD nIndex[]; // Font index array
|
|
|
|
} LL_FontHeader;
|
|
|
|
|
|
typedef struct // Font structure
|
|
{
|
|
LL_FontHeader *pHeader; // Pointer to font header
|
|
BYTE *pBitmap; // Pointer to font bitmap
|
|
int nID; // Font buffer ID value
|
|
char cBreak; // Break character value
|
|
int nExtra; // Current break extra in pixels
|
|
int nLast; // Previous break extra in pixels
|
|
int nSpace; // Current font spacing in pixels
|
|
int nPrevious; // Previous font spacing in pixels
|
|
int nAverage; // Average font width in pixels
|
|
int nMaximum; // Maximum font width in pixels
|
|
|
|
} LL_Font;
|
|
|
|
#define Y_EXTENT(Extent) ((unsigned) (Extent) >> 16)
|
|
#define X_EXTENT(Extent) ((Extent) & 0xFFFF)
|
|
|
|
#define TEX_MASK_EN 0x00200000
|
|
#define TEX_HIPRECISION_2NDORDER 0x00800000 // 8.24 vs. 16.16 2nd order terms
|
|
|
|
#ifdef CGL // Goran will have equivalent soon??...
|
|
|
|
#define LL_PIXEL_MASK_DISABLE 0x00000000
|
|
#define LL_PIXEL_MASK_ENABLE 0x00000001
|
|
|
|
// TX_CTL0_3D values
|
|
#define LL_TEX_U_OVF_SAT_EN 0x00000004
|
|
#define LL_TEX_V_OVF_SAT_EN 0x00000080
|
|
#define LL_TEXMODE_A888 0x00000600
|
|
#define LL_TEXMODE_A555 0x00000500
|
|
#define LL_TEXMODE_565 0x00000400 // not used by CGL
|
|
#define LL_TEXMODE_332 0x00000300
|
|
#define LL_TEXMODE_8MAP 0x00000200
|
|
#define LL_TEXMODE_4MAP 0x00000000 // not used by CGL
|
|
|
|
#define TEX_MASK_FUNC 0x00400000
|
|
#define TEX_MASK_EN 0x00200000
|
|
#define TEX_MASK_POL 0x00100000
|
|
#define TEX_HIPRECISION_2NDORDER 0x00800000 // 8.24 vs. 16.16 2nd order terms
|
|
|
|
#define LL_TEX_FILTER_ENABLE 0x00040000
|
|
|
|
// TX_CTL1_3D values
|
|
#define CCOMP_INCLUSIVE 0x08000000
|
|
#define TX_BLU_COMP 0x04000000
|
|
#define TX_GRN_COMP 0x02000000
|
|
#define TX_RED_COMP 0x01000000
|
|
|
|
#define ABS(a) (((a) < 0) ? -(a) : (a))
|
|
|
|
#endif // CGL
|
|
|
|
// BEGIN Chris' additions //
|
|
typedef unsigned long ULONG; //
|
|
typedef ULONG * PULONG ; //
|
|
typedef unsigned short UWORD ; //
|
|
typedef UWORD * PUWORD ; //
|
|
typedef unsigned char UBYTE; //
|
|
typedef UBYTE * PUBYTE; //
|
|
typedef struct { //
|
|
unsigned char bBlue,bGreen,bRed,bAlpha; //
|
|
} LL_COLOR_ST;//this mimics the CGL_COLOR_ST.Should we include CGL in this library instead of mimicing this struct?//
|
|
#define num_of_regs 42 //
|
|
#define num_of_insignificant_regs 46 //
|
|
#define num_of_modes 70 //
|
|
|
|
#define LL_DISABLE 0x00
|
|
#define LL_32x32x3 0x01
|
|
#define LL_32x32x2HL 0x02
|
|
#define LL_32x32x2 0x03
|
|
#define LL_64x64x3 0x05
|
|
#define LL_64x64x2HL 0x06
|
|
#define LL_64x64x2 0x07
|
|
|
|
// following was moved here from setmode.c
|
|
#ifdef B4_REALHW
|
|
/* Defines the code for the 5462 chip that is the underlying */
|
|
/* hardware for the testing before 5464 comes out. This code should */
|
|
/* then be modified to reflect real code returned by the BIOS */
|
|
/* function 12h subfunction 80h (Inquire VGA type) */
|
|
#define EBIOS_CLGD5462 0x60 /* BIOS Laguna 1 signature */
|
|
#define EBIOS_CLGD5464 0xD4 /* BIOS Laguna 3D signature */
|
|
#define EBIOS_CLGD5464B 0xD0 /* BIOS Laguna 3D alt signature */
|
|
#else
|
|
/* Defines the code for the 5462 chip that is the underlying */
|
|
/* hardware for the testing before 5464 comes out. This code should */
|
|
/* then be modified to reflect real code returned by the BIOS */
|
|
/* function 12h subfunction 80h (Inquire VGA type) */
|
|
#define EBIOS_CLGD5462 0x60 /* BIOS Laguna 1 signature */
|
|
#define EBIOS_CLGD5464 0x64 /* BIOS Laguna 3D signature */
|
|
#define EBIOS_CLGD5464B 0x61 /* BIOS Laguna 3D alt signature */
|
|
#endif
|
|
|
|
// END Chris' additions
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Error codes
|
|
*
|
|
**********************************************************************/
|
|
#define LL_OK 0x0000 // There was no error
|
|
#define LL_ERROR 0xffffffff // Generic error prefix
|
|
|
|
#define LLE_PCX_FILE_OPEN 0x0002 // Error opening file
|
|
#define LLE_PCX_READ_HEADER 0x0003 // Error reading the header
|
|
#define LLE_PCX_NOT_SUITABLE 0x0004 // Not a suitable PCX file
|
|
#define LLE_PCX_PALETTE_READ 0x0005 // Error reading the palette
|
|
#define LLE_PCX_PALETTE_SEEK 0x0006 // Error seeking the palette
|
|
#define LLE_PCX_ALLOC_PALETTE 0x0007 // Error allocating memory
|
|
|
|
#define LLE_TEX_ALLOC 0x0008 // Texture memory allocation failure
|
|
#define LLE_TEX_BAD_ID 0x0009 // Invalid texture ID
|
|
#define LLE_TEX_TOO_MANY 0x000a // Too many textures
|
|
#define LLE_TEX_DIMENSION 0x000b // Invalid texture dimensions
|
|
#define LLE_TEX_TYPE 0x000c // Invalid texture type
|
|
#define LLE_TEX_STORAGE 0x000d // Invalid storage type
|
|
#define LLE_TEX_LOCKED 0x000e // Use of locked texture
|
|
#define LLE_TEX_NOT_LOCKED 0x000f // Unlocking of unlocked texture
|
|
|
|
#define LLE_BUF_CONFIG 0x0010 // Wrong buffers configuration
|
|
#define LLE_BUF_PITCH 0x0011 // Invalid buffer pitch
|
|
#define LLE_BUF_NUM 0x0012 // Too many buffers
|
|
#define LLE_BUF_ALLOC 0x0013 // Error allocating buffer
|
|
#define LLE_BUF_BAD_ID 0x0014 // Invalid buffer ID
|
|
#define LLE_BUF_FREE 0x0015 // Buffer already free
|
|
#define LLE_BUF_FREE_VIDEO 0x0016 // Cannot free a buffer in vram
|
|
#define LLE_BUF_NOT_ALLOC 0x0017 // Buffer was not allocated
|
|
|
|
#define LLE_INI_NOT_LAGUNA 0x0018 // Wrong hardware (from extended BIOS)
|
|
#define LLE_INI_MODE 0x0019 // Invalid graphcs mode
|
|
#define LLE_INI_DL_LEN 0x001a // Invalid display list size
|
|
#define LLE_INI_ALLOC_DL 0x001b // D-list allocation error
|
|
#define LLE_INI_Z_BUFFER 0x001c // Invalid Z buffer placement
|
|
|
|
#define LLE_FON_LOAD 0x001d // Error loading font
|
|
#define LLE_FON_ALLOC 0x001e // Error allocating font memory
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Function prototypes
|
|
*
|
|
**********************************************************************/
|
|
|
|
// Init/Execute Functions
|
|
//
|
|
extern DWORD LL_InitLib( VOID *ppdev );
|
|
#ifndef CGL // modemon way (mode.ini)
|
|
extern DWORD LL_InitGraph( LL_DeviceState *DC, char *sController, char *sMode );
|
|
#else // cgl's dll (embedded mode tables)
|
|
extern DWORD LL_InitGraph( LL_DeviceState *DC, char *sController, int Mode );
|
|
#endif
|
|
extern DWORD LL_CloseGraph( LL_DeviceState *DC );
|
|
extern void LL_QueueOp( LL_Batch *pBatch );
|
|
extern void LL_Execute( LL_Batch * pBatch );
|
|
extern void LL_Wait();
|
|
extern void LL_SetRenderingMode( DWORD dwMode );
|
|
#ifndef CGL // CGL has own version as of 6/24/96 - ChrisS may merge
|
|
extern void LL_SetPalette( LL_Color * Col, BYTE first, int count );
|
|
#endif
|
|
extern BYTE LL_SpeedQualityDial( int SpeedQuality );
|
|
|
|
// Buffer Functions
|
|
//
|
|
extern DWORD LL_AllocSystemBuffer( DWORD Xdim, DWORD Ydim, DWORD pitch );
|
|
extern DWORD LL_RegisterUserBuffer( BYTE * pMem, DWORD Xdim, DWORD Ydim, DWORD pitch );
|
|
extern DWORD LL_FreeSystemBuffer( DWORD dwBufID );
|
|
|
|
// Texture Management Functions
|
|
//
|
|
#ifndef CGL
|
|
extern DWORD LL_RegisterTexture( DWORD dwFlags, WORD wWidth, WORD wHeight, BYTE bType );
|
|
#else
|
|
extern DWORD LL_RegisterTexture( DWORD dwFlags, WORD wWidth, WORD wBufWidth, WORD wHeight, BYTE bType, DWORD dwAddress );
|
|
#endif
|
|
extern DWORD LL_FreeTexture( DWORD dwID );
|
|
extern LL_Texture * LL_LockTexture( DWORD dwID );
|
|
extern DWORD LL_UnLockTexture( DWORD dwID );
|
|
extern DWORD LL_SetTexturePaletteOffset( DWORD dwID, BYTE bOffset );
|
|
extern void UpdateTextureInfo();
|
|
|
|
|
|
// Control Functions
|
|
//
|
|
extern void LL_SetZBuffer( DWORD buf_num );
|
|
extern void LL_SetZCompareMode( DWORD dwZCompareMode );
|
|
extern DWORD LL_GetZCompareMode();
|
|
extern void LL_SetZMode( DWORD dwZMode );
|
|
extern DWORD LL_GetZMode();
|
|
extern void LL_SetAlphaMode( DWORD dwAlphaMode );
|
|
extern DWORD LL_GetAlphaMode();
|
|
extern void LL_SetAlphaDestColor( DWORD dwAlphaDestColor );
|
|
extern DWORD LL_GetAlphaDestColor();
|
|
extern void LL_SetLightingSource( DWORD dwLighting );
|
|
extern DWORD LL_GetLightingSource();
|
|
extern void LL_SetClipRegion( LL_Rect * rect );
|
|
extern void LL_GetClipRegion( LL_Rect * rect );
|
|
extern void LL_SetPattern( LL_Pattern *Pattern );
|
|
extern void LL_GetPattern( LL_Pattern *Pattern );
|
|
extern void LL_SetPatternOffset( BYTE bOffsetX, BYTE bOffsetY );
|
|
extern void LL_GetPatternOffset( BYTE * pbOffsetX, BYTE * pbOffsetY );
|
|
|
|
extern void LL_SetTextureColorBounds( DWORD dwControl, LL_Color * Min, LL_Color * Max );
|
|
extern void LL_SetDestColorBounds( DWORD dwControl, LL_Color * Min, LL_Color * Max );
|
|
|
|
extern void LL_SetColor0( DWORD dwColor0 );
|
|
extern void LL_SetColor1( DWORD dwColor1 );
|
|
extern void LL_GetColorRegisters( DWORD * pdwColor0, DWORD * pdwColor1 );
|
|
extern void LL_SetConstantAlpha( WORD wSource, WORD wDestination );
|
|
|
|
// Hardware cursor / Mouse functions
|
|
//
|
|
#ifndef CGL // CGL has own version as of 6/24/96 - ChrisS may merge
|
|
extern void LL_SetCursor( BYTE bMode, LL_Color * pColor, BYTE * pbCursor);
|
|
extern void LL_SetCursorPos( WORD wX, WORD wY );
|
|
#endif // CGL
|
|
extern void LL_GetMouseStatus( WORD * pwX, WORD * pwY, WORD * pwButtons );
|
|
extern void LL_SetMouseCallback( void (far *fnCallback)( WORD wX, WORD wY, WORD wButtons ) );
|
|
extern void LL_SetCursorHotSpot( BYTE bX, BYTE bY );
|
|
|
|
// Font functions
|
|
//
|
|
extern LL_Font * LL_FontLoad( char * pName );
|
|
extern LL_Font * LL_FontUnload( LL_Font * pFont );
|
|
extern int LL_FontExtent( LL_Font * pFont, char * pString );
|
|
extern int LL_FontWrite( LL_Font * pFont, LL_Point * pPoint, LL_Rect * pClip, char *pString );
|
|
|
|
// Support Functons
|
|
//
|
|
extern void DumpDisplayList( DWORD *pPtr, DWORD dwLen );
|
|
extern DWORD LL_PCX_Load( LL_Texture * pTex, char * sName, WORD wAlphaIndex );
|
|
extern DWORD LL_PCX_Load_Buffer( DWORD dwBufID, char * sName, WORD wAlphaIndex, BYTE bType );
|
|
extern char * LL_ErrorStr( DWORD error_code );
|
|
|
|
|
|
|
|
#endif // _L3D_H_
|