RAVE.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:76k
- /*
- File: RAVE.h
-
- Contains: Interface for RAVE (Renderer Acceleration Virtual Engine)
-
- Version: Technology: Quickdraw 3D 1.6
- Release: QuickTime 6.0.2
-
- Copyright: (c) 1995-2001 by Apple Computer, Inc., all rights reserved.
-
- Bugs?: For bug reports, consult the following page on
- the World Wide Web:
-
- http://developer.apple.com/bugreporter/
-
- */
- #ifndef __RAVE__
- #define __RAVE__
- #ifndef __CONDITIONALMACROS__
- #include "ConditionalMacros.h"
- #endif
- #if TARGET_OS_MAC
- #ifndef __MACTYPES__
- #include "MacTypes.h"
- #endif
- #ifndef __QUICKDRAW__
- #include "Quickdraw.h"
- #endif
- #ifndef __QDOFFSCREEN__
- #include "QDOffscreen.h"
- #endif
- #endif /* TARGET_OS_MAC */
- #if TARGET_OS_WIN32
- #include "windows.h"
- #ifndef RAVE_NO_DIRECTDRAW
- #include "ddraw.h"
- #endif /* !defined(RAVE_NO_DIRECTDRAW) */
- #endif /* TARGET_OS_WIN32 */
- #if PRAGMA_ONCE
- #pragma once
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if PRAGMA_IMPORT
- #pragma import on
- #endif
- #if PRAGMA_STRUCT_ALIGN
- #pragma options align=power
- #elif PRAGMA_STRUCT_PACKPUSH
- #pragma pack(push, 2)
- #elif PRAGMA_STRUCT_PACK
- #pragma pack(2)
- #endif
- #if PRAGMA_ENUM_ALWAYSINT
- #if defined(__fourbyteints__) && !__fourbyteints__
- #define __RAVE__RESTORE_TWOBYTEINTS
- #pragma fourbyteints on
- #endif
- #pragma enumsalwaysint on
- #elif PRAGMA_ENUM_OPTIONS
- #pragma option enum=int
- #elif PRAGMA_ENUM_PACK
- #if __option(pack_enums)
- #define __RAVE__RESTORE_PACKED_ENUMS
- #pragma options(!pack_enums)
- #endif
- #endif
- #define RAVE_OBSOLETE 0
- /******************************************************************************
- *
- * Platform macros.
- * This sets kQAPlatform to one of kQAMacOS, kQAWin32, or kQAGeneric.
- * kQAPlatform controls platform-specific compilation switches and types.
- *
- *****************************************************************************/
- #if !defined(kQAMacOS)
- #define kQAMacOS 1 /* Target is MacOS */
- #endif
- #if !defined(kQAGeneric)
- #define kQAGeneric 2 /* Target is generic platform */
- #endif
- #if !defined(kQAWin32)
- #define kQAWin32 3 /* Target is Win32 */
- #endif
- #if defined(_WIN32) || defined(_WINDOWS)
- #define kQAPlatform kQAWin32
- #elif !defined(kQAPlatform)
- #define kQAPlatform kQAMacOS
- #endif
- /******************************************************************************
- *
- * Export Control
- *
- *****************************************************************************/
- #if defined(_MSC_VER)
- /* Microsoft Visual C */
- #if defined(WIN32_RAVEEXPORTING)
- /* define when building DLL */
- #define RAVE_EXPORT __declspec( dllexport )
- #define RAVE_CALL
- #define RAVE_CALLBACK
- #else
- #define RAVE_EXPORT __declspec( dllimport )
- #define RAVE_CALL __cdecl
- #define RAVE_CALLBACK __cdecl
- #endif
- /* WIN32_RAVEEXPORTING */
- #else
- #define RAVE_EXPORT
- #define RAVE_CALL
- #define RAVE_CALLBACK
- #endif
- /* _MSC_VER */
- /******************************************************************************
- *
- * Platform dependent datatypes: TQAImagePixelType, TQADevice, TQAClip, and TQARect.
- *
- *****************************************************************************/
- enum TQAImagePixelType {
- kQAPixel_Alpha1 = 0, /* 1 bit/pixel alpha */
- kQAPixel_RGB16 = 1, /* 16 bits/pixel, R=14:10, G=9:5, B=4:0 */
- kQAPixel_ARGB16 = 2, /* 16 bits/pixel, A=15, R=14:10, G=9:5, B=4:0 */
- kQAPixel_RGB32 = 3, /* 32 bits/pixel, R=23:16, G=15:8, B=7:0 */
- kQAPixel_ARGB32 = 4, /* 32 bits/pixel, A=31:24, R=23:16, G=15:8, B=7:0 */
- kQAPixel_CL4 = 5, /* 4 bit color look up table, always big endian, ie high 4 bits effect left pixel */
- kQAPixel_CL8 = 6, /* 8 bit color look up table */
- kQAPixel_RGB16_565 = 7, /* Win32 ONLY 16 bits/pixel, no alpha, R:5, G:6, B:5 */
- kQAPixel_RGB24 = 8, /* Win32 ONLY 24 bits/pixel, no alpha, R:8, G:8, B:8 */
- kQAPixel_RGB8_332 = 9, /* 8 bits/pixel, R=7:5, G = 4:2, B = 1:0 */
- kQAPixel_ARGB16_4444 = 10, /* 16 bits/pixel, A=15:12, R=11:8, G=7:4, B=3:0 */
- kQAPixel_ACL16_88 = 11, /* 16 bits/pixel, A=15:8, CL=7:0, 8 bit alpha + 8 bit color lookup */
- kQAPixel_I8 = 12, /* 8 bits/pixel, I=7:0, intensity map (grayscale) */
- kQAPixel_AI16_88 = 13, /* 16 bits/pixel, A=15:8, I=7:0, intensity map (grayscale) */
- kQAPixel_YUVS = 14, /* 16 bits/pixel, QD's kYUVSPixelFormat (4:2:2, YUYV ordering, unsigned UV) */
- kQAPixel_YUVU = 15, /* 16 bits/pixel, QD's kYUVUPixelFormat (4:2:2, YUYV ordering, signed UV) */
- kQAPixel_YVYU422 = 16, /* 16 bits/pixel, QD's kYVYU422PixelFormat (4:2:2, YVYU ordering, unsigned UV) */
- kQAPixel_UYVY422 = 17 /* 16 bits/pixel, QD's kUYVY422PixelFormat (4:2:2, UYVY ordering, unsigned UV) */
- };
- typedef enum TQAImagePixelType TQAImagePixelType;
- enum TQAColorTableType {
- kQAColorTable_CL8_RGB32 = 0, /* 256 entry, 32 bit/pixel, R=23:16, G=15:8, B=7:0 */
- kQAColorTable_CL4_RGB32 = 1 /* 16 entry, 32 bit/pixel, R=23:16, G=15:8, B=7:0 */
- };
- typedef enum TQAColorTableType TQAColorTableType;
- /* Selects target device type */
- enum TQADeviceType {
- kQADeviceMemory = 0, /* Memory draw context */
- kQADeviceGDevice = 1, /* Macintosh GDevice draw context */
- kQADeviceWin32DC = 2, /* Win32 DC */
- kQADeviceDDSurface = 3 /* Win32 DirectDraw Surface */
- };
- typedef enum TQADeviceType TQADeviceType;
- /* Generic memory pixmap device */
- struct TQADeviceMemory {
- long rowBytes; /* Rowbytes */
- TQAImagePixelType pixelType; /* Depth, color space, etc. */
- long width; /* Width in pixels */
- long height; /* Height in pixels */
- void * baseAddr; /* Base address of pixmap */
- };
- typedef struct TQADeviceMemory TQADeviceMemory;
- /* Offscreen Device */
- struct TQADeviceOffscreen {
- TQAImagePixelType pixelType; /* Depth, color space, etc. */
- };
- typedef struct TQADeviceOffscreen TQADeviceOffscreen;
- /* Selects target clip type */
- enum TQAClipType {
- kQAClipRgn = 0, /* Macintosh clipRgn with serial number */
- kQAClipWin32Rgn = 1 /* Win32 clip region */
- };
- typedef enum TQAClipType TQAClipType;
- struct TQARect {
- long left;
- long right;
- long top;
- long bottom;
- };
- typedef struct TQARect TQARect;
- #if TARGET_OS_MAC
- union TQAPlatformDevice {
- TQADeviceMemory memoryDevice;
- GDHandle gDevice;
- };
- typedef union TQAPlatformDevice TQAPlatformDevice;
- union TQAPlatformClip {
- RgnHandle clipRgn;
- };
- typedef union TQAPlatformClip TQAPlatformClip;
- typedef CALLBACK_API( void , TQADrawNotificationProcPtr )(short left, short top, short right, short bottom, long refCon);
- typedef long TQADrawNotificationProcRefNum;
- /* used to unregister your proc */
- #elif TARGET_OS_WIN32
- #if !defined(RAVE_NO_DIRECTDRAW)
- enum TQADirectDrawObjectSelector
- {
- kQADirectDrawObject = 1,
- kQADirectDrawObject2 = 2
- };
- typedef enum TQADirectDrawObjectSelector TQADirectDrawObjectSelector;
- enum TQADirectDrawSurfaceSelector
- {
- kQADirectDrawSurface = 1,
- kQADirectDrawSurface2 = 2
- };
- typedef enum TQADirectDrawSurfaceSelector TQADirectDrawSurfaceSelector;
- #endif /* !RAVE_NO_DIRECTDRAW */
- union TQAPlatformDevice
- {
- TQADeviceMemory memoryDevice;
- HDC hdc;
- #if !defined(RAVE_NO_DIRECTDRAW)
- struct
- {
- TQADirectDrawObjectSelector objectSelector;
- union
- {
- LPDIRECTDRAW lpDirectDraw;
- LPDIRECTDRAW2 lpDirectDraw2;
- };
- TQADirectDrawSurfaceSelector surfaceSelector;
- union
- {
- LPDIRECTDRAWSURFACE lpDirectDrawSurface;
- LPDIRECTDRAWSURFACE2 lpDirectDrawSurface2;
- };
- };
- #endif /* RAVE_NO_DIRECTDRAW */
- };
- typedef union TQAPlatformDevice TQAPlatformDevice;
-
- union TQAPlatformClip
- {
- HRGN clipRgn;
- };
- typedef union TQAPlatformClip TQAPlatformClip;
- #else
- /*
- * Generic platform supports memory device only. TQARect is generic. TQAClip is ???.
- */
- union TQAPlatformDevice {
- TQADeviceMemory memoryDevice;
- };
- typedef union TQAPlatformDevice TQAPlatformDevice;
- union TQAPlatformClip {
- void * region; /* ??? */
- };
- typedef union TQAPlatformClip TQAPlatformClip;
- #endif /* */
- struct TQADevice {
- TQADeviceType deviceType;
- TQAPlatformDevice device;
- };
- typedef struct TQADevice TQADevice;
- struct TQAClip {
- TQAClipType clipType;
- TQAPlatformClip clip;
- };
- typedef struct TQAClip TQAClip;
- /******************************************************************************
- *
- * Basic data types.
- *
- *****************************************************************************/
- /* Pointer to a drawing engine */
- typedef struct TQAEngine TQAEngine;
- /* Pointer to an allocated texture */
- typedef struct TQATexture TQATexture;
- /* Pointer to an allocated bitmap */
- typedef struct TQABitmap TQABitmap;
- /* Engine's private draw context pointer */
- typedef struct TQADrawPrivate TQADrawPrivate;
- /* An engine specific color table structure */
- typedef struct TQAColorTable TQAColorTable;
- /* A single triangle element for QADrawTriMesh */
- struct TQAIndexedTriangle {
- unsigned long triangleFlags; /* Triangle flags, see kQATriFlags_ */
- unsigned long vertices[3]; /* Indices into a vertex array */
- };
- typedef struct TQAIndexedTriangle TQAIndexedTriangle;
- /* An image for use as texture or bitmap */
- struct TQAImage {
- long width; /* Width of pixmap */
- long height; /* Height of pixmap */
- long rowBytes; /* Rowbytes of pixmap */
- void * pixmap; /* Pixmap */
- };
- typedef struct TQAImage TQAImage;
- /* a pixel buffer */
- typedef TQADeviceMemory TQAPixelBuffer;
- /* a zbuffer */
- struct TQAZBuffer {
- long width; /* Width of pixmap */
- long height; /* Height of pixmap */
- long rowBytes; /* Rowbytes of pixmap */
- void * zbuffer; /* pointer to the zbuffer data */
- long zDepth; /* bit depth of zbuffer (16,24,32...) */
- long isBigEndian; /* true if zbuffer values are in big-endian format, false if little-endian */
- };
- typedef struct TQAZBuffer TQAZBuffer;
- /* Standard error type */
- enum TQAError {
- kQANoErr = 0, /* No error */
- kQAError = 1, /* Generic error flag */
- kQAOutOfMemory = 2, /* Insufficient memory */
- kQANotSupported = 3, /* Requested feature is not supported */
- kQAOutOfDate = 4, /* A newer drawing engine was registered */
- kQAParamErr = 5, /* Error in passed parameters */
- kQAGestaltUnknown = 6, /* Requested gestalt type isn't available */
- kQADisplayModeUnsupported = 7, /* Engine cannot render to the display in its current , */
- /* mode, but could if it were in some other mode */
- kQAOutOfVideoMemory = 8 /* There is not enough VRAM to support the desired context dimensions */
- };
- typedef enum TQAError TQAError;
- /* TQABoolean */
- typedef unsigned char TQABoolean;
- /************************************************************************************************
- *
- * Vertex data types.
- *
- ***********************************************************************************************/
- /*
- * TQAVGouraud is used for Gouraud shading. Each vertex specifies position, color and Z.
- *
- * Alpha is always treated as indicating transparency. Drawing engines which don't
- * support Z-sorted rendering use the back-to-front transparency blending functions
- * shown below. (ARGBsrc are the source (new) values, ARGBdest are the destination
- * (previous) pixel values.)
- *
- * Premultiplied Interpolated
- *
- * A = 1 - (1 - Asrc) * (1 - Adest) A = 1 - (1 - Asrc) * (1 - Adest)
- * R = (1 - Asrc) * Rdest + Rsrc R = (1 - Asrc) * Rdest + Asrc * Rsrc
- * G = (1 - Asrc) * Gdest + Gsrc G = (1 - Asrc) * Gdest + Asrc * Gsrc
- * B = (1 - Asrc) * Bdest + Bsrc B = (1 - Asrc) * Bdest + Asrc * Bsrc
- *
- * Note that the use of other blending modes to implement antialiasing is performed
- * automatically by the drawing engine when the kQATag_Antialias variable !=
- * kQAAntiAlias_Fast. The driving software should continue to use the alpha fields
- * for transparency even when antialiasing is being used (the drawing engine will
- * resolve the multiple blending requirements as best as it can).
- *
- * Drawing engines which perform front-to-back Z-sorted rendering should replace
- * the blending function shown above with the equivalent front-to-back formula.
- */
- struct TQAVGouraud {
- float x; /* X pixel coordinate, 0.0 <= x < width */
- float y; /* Y pixel coordinate, 0.0 <= y < height */
- float z; /* Z coordinate, 0.0 <= z <= 1.0 */
- float invW; /* 1 / w; required only when kQAPerspectiveZ_On is set */
- float r; /* Red, 0.0 <= r <= 1.0 */
- float g; /* Green, 0.0 <= g <= 1.0 */
- float b; /* Blue, 0.0 <= b <= 1.0 */
- float a; /* Alpha, 0.0 <= a <= 1.0, 1.0 is opaque */
- };
- typedef struct TQAVGouraud TQAVGouraud;
- /*
- * TQAVTexture is used for texture mapping. The texture mapping operation
- * is controlled by the kQATag_TextureOp variable, which is a mask of
- * kQATextureOp_None/Modulate/Highlight/Decal. Below is pseudo-code for the
- * texture shading operation:
- *
- * texPix = TextureLookup (uq/q, vq/q);
- * if (kQATextureOp_Decal)
- * {
- * texPix.r = texPix.a * texPix.r + (1 - texPix.a) * r;
- * texPix.g = texPix.a * texPix.g + (1 - texPix.a) * g;
- * texPix.b = texPix.a * texPix.b + (1 - texPix.a) * b;
- * texPix.a = a;
- * }
- * else
- * {
- * texPix.a = texPix.a * a;
- * }
- * if (kQATextureOp_Modulate)
- * {
- * texPix.r *= kd_r; // Clamped to prevent overflow
- * texPix.g *= kd_g; // Clamped to prevent overflow
- * texPix.b *= kd_b; // Clamped to prevent overflow
- * }
- * if (kQATextureOp_Highlight)
- * {
- * texPix.r += ks_r; // Clamped to prevent overflow
- * texPix.g += ks_g; // Clamped to prevent overflow
- * texPix.b += ks_b; // Clamped to prevent overflow
- * }
- *
- * After computation of texPix, transparency blending (as shown
- * above for TQAVGouraud) is performed.
- */
- struct TQAVTexture {
- float x; /* X pixel coordinate, 0.0 <= x < width */
- float y; /* Y pixel coordinate, 0.0 <= y < height */
- float z; /* Z coordinate, 0.0 <= z <= 1.0 */
- float invW; /* 1 / w (always required) */
- /* rgb are used only when kQATextureOp_Decal is set. a is always required */
- float r; /* Red, 0.0 <= r <= 1.0 */
- float g; /* Green, 0.0 <= g <= 1.0 */
- float b; /* Blue, 0.0 <= b <= 1.0 */
- float a; /* Alpha, 0.0 <= a <= 1.0, 1.0 is opaque */
- /* uOverW and vOverW are required by all modes */
- float uOverW; /* u / w */
- float vOverW; /* v / w */
- /* kd_r/g/b are used only when kQATextureOp_Modulate is set */
- float kd_r; /* Scale factor for texture red, 0.0 <= kd_r */
- float kd_g; /* Scale factor for texture green, 0.0 <= kd_g */
- float kd_b; /* Scale factor for texture blue, 0.0 <= kd_b */
- /* ks_r/g/b are used only when kQATextureOp_Highlight is set */
- float ks_r; /* Red specular highlight, 0.0 <= ks_r <= 1.0 */
- float ks_g; /* Green specular highlight, 0.0 <= ks_g <= 1.0 */
- float ks_b; /* Blue specular highlight, 0.0 <= ks_b <= 1.0 */
- };
- typedef struct TQAVTexture TQAVTexture;
- /*
- * TQAVMultiTexture allows you to specify the uv and invW values
- * for secondary textures. This data is submitted with the
- * QASubmitMultiTextureParams() call.
- */
- struct TQAVMultiTexture {
- float invW;
- float uOverW;
- float vOverW;
- };
- typedef struct TQAVMultiTexture TQAVMultiTexture;
- /************************************************************************************************
- *
- * Constants used for the state variables.
- *
- ***********************************************************************************************/
- /*
- * kQATag_xxx is used to select a state variable when calling QASetFloat(), QASetInt(),
- * QAGetFloat() and QAGetInt(). The kQATag values are split into three separate enumerated
- * types: TQATagInt, TQATagPtr and TQATagFloat. TQATagInt is used for the QASet/GetInt()
- * functions, TQATagPtr is used for the QASet/GetPtr() functions, and TQATagFloat is used for
- * the QASet/GetFloat() functions. (This is so that a compiler that typechecks enums can flag
- * a float/int tag mismatch during compile.)
- *
- * -=- All tag values must be unique even across all three types. -=-
- *
- * These variables are required by all drawing engines:
- * kQATag_ZFunction (Int) One of kQAZFunction_xxx
- * kQATag_ColorBG_a (Float) Background color alpha
- * kQATag_ColorBG_r (Float) Background color red
- * kQATag_ColorBG_g (Float) Background color green
- * kQATag_ColorBG_b (Float) Background color blue
- * kQATag_Width (Float) Line and point width (pixels)
- * kQATag_ZMinOffset (Float) Min offset to Z to guarantee visibility (Read only!)
- * kQATag_ZMinScale (Float) Min scale to Z to guarantee visibility (Read only!)
-
- * These variables are used for optional features:
- * kQATag_Antialias (Int) One of kQAAntiAlias_xxx
- * kQATag_Blend (Int) One of kQABlend_xxx
- * kQATag_PerspectiveZ (Int) One of kQAPerspectiveZ_xxx
- * kQATag_TextureFilter (Int) One of kQATextureFilter_xxx
- * kQATag_TextureOp (Int) Mask of kQATextureOp_xxx
- * kQATag_Texture (Ptr) Pointer to current TQATexture
- * kQATag_CSGTag (Int) One of kQACSGTag_xxx
- * kQATag_CSGEquation (Int) 32 bit CSG truth table
- * kQATag_FogMode (Int) One of kQAFogMode_xxxx
- * kQATag_FogColor_a (Float) Fog color alpha
- * kQATag_FogColor_r (Float) Fog color red
- * kQATag_FogColor_g (Float) Fog color green
- * kQATag_FogColor_b (Float) Fog color blue
- * kQATag_FogStart (Float) Fog start
- * kQATag_FogEnd (Float) Fog end
- * kQATag_FogDensity (Float) Fog density
- * kQATag_FogMaxDepth (Float) Maximun value for 1.0 / invW
- * kQATag_MipmapBias (Float) The mipmap page bias factor
- * kQATag_ChannelMask (Int) one of kQAChannelMask_xxx
- * kQATag_ZBufferMask (Int) one of kQAZBufferMask_xxx
- * kQATag_ZSortedHint (Int) 1 = depth sort transparent triangles, 0 = do not sort.
- * kQATag_Chromakey_r (Float) chroma key red
- * kQATag_Chromakey_g (Float) chroma key green
- * kQATag_Chromakey_b (Float) chroma key blue
- * kQATag_ChromakeyEnable (Int) 1 = enable chroma keying, 0 = disable chroma keying
- * kQATag_AlphaTestFunc (Int) one of kQAAlphaTest_xxx
- * kQATag_AlphaTestRef (Float) from 0 to 1
- * kQATag_DontSwap (Int) 1 = dont swap buffers during QARenderEnd, 0 = do swap buffers during QARenderEnd.
- * kQATag_MultiTextureOp (Int) One of kQAMultiTexture_xxx
- * kQATag_MultiTextureFilter (Int) One of kQATextureFilter_xxx
- * kQATag_MultiTextureCurrent (Int) which multitexture layer to use for all other multitexture funcs
- * kQATag_MultiTextureEnable (Int) how many multitexture layers to use (0 = no multitexturing).
- * kQATag_MultiTextureWrapU (Int)
- * kQATag_MultiTextureWrapV (Int)
- * kQATag_MultiTextureMagFilter (Int)
- * kQATag_MultiTextureMinFilter (Int)
- * kQATag_MultiTextureBorder_a (Float)
- * kQATag_MultiTextureBorder_r (Float)
- * kQATag_MultiTextureBorder_g (Float)
- * kQATag_MultiTextureBorder_b (Float)
- * kQATag_MultiTextureMipmapBias (Float)
- * kQATag_MultiTextureFactor (Float) used with kQAMultiTexture_Fixed to determine blending factor
- *
- * These variables are used for OpenGL(tm) support:
- * kQATagGL_DrawBuffer (Int) Mask of kQAGL_DrawBuffer_xxx
- * kQATagGL_TextureWrapU (Int) kQAGL_Clamp or kQAGL_Repeat
- * kQATagGL_TextureWrapV (Int) kQAGL_Clamp or kQAGL_Repeat
- * kQATagGL_TextureMagFilter (Int) kQAGL_Nearest or kQAGL_Linear
- * kQATagGL_TextureMinFilter (Int) kQAGL_Nearest, etc.
- * kQATagGL_ScissorXMin (Int) Minimum X value for scissor rectangle
- * kQATagGL_ScissorYMin (Int) Minimum Y value for scissor rectangle
- * kQATagGL_ScissorXMax (Int) Maximum X value for scissor rectangle
- * kQATagGL_ScissorYMax (Int) Maximum Y value for scissor rectangle
- * kQATagGL_BlendSrc (Int) Source blending operation
- * kQATagGL_BlendDst (Int) Destination blending operation
- * kQATagGL_LinePattern (Int) Line rasterization pattern
- * kQATagGL_AreaPattern0 (Int) First of 32 area pattern registers
- * kQATagGL_AreaPattern31 (Int) Last of 32 area pattern registers
- *
- * kQATagGL_DepthBG (Float) Background Z
- * kQATagGL_TextureBorder_a (Float) Texture border color alpha
- * kQATagGL_TextureBorder_r (Float) Texture border color red
- * kQATagGL_TextureBorder_g (Float) Texture border color green
- * kQATagGL_TextureBorder_b (Float) Texture border color blue
- *
- * Tags >= kQATag_EngineSpecific_Minimum may be assigned by the vendor for use as
- * engine-specific variables. NOTE: These should be used only in exceptional circumstances,
- * as functions performed by these variables won't be generally accessible. All other tag
- * values are reserved.
- *
- * kQATag_EngineSpecific_Minimum Minimum tag value for drawing-engine specific variables
- */
- enum TQATagInt {
- kQATag_ZFunction = 0,
- kQATag_Antialias = 8,
- kQATag_Blend = 9,
- kQATag_PerspectiveZ = 10,
- kQATag_TextureFilter = 11,
- kQATag_TextureOp = 12,
- kQATag_CSGTag = 14,
- kQATag_CSGEquation = 15,
- kQATag_BufferComposite = 16,
- kQATag_FogMode = 17,
- kQATag_ChannelMask = 27,
- kQATag_ZBufferMask = 28,
- kQATag_ZSortedHint = 29,
- kQATag_ChromakeyEnable = 30,
- kQATag_AlphaTestFunc = 31,
- kQATag_DontSwap = 32,
- kQATag_MultiTextureEnable = 33,
- kQATag_MultiTextureCurrent = 34,
- kQATag_MultiTextureOp = 35,
- kQATag_MultiTextureFilter = 36,
- kQATag_MultiTextureWrapU = 37,
- kQATag_MultiTextureWrapV = 38,
- kQATag_MultiTextureMagFilter = 39,
- kQATag_MultiTextureMinFilter = 40,
- kQATag_BitmapFilter = 54, /* filter to use while scaling bitmaps, one of kQAFilter_xxx */
- kQATag_DrawContextFilter = 55, /* filter to use while scaling draw contexts, one of kQAFilter_xxx */
- kQATagGL_DrawBuffer = 100,
- kQATagGL_TextureWrapU = 101,
- kQATagGL_TextureWrapV = 102,
- kQATagGL_TextureMagFilter = 103,
- kQATagGL_TextureMinFilter = 104,
- kQATagGL_ScissorXMin = 105,
- kQATagGL_ScissorYMin = 106,
- kQATagGL_ScissorXMax = 107,
- kQATagGL_ScissorYMax = 108,
- kQATagGL_BlendSrc = 109,
- kQATagGL_BlendDst = 110,
- kQATagGL_LinePattern = 111,
- kQATagGL_AreaPattern0 = 117, /* ...kQATagGL_AreaPattern1-30 */
- kQATagGL_AreaPattern31 = 148,
- kQATagGL_LinePatternFactor = 149, /* equivalent to GL_LINE_STIPPLE_REPEAT */
- kQATag_EngineSpecific_Minimum = 1000
- };
- typedef enum TQATagInt TQATagInt;
- enum TQATagPtr {
- kQATag_Texture = 13,
- kQATag_MultiTexture = 26
- };
- typedef enum TQATagPtr TQATagPtr;
- enum TQATagFloat {
- kQATag_ColorBG_a = 1,
- kQATag_ColorBG_r = 2,
- kQATag_ColorBG_g = 3,
- kQATag_ColorBG_b = 4,
- kQATag_Width = 5,
- kQATag_ZMinOffset = 6,
- kQATag_ZMinScale = 7,
- kQATag_FogColor_a = 18,
- kQATag_FogColor_r = 19,
- kQATag_FogColor_g = 20,
- kQATag_FogColor_b = 21,
- kQATag_FogStart = 22,
- kQATag_FogEnd = 23,
- kQATag_FogDensity = 24,
- kQATag_FogMaxDepth = 25,
- kQATag_MipmapBias = 41,
- kQATag_MultiTextureMipmapBias = 42,
- kQATag_Chromakey_r = 43,
- kQATag_Chromakey_g = 44,
- kQATag_Chromakey_b = 45,
- kQATag_AlphaTestRef = 46,
- kQATag_MultiTextureBorder_a = 47,
- kQATag_MultiTextureBorder_r = 48,
- kQATag_MultiTextureBorder_g = 49,
- kQATag_MultiTextureBorder_b = 50,
- kQATag_MultiTextureFactor = 51,
- kQATag_BitmapScale_x = 52, /* horizontal bitmap scale factor, default value is 1.0 */
- kQATag_BitmapScale_y = 53, /* vertical bitmap scale factor, default value is 1.0 */
- kQATag_MultiTextureEnvColor_a = 56,
- kQATag_MultiTextureEnvColor_r = 57,
- kQATag_MultiTextureEnvColor_g = 58,
- kQATag_MultiTextureEnvColor_b = 59,
- kQATagGL_DepthBG = 112,
- kQATagGL_TextureBorder_a = 113,
- kQATagGL_TextureBorder_r = 114,
- kQATagGL_TextureBorder_g = 115,
- kQATagGL_TextureBorder_b = 116,
- kQATagGL_TextureEnvColor_a = 150,
- kQATagGL_TextureEnvColor_r = 151,
- kQATagGL_TextureEnvColor_g = 152,
- kQATagGL_TextureEnvColor_b = 153
- };
- typedef enum TQATagFloat TQATagFloat;
- /* kQATag_ZFunction */
- enum {
- kQAZFunction_None = 0, /* Z is neither tested nor written (same as no Z buffer) */
- kQAZFunction_LT = 1, /* Znew < Zbuffer is visible */
- kQAZFunction_EQ = 2, /* Znew == Zbuffer is visible */
- kQAZFunction_LE = 3, /* Znew <= Zbuffer is visible */
- kQAZFunction_GT = 4, /* Znew > Zbuffer is visible */
- kQAZFunction_NE = 5, /* Znew != Zbuffer is visible */
- kQAZFunction_GE = 6, /* Znew >= Zbuffer is visible */
- kQAZFunction_True = 7, /* Znew is always visible */
- kQAZFunction_False = 8 /* Znew is never visible */
- };
- /* kQATag_Width */
- #define kQAMaxWidth 128.0
- /* kQATag_Antialias */
- enum {
- kQAAntiAlias_Off = 0,
- kQAAntiAlias_Fast = 1,
- kQAAntiAlias_Mid = 2,
- kQAAntiAlias_Best = 3
- };
- /* kQATag_Blend */
- enum {
- kQABlend_PreMultiply = 0,
- kQABlend_Interpolate = 1,
- kQABlend_OpenGL = 2
- };
- /* kQATag_BufferComposite */
- enum {
- kQABufferComposite_None = 0, /* Default: New pixels overwrite initial buffer contents */
- kQABufferComposite_PreMultiply = 1, /* New pixels are blended with initial buffer contents via PreMultiply */
- kQABufferComposite_Interpolate = 2 /* New pixels are blended with initial buffer contents via Interpolate */
- };
- /* kQATag_PerspectiveZ */
- enum {
- kQAPerspectiveZ_Off = 0, /* Use Z for hidden surface removal */
- kQAPerspectiveZ_On = 1 /* Use InvW for hidden surface removal */
- };
- /* kQATag_TextureFilter */
- enum {
- /* suggested meanings of these values */
- kQATextureFilter_Fast = 0, /* No filtering, pick nearest */
- kQATextureFilter_Mid = 1, /* Fastest method that does some filtering */
- kQATextureFilter_Best = 2 /* Highest quality renderer can do */
- };
- /* filter tag values */
- enum {
- /* suggested meanings of these values */
- kQAFilter_Fast = 0, /* No filtering, pick nearest */
- kQAFilter_Mid = 1, /* Fastest method that does some filtering */
- kQAFilter_Best = 2 /* Highest quality renderer can do */
- };
- /* kQATag_TextureOp (mask of one or more) */
- enum {
- kQATextureOp_None = 0, /* Default texture mapping mode */
- kQATextureOp_Modulate = (1 << 0), /* Modulate texture color with kd_r/g/b */
- kQATextureOp_Highlight = (1 << 1), /* Add highlight value ks_r/g/b */
- kQATextureOp_Decal = (1 << 2), /* When texture alpha == 0, use rgb instead */
- kQATextureOp_Shrink = (1 << 3), /* This is a non-wrapping texture, so the ??? */
- kQATextureOp_Blend = (1 << 4) /* Same as GL_TEXTURE_ENV_MODE GL_BLEND */
- };
- /* kQATag_MultiTextureOp */
- enum {
- kQAMultiTexture_Add = 0, /* texels are added to form final pixel */
- kQAMultiTexture_Modulate = 1, /* texels are multiplied to form final pixel */
- kQAMultiTexture_BlendAlpha = 2, /* texels are blended according to 2nd texel's alpha */
- kQAMultiTexture_Fixed = 3 /* texels are blended by a fixed factor via kQATag_MultiTextureFactor */
- };
- /* kQATag_CSGTag */
- #define kQACSGTag_None 0xffffffffUL
- enum {
- kQACSGTag_0 = 0, /* Submitted tris have CSG ID 0 */
- kQACSGTag_1 = 1, /* Submitted tris have CSG ID 1 */
- kQACSGTag_2 = 2, /* Submitted tris have CSG ID 2 */
- kQACSGTag_3 = 3, /* Submitted tris have CSG ID 3 */
- kQACSGTag_4 = 4 /* Submitted tris have CSG ID 4 */
- };
- /* kQATagGL_TextureWrapU/V */
- enum {
- kQAGL_Repeat = 0,
- kQAGL_Clamp = 1
- };
- /* kQATagGL_BlendSrc */
- enum {
- kQAGL_SourceBlend_XXX = 0
- };
- /* kQATagGL_BlendDst */
- enum {
- kQAGL_DestBlend_XXX = 0
- };
- /* kQATagGL_DrawBuffer (mask of one or more) */
- enum {
- kQAGL_DrawBuffer_None = 0,
- kQAGL_DrawBuffer_FrontLeft = (1 << 0),
- kQAGL_DrawBuffer_FrontRight = (1 << 1),
- kQAGL_DrawBuffer_BackLeft = (1 << 2),
- kQAGL_DrawBuffer_BackRight = (1 << 3),
- kQAGL_DrawBuffer_Front = (kQAGL_DrawBuffer_FrontLeft | kQAGL_DrawBuffer_FrontRight),
- kQAGL_DrawBuffer_Back = (kQAGL_DrawBuffer_BackLeft | kQAGL_DrawBuffer_BackRight)
- };
- /* kQATag_FogMode */
- enum {
- kQAFogMode_None = 0, /* no fog */
- kQAFogMode_Alpha = 1, /* fog value is alpha */
- kQAFogMode_Linear = 2, /* fog = (end - z) / (end - start) */
- kQAFogMode_Exponential = 3, /* fog = exp(-density * z) */
- kQAFogMode_ExponentialSquared = 4 /* fog = exp(-density * z * density * z) */
- };
- /* kQATag_ChannelMask */
- enum {
- kQAChannelMask_r = (1 << 0),
- kQAChannelMask_g = (1 << 1),
- kQAChannelMask_b = (1 << 2),
- kQAChannelMask_a = (1 << 3)
- };
- /* kQATag_ZBufferMask */
- enum {
- kQAZBufferMask_Disable = 0,
- kQAZBufferMask_Enable = 1
- };
- /* kQATag_AlphaTestFunc */
- enum {
- kQAAlphaTest_None = 0,
- kQAAlphaTest_LT = 1,
- kQAAlphaTest_EQ = 2,
- kQAAlphaTest_LE = 3,
- kQAAlphaTest_GT = 4,
- kQAAlphaTest_NE = 5,
- kQAAlphaTest_GE = 6,
- kQAAlphaTest_True = 7
- };
- /* flags for QAAccess__xxx */
- enum {
- kQANoCopyNeeded = (1 << 0)
- };
- /************************************************************************************************
- *
- * Constants used as function parameters.
- *
- ***********************************************************************************************/
- /*
- * TQAVertexMode is a parameter to QADrawVGouraud() and QADrawVTexture() that specifies how
- * to interpret and draw the vertex array.
- */
- enum TQAVertexMode {
- kQAVertexMode_Point = 0, /* Draw nVertices points */
- kQAVertexMode_Line = 1, /* Draw nVertices/2 line segments */
- kQAVertexMode_Polyline = 2, /* Draw nVertices-1 connected line segments */
- kQAVertexMode_Tri = 3, /* Draw nVertices/3 triangles */
- kQAVertexMode_Strip = 4, /* Draw nVertices-2 triangles as a strip */
- kQAVertexMode_Fan = 5, /* Draw nVertices-2 triangles as a fan from v0 */
- kQAVertexMode_NumModes = 6
- };
- typedef enum TQAVertexMode TQAVertexMode;
- /*
- * TQAGestaltSelector is a parameter to QAEngineGestalt(). It selects which gestalt
- * parameter will be copied into 'response'.
- */
- enum TQAGestaltSelector {
- kQAGestalt_OptionalFeatures = 0, /* Mask of one or more kQAOptional_xxx */
- kQAGestalt_FastFeatures = 1, /* Mask of one or more kQAFast_xxx */
- kQAGestalt_VendorID = 2, /* Vendor ID */
- kQAGestalt_EngineID = 3, /* Engine ID */
- kQAGestalt_Revision = 4, /* Revision number of this engine */
- kQAGestalt_ASCIINameLength = 5, /* strlen (asciiName) */
- kQAGestalt_ASCIIName = 6, /* Causes strcpy (response, asciiName) */
- kQAGestalt_TextureMemory = 7, /* amount of texture RAM currently available */
- kQAGestalt_FastTextureMemory = 8, /* amount of texture RAM currently available */
- kQAGestalt_DrawContextPixelTypesAllowed = 9, /* returns all the draw context pixel types supported by the RAVE engine */
- kQAGestalt_DrawContextPixelTypesPreferred = 10, /* returns all the draw context pixel types that are preferred by the RAVE engine. */
- kQAGestalt_TexturePixelTypesAllowed = 11, /* returns all the texture pixel types that are supported by the RAVE engine */
- kQAGestalt_TexturePixelTypesPreferred = 12, /* returns all the texture pixel types that are preferred by the RAVE engine.*/
- kQAGestalt_BitmapPixelTypesAllowed = 13, /* returns all the bitmap pixel types that are supported by the RAVE engine. */
- kQAGestalt_BitmapPixelTypesPreferred = 14, /* returns all the bitmap pixel types that are preferred by the RAVE engine. */
- kQAGestalt_OptionalFeatures2 = 15, /* Mask of one or more kQAOptional2_xxx */
- kQAGestalt_MultiTextureMax = 16, /* max number of multi textures supported by this engine */
- kQAGestalt_NumSelectors = 17,
- kQAGestalt_EngineSpecific_Minimum = 1000 /* all gestalts here and above are for engine specific purposes */
- };
- typedef enum TQAGestaltSelector TQAGestaltSelector;
- /*
- * TQAMethodSelector is a parameter to QASetNoticeMethod to select the notice method
- */
- #if RAVE_OBSOLETE
- enum TQAMethodSelector {
- kQAMethod_RenderCompletion = 0, /* Called when rendering has completed and buffers swapped */
- kQAMethod_DisplayModeChanged = 1, /* Called when a display mode has changed */
- kQAMethod_ReloadTextures = 2, /* Called when texture memory has been invalidated */
- kQAMethod_BufferInitialize = 3, /* Called when a buffer needs to be initialized */
- kQAMethod_BufferComposite = 4, /* Called when rendering is finished and its safe to composite */
- kQAMethod_NumSelectors = 5
- };
- typedef enum TQAMethodSelector TQAMethodSelector;
- #else
- enum TQAMethodSelector {
- kQAMethod_RenderCompletion = 0, /* Called when rendering has completed and buffers swapped */
- kQAMethod_DisplayModeChanged = 1, /* Called when a display mode has changed */
- kQAMethod_ReloadTextures = 2, /* Called when texture memory has been invalidated */
- kQAMethod_ImageBufferInitialize = 3, /* Called when a buffer needs to be initialized */
- kQAMethod_ImageBuffer2DComposite = 4, /* Called when rendering is finished and its safe to composite */
- kQAMethod_NumSelectors = 5
- };
- typedef enum TQAMethodSelector TQAMethodSelector;
- #endif /* RAVE_OBSOLETE */
- /*
- * kQATriFlags_xxx are ORed together to generate the 'flags' parameter
- * to QADrawTriGouraud() and QADrawTriTexture().
- */
- enum {
- kQATriFlags_None = 0, /* No flags (triangle is front-facing or don't care) */
- kQATriFlags_Backfacing = (1 << 0) /* Triangle is back-facing */
- };
- /*
- * kQATexture_xxx are ORed together to generate the 'flags' parameter to QATextureNew().
- */
- enum {
- kQATexture_None = 0, /* No flags */
- kQATexture_Lock = (1 << 0), /* Don't swap this texture out */
- kQATexture_Mipmap = (1 << 1), /* This texture is mipmapped */
- kQATexture_NoCompression = (1 << 2), /* Do not compress this texture */
- kQATexture_HighCompression = (1 << 3), /* Compress texture, even if it takes a while */
- kQATexture_NonRelocatable = (1 << 4), /* Image buffer in VRAM should be non-relocatable */
- kQATexture_NoCopy = (1 << 5), /* Don't copy image to VRAM when creating it */
- kQATexture_FlipOrigin = (1 << 6), /* The image(s) is(are) in a bottom-up format. (The image(s) is(are) flipped vertically.) */
- kQATexture_PriorityBits = (1 << 31) | (1 << 30) | (1 << 29) | (1 << 28) /* Texture priority: 4 upper bits for 16 levels of priority */
- };
- /*
- * kQABitmap_xxx are ORed together to generate the 'flags' parameter to QABitmapNew().
- */
- enum {
- kQABitmap_None = 0, /* No flags */
- kQABitmap_Lock = (1 << 1), /* Don't swap this bitmap out */
- kQABitmap_NoCompression = (1 << 2), /* Do not compress this bitmap */
- kQABitmap_HighCompression = (1 << 3), /* Compress bitmap, even if it takes a while */
- kQABitmap_NonRelocatable = (1 << 4), /* Image buffer in VRAM should be non-relocatable */
- kQABitmap_NoCopy = (1 << 5), /* Don't copy image to VRAM when creating it */
- kQABitmap_FlipOrigin = (1 << 6), /* The image is in a bottom-up format. (The image is flipped vertically.) */
- kQABitmap_PriorityBits = (1 << 31) | (1 << 30) | (1 << 29) | (1 << 28) /* Bitmap priority: 4 upper bits for 16 levels of priority */
- };
- /*
- * kQAContext_xxx are ORed together to generate the 'flags' parameter for QADrawContextNew().
- */
- enum {
- kQAContext_None = 0, /* No flags */
- kQAContext_NoZBuffer = (1 << 0), /* No hidden surface removal */
- kQAContext_DeepZ = (1 << 1), /* Hidden surface precision >= 24 bits */
- kQAContext_DoubleBuffer = (1 << 2), /* Double buffered window */
- kQAContext_Cache = (1 << 3), /* This is a cache context */
- kQAContext_NoDither = (1 << 4), /* No dithering, straight color banding */
- kQAContext_Scale = (1 << 5), /* The draw context is to be scaled. The front buffer is a different size than the back buffer. */
- kQAContext_NonRelocatable = (1 << 6), /* The back buffer and the z buffer must not move in memory */
- kQAContext_EngineSpecific1 = (1 << 28), /* engine specific flag # 1 */
- kQAContext_EngineSpecific2 = (1 << 29), /* engine specific flag # 2 */
- kQAContext_EngineSpecific3 = (1 << 30), /* engine specific flag # 3 */
- kQAContext_EngineSpecific4 = (1 << 31) /* engine specific flag # 4 */
- };
- /*
- * kQAOptional_xxx are ORed together to generate the kQAGestalt_OptionalFeatures response
- * from QAEngineGestalt().
- */
- enum {
- kQAOptional_None = 0, /* No optional features */
- kQAOptional_DeepZ = (1 << 0), /* Hidden surface precision >= 24 bits */
- kQAOptional_Texture = (1 << 1), /* Texture mapping */
- kQAOptional_TextureHQ = (1 << 2), /* High quality texture (tri-linear mip or better) */
- kQAOptional_TextureColor = (1 << 3), /* Full color modulation and highlight of textures */
- kQAOptional_Blend = (1 << 4), /* Transparency blending of RGB */
- kQAOptional_BlendAlpha = (1 << 5), /* Transparency blending includes alpha channel */
- kQAOptional_Antialias = (1 << 6), /* Antialiased rendering */
- kQAOptional_ZSorted = (1 << 7), /* Z sorted rendering (for transparency, etc.) */
- kQAOptional_PerspectiveZ = (1 << 8), /* Hidden surface removal using InvW instead of Z */
- kQAOptional_OpenGL = (1 << 9), /* Extended rasterization features for OpenGL(tm) */
- kQAOptional_NoClear = (1 << 10), /* This drawing engine doesn't clear before drawing */
- kQAOptional_CSG = (1 << 11), /* kQATag_CSGxxx are implemented */
- kQAOptional_BoundToDevice = (1 << 12), /* This engine is tightly bound to GDevice */
- kQAOptional_CL4 = (1 << 13), /* This engine suports kQAPixel_CL4 */
- kQAOptional_CL8 = (1 << 14), /* This engine suports kQAPixel_CL8 */
- kQAOptional_BufferComposite = (1 << 15), /* This engine can composite with initial buffer contents */
- kQAOptional_NoDither = (1 << 16), /* This engine can draw with no dithering */
- kQAOptional_FogAlpha = (1 << 17), /* This engine suports alpha based fog */
- kQAOptional_FogDepth = (1 << 18), /* This engine suports depth based fog */
- kQAOptional_MultiTextures = (1 << 19), /* This bit set if engine supports texture compositing */
- kQAOptional_MipmapBias = (1 << 20), /* This bit is set if the engine supports mipmap selection bias */
- kQAOptional_ChannelMask = (1 << 21),
- kQAOptional_ZBufferMask = (1 << 22),
- kQAOptional_AlphaTest = (1 << 23), /* this engine supports alpha testing */
- kQAOptional_AccessTexture = (1 << 24), /* if engine supports access to texture */
- kQAOptional_AccessBitmap = (1 << 25), /* if engine supports access to bitmaps */
- kQAOptional_AccessDrawBuffer = (1 << 26), /* if engine supports access to draw buffer */
- kQAOptional_AccessZBuffer = (1 << 27), /* if engine supports access to zbuffer */
- kQAOptional_ClearDrawBuffer = (1 << 28), /* if engine supports QAClearDrawBuffer() */
- kQAOptional_ClearZBuffer = (1 << 29), /* if engine supports QAClearZBuffer() */
- kQAOptional_OffscreenDrawContexts = (1 << 30) /* if engine supports TQADeviceOffscreen */
- };
- /*
- * kQAOptional2_xxx are ORed together to generate the kQAGestalt_OptionalFeatures2 response
- * from QAEngineGestalt().
- */
- enum {
- kQAOptional2_None = 0,
- kQAOptional2_TextureDrawContexts = (1 << 1), /* if engine supports QATextureNewFromDrawContext() */
- kQAOptional2_BitmapDrawContexts = (1 << 2), /* if engine supports QABitmapNewFromDrawContext() */
- kQAOptional2_Busy = (1 << 3), /* if engine supports QABusy() */
- kQAOptional2_SwapBuffers = (1 << 4), /* if engine supports QASwapBuffers() */
- kQAOptional2_Chromakey = (1 << 5), /* if engine supports chromakeying via kQATag_Chromakey_xxx */
- kQAOptional2_NonRelocatable = (1 << 6), /* if engine supports nonrelocatable texture & bitmap image buffers in VRAM */
- kQAOptional2_NoCopy = (1 << 7), /* if engine supports ability to not copy texture & bitmap image to VRAM */
- kQAOptional2_PriorityBits = (1 << 8), /* if engine supports texture & bitmap priority levels */
- kQAOptional2_FlipOrigin = (1 << 9), /* if engine supports textures & bitmaps that are vertically flipped */
- kQAOptional2_BitmapScale = (1 << 10), /* if engine supports scaled bitmap drawing */
- kQAOptional2_DrawContextScale = (1 << 11), /* if engine supports scaled draw contexts */
- kQAOptional2_DrawContextNonRelocatable = (1 << 12) /* if engine supports draw contexts with non relocatable buffers */
- };
- /*
- * kQAFast_xxx are ORed together to generate the kQAGestalt_FastFeatures response
- * from QAEngineGestalt().
- */
- enum {
- kQAFast_None = 0, /* No accelerated features */
- kQAFast_Line = (1 << 0), /* Line drawing */
- kQAFast_Gouraud = (1 << 1), /* Gouraud shaded triangles */
- kQAFast_Texture = (1 << 2), /* Texture mapped triangles */
- kQAFast_TextureHQ = (1 << 3), /* High quality texture (tri-linear mip or better) */
- kQAFast_Blend = (1 << 4), /* Transparency blending */
- kQAFast_Antialiasing = (1 << 5), /* Antialiased rendering */
- kQAFast_ZSorted = (1 << 6), /* Z sorted rendering of non-opaque objects */
- kQAFast_CL4 = (1 << 7), /* This engine accelerates kQAPixel_CL4 */
- kQAFast_CL8 = (1 << 8), /* This engine accelerates kQAPixel_CL8 */
- kQAFast_FogAlpha = (1 << 9), /* This engine accelerates alpha based fog */
- kQAFast_FogDepth = (1 << 10), /* This engine accelerates depth based fog */
- kQAFast_MultiTextures = (1 << 11), /* This engine accelerates texture compositing */
- kQAFast_BitmapScale = (1 << 12), /* This engine accelerates scaled bitmap drawing */
- kQAFast_DrawContextScale = (1 << 13) /* This engine accelerates scaled draw contexts */
- };
- /************************************************************************************************
- *
- * Macro definition for easily setting the texture priority bits in the flags field of
- * QATextureNew(), and QABitMapNew().
- *
- * The priority value must be a number between 0 and 15. 0 is top priority, and 15 is lowest
- * priority. Note that this is different than OpenGL which uses floats from 0.0 to 1.0 where
- * 1.0 is top priority. In RAVE, this system is more like texture ranking, thus 0 is top rank,
- * and 15 is the last ranking.
- *
- * Texture prioritization is mainly used for systems which support AGP memory. This allows the
- * hardware driver to determine which textures to put into faster VRAM and which to put into
- * slower AGP RAM. If you dont care about texture priority, then you dont need to worry about
- * this macro or the priority bits since the default will always be top priority when all 4 bits
- * of this flag field are 0's.
- *
- * To upload a texture with high priority, do the following:
- *
- * unsigned long flags = kQATexture_Mipmap; // Initialize flags
- *
- * flags |= QACalculatePriorityBits(0); // Setting top priority (this actually does
- * // nothing since the bits are still 0000)
- * QATextureNew(myEngine, flags, pixelType, image, &raveTexture);
- *
- *
- * To do a texture with a middle priority of 8, do the following:
- *
- * unsigned long flags = kQATexture_HighCompression; // Initialize flags
- *
- * flags |= QACalculatePriorityBits(8); // Setting middle priority
- *
- * QATextureNew(myEngine, flags, pixelType, image, &raveTexture);
- *
- ***********************************************************************************************/
- #define QACalculatePriorityBits(_priority) (((unsigned long) (_priority)) << 28)
- /************************************************************************************************
- *
- * Macro definitions for the drawing engine methods included in TQADrawContext. These
- * macros are the recommended means of accessing the engine's draw methods, e.g:
- *
- * TQADrawContext *drawContext;
- * TQAVTexture vertices[3];
- *
- * drawContext = QADrawContextNew (rect, gdevice, engine, kQAContext_ZBuffer);
- * ...
- * QASetInt (drawContext, kQATag_ZFunction, kQAZFunction_LT);
- * QADrawTriGouraud (drawContext, &vertices[0], &vertices[1], &vertices[2], kQATriFlags_None);
- *
- * Note that QARenderStart(), QARenderEnd(), QAFlush() and QASync() have real function
- * definitions instead of macros. This is because these functions can afford the extra
- * per-call overhead of a function layer (which makes application code a little smaller),
- * and to allow a cleaner implementation of handling NULL parameters to QARenderStart().
- *
- ***********************************************************************************************/
- #define QASetFloat(drawContext,tag,newValue)
- (drawContext)->setFloat (drawContext,tag,newValue)
- #define QASetInt(drawContext,tag,newValue)
- (drawContext)->setInt (drawContext,tag,newValue)
- #define QASetPtr(drawContext,tag,newValue)
- (drawContext)->setPtr (drawContext,tag,newValue)
- #define QAGetFloat(drawContext,tag)
- (drawContext)->getFloat (drawContext,tag)
- #define QAGetInt(drawContext,tag)
- (drawContext)->getInt (drawContext,tag)
- #define QAGetPtr(drawContext,tag)
- (drawContext)->getPtr (drawContext,tag)
- #define QADrawPoint(drawContext,v)
- (drawContext)->drawPoint (drawContext,v)
- #define QADrawLine(drawContext,v0,v1)
- (drawContext)->drawLine (drawContext,v0,v1)
- #define QADrawTriGouraud(drawContext,v0,v1,v2,flags)
- (drawContext)->drawTriGouraud (drawContext,v0,v1,v2,flags)
- #define QADrawTriTexture(drawContext,v0,v1,v2,flags)
- (drawContext)->drawTriTexture (drawContext,v0,v1,v2,flags)
- #define QASubmitVerticesGouraud(drawContext,nVertices,vertices)
- (drawContext)->submitVerticesGouraud(drawContext,nVertices,vertices)
-
- #define QASubmitVerticesTexture(drawContext,nVertices,vertices)
- (drawContext)->submitVerticesTexture(drawContext,nVertices,vertices)
-
- #define QASubmitMultiTextureParams(drawContext,nParams,params)
- (drawContext)->submitMultiTextureParams(drawContext,nParams,params)
-
- #define QADrawTriMeshGouraud(drawContext,nTriangle,triangles)
- (drawContext)->drawTriMeshGouraud (drawContext,nTriangle,triangles)
- #define QADrawTriMeshTexture(drawContext,nTriangle,triangles)
- (drawContext)->drawTriMeshTexture (drawContext,nTriangle,triangles)
- #define QADrawVGouraud(drawContext,nVertices,vertexMode,vertices,flags)
- (drawContext)->drawVGouraud (drawContext,nVertices,vertexMode,vertices,flags)
- #define QADrawVTexture(drawContext,nVertices,vertexMode,vertices,flags)
- (drawContext)->drawVTexture (drawContext,nVertices,vertexMode,vertices,flags)
- #define QADrawBitmap(drawContext,v,bitmap)
- (drawContext)->drawBitmap (drawContext,v,bitmap)
- #define QARenderStart(drawContext,dirtyRect,initialContext)
- (drawContext)->renderStart (drawContext,dirtyRect,initialContext)
- #define QARenderEnd(drawContext,modifiedRect)
- (drawContext)->renderEnd (drawContext,modifiedRect)
- #define QARenderAbort(drawContext)
- (drawContext)->renderAbort (drawContext)
- #define QAFlush(drawContext)
- (drawContext)->flush (drawContext)
- #define QASync(drawContext)
- (drawContext)->sync (drawContext)
- #define QASetNoticeMethod(drawContext, method, completionCallBack, refCon)
- (drawContext)->setNoticeMethod (drawContext, method, completionCallBack, refCon)
- #define QAGetNoticeMethod(drawContext, method, completionCallBack, refCon)
- (drawContext)->getNoticeMethod (drawContext, method, completionCallBack, refCon)
-
- #define QAAccessDrawBuffer(drawContext, pixelBuffer)
- (drawContext)->accessDrawBuffer(drawContext, pixelBuffer)
- #define QAAccessDrawBufferEnd(drawContext, dirtyRect)
- (drawContext)->accessDrawBufferEnd(drawContext, dirtyRect)
- #define QAAccessZBuffer(drawContext, zBuffer)
- (drawContext)->accessZBuffer(drawContext, zBuffer)
- #define QAAccessZBufferEnd(drawContext, dirtyRect)
- (drawContext)->accessZBufferEnd(drawContext, dirtyRect)
-
- #define QAClearDrawBuffer(drawContext, rect, initialContext)
- (drawContext)->clearDrawBuffer(drawContext, rect, initialContext)
- #define QAClearZBuffer(drawContext, rect, initialContext)
- (drawContext)->clearZBuffer(drawContext, rect, initialContext)
- #define QATextureNewFromDrawContext(drawContext, flags, newTexture)
- (drawContext)->textureFromContext(drawContext, flags, newTexture)
- #define QABitmapNewFromDrawContext(drawContext, flags, newBitmap)
- (drawContext)->bitmapFromContext(drawContext, flags, newBitmap)
- #define QABusy(drawContext)
- (drawContext)->busy(drawContext)
- #define QASwapBuffers(drawContext, dirtyRect)
- (drawContext)->swapBuffers(drawContext, dirtyRect)
- /********************************************************************
- * TQAVersion sets the TQADrawContext 'version' field. It is set by
- * the manager to indicate the version of the TQADrawContext structure.
- *******************************************************************/
- enum TQAVersion {
- kQAVersion_Prerelease = 0,
- kQAVersion_1_0 = 1,
- kQAVersion_1_0_5 = 2, /* Added tri mesh functions, color tables */
- kQAVersion_1_5 = 3, /* Added call backs, texture compression, and new error return code */
- kQAVersion_1_6 = 4 /* Added QAAccess_xxx, fog, _Options2, Clear_xxx, etc. */
- };
- typedef enum TQAVersion TQAVersion;
- /***********************************************************************
- * TQADrawContext structure holds method pointers.
- * This is a forward refrence. The structure is defined later.
- **********************************************************************/
- typedef struct TQADrawContext TQADrawContext;
- /************************************************************************************************
- *
- * Typedefs of draw method functions provided by the drawing engine. One function pointer
- * for each of these function types in stored in the TQADrawContext public data structure.
- *
- * These functions should be accessed through the QA<function>(context,...) macros,
- * defined above.
- *
- ***********************************************************************************************/
- typedef CALLBACK_API_C( void , TQAStandardNoticeMethod )(const TQADrawContext *drawContext, void *refCon);
- typedef CALLBACK_API_C( void , TQABufferNoticeMethod )(const TQADrawContext *drawContext, const TQADevice *buffer, const TQARect *dirtyRect, void *refCon);
- union TQANoticeMethod {
- TQAStandardNoticeMethod standardNoticeMethod; /* Used for non-buffer related methods */
- TQABufferNoticeMethod bufferNoticeMethod; /* Used for buffer handling methods */
- };
- typedef union TQANoticeMethod TQANoticeMethod;
- typedef CALLBACK_API_C( void , TQASetFloat )(TQADrawContext *drawContext, TQATagFloat tag, float newValue);
- typedef CALLBACK_API_C( void , TQASetInt )(TQADrawContext *drawContext, TQATagInt tag, unsigned long newValue);
- typedef CALLBACK_API_C( void , TQASetPtr )(TQADrawContext *drawContext, TQATagPtr tag, const void *newValue);
- typedef CALLBACK_API_C( float , TQAGetFloat )(const TQADrawContext *drawContext, TQATagFloat tag);
- typedef CALLBACK_API_C( unsigned long , TQAGetInt )(const TQADrawContext *drawContext, TQATagInt tag);
- typedef CALLBACK_API_C( void *, TQAGetPtr )(const TQADrawContext *drawContext, TQATagPtr tag);
- typedef CALLBACK_API_C( void , TQADrawPoint )(const TQADrawContext *drawContext, const TQAVGouraud *v);
- typedef CALLBACK_API_C( void , TQADrawLine )(const TQADrawContext *drawContext, const TQAVGouraud *v0, const TQAVGouraud *v1);
- typedef CALLBACK_API_C( void , TQADrawTriGouraud )(const TQADrawContext *drawContext, const TQAVGouraud *v0, const TQAVGouraud *v1, const TQAVGouraud *v2, unsigned long flags);
- typedef CALLBACK_API_C( void , TQADrawTriTexture )(const TQADrawContext *drawContext, const TQAVTexture *v0, const TQAVTexture *v1, const TQAVTexture *v2, unsigned long flags);
- typedef CALLBACK_API_C( void , TQASubmitVerticesGouraud )(const TQADrawContext *drawContext, unsigned long nVertices, const TQAVGouraud *vertices);
- typedef CALLBACK_API_C( void , TQASubmitVerticesTexture )(const TQADrawContext *drawContext, unsigned long nVertices, const TQAVTexture *vertices);
- typedef CALLBACK_API_C( void , TQADrawTriMeshGouraud )(const TQADrawContext *drawContext, unsigned long nTriangles, const TQAIndexedTriangle *triangles);
- typedef CALLBACK_API_C( void , TQADrawTriMeshTexture )(const TQADrawContext *drawContext, unsigned long nTriangles, const TQAIndexedTriangle *triangles);
- typedef CALLBACK_API_C( void , TQADrawVGouraud )(const TQADrawContext *drawContext, unsigned long nVertices, TQAVertexMode vertexMode, const TQAVGouraud vertices[], const unsigned long flags[]);
- typedef CALLBACK_API_C( void , TQADrawVTexture )(const TQADrawContext *drawContext, unsigned long nVertices, TQAVertexMode vertexMode, const TQAVTexture vertices[], const unsigned long flags[]);
- typedef CALLBACK_API_C( void , TQADrawBitmap )(const TQADrawContext *drawContext, const TQAVGouraud *v, TQABitmap *bitmap);
- typedef CALLBACK_API_C( void , TQARenderStart )(const TQADrawContext *drawContext, const TQARect *dirtyRect, const TQADrawContext *initialContext);
- typedef CALLBACK_API_C( TQAError , TQARenderEnd )(const TQADrawContext *drawContext, const TQARect *modifiedRect);
- typedef CALLBACK_API_C( TQAError , TQARenderAbort )(const TQADrawContext *drawContext);
- typedef CALLBACK_API_C( TQAError , TQAFlush )(const TQADrawContext *drawContext);
- typedef CALLBACK_API_C( TQAError , TQASync )(const TQADrawContext *drawContext);
- typedef CALLBACK_API_C( TQAError , TQASetNoticeMethod )(const TQADrawContext *drawContext, TQAMethodSelector method, TQANoticeMethod completionCallBack, void *refCon);
- typedef CALLBACK_API_C( TQAError , TQAGetNoticeMethod )(const TQADrawContext *drawContext, TQAMethodSelector method, TQANoticeMethod *completionCallBack, void **refCon);
- typedef CALLBACK_API_C( void , TQASubmitMultiTextureParams )(const TQADrawContext *drawContext, unsigned long nParams, const TQAVMultiTexture *params);
- typedef CALLBACK_API_C( TQAError , TQAAccessDrawBuffer )(const TQADrawContext *drawContext, TQAPixelBuffer *buffer);
- typedef CALLBACK_API_C( TQAError , TQAAccessDrawBufferEnd )(const TQADrawContext *drawContext, const TQARect *dirtyRect);
- typedef CALLBACK_API_C( TQAError , TQAAccessZBuffer )(const TQADrawContext *drawContext, TQAZBuffer *buffer);
- typedef CALLBACK_API_C( TQAError , TQAAccessZBufferEnd )(const TQADrawContext *drawContext, const TQARect *dirtyRect);
- typedef CALLBACK_API_C( TQAError , TQAClearDrawBuffer )(const TQADrawContext *drawContext, const TQARect *rect, const TQADrawContext *initialContext);
- typedef CALLBACK_API_C( TQAError , TQAClearZBuffer )(const TQADrawContext *drawContext, const TQARect *rect, const TQADrawContext *initialContext);
- typedef CALLBACK_API_C( TQAError , TQATextureNewFromDrawContext )(const TQADrawContext *drawContext, unsigned long flags, TQATexture **newTexture);
- typedef CALLBACK_API_C( TQAError , TQABitmapNewFromDrawContext )(const TQADrawContext *drawContext, unsigned long flags, TQABitmap **newBitmap);
- typedef CALLBACK_API_C( TQABoolean , TQABusy )(const TQADrawContext *drawContext);
- typedef CALLBACK_API_C( TQAError , TQASwapBuffers )(const TQADrawContext *drawContext, const TQARect *dirtyRect);
- /************************************************************************************************
- *
- * Public TQADrawContext structure. This contains function pointers for the chosen
- * drawing engine.
- *
- ***********************************************************************************************/
- struct TQADrawContext {
- TQADrawPrivate * drawPrivate; /* Engine's private data for this context */
- TQAVersion version; /* Version number */
- TQASetFloat setFloat; /* Method: Set a float state variable */
- TQASetInt setInt; /* Method: Set an unsigned long state variable */
- TQASetPtr setPtr; /* Method: Set an unsigned long state variable */
- TQAGetFloat getFloat; /* Method: Get a float state variable */
- TQAGetInt getInt; /* Method: Get an unsigned long state variable */
- TQAGetPtr getPtr; /* Method: Get an pointer state variable */
- TQADrawPoint drawPoint; /* Method: Draw a point */
- TQADrawLine drawLine; /* Method: Draw a line */
- TQADrawTriGouraud drawTriGouraud; /* Method: Draw a Gouraud shaded triangle */
- TQADrawTriTexture drawTriTexture; /* Method: Draw a texture mapped triangle */
- TQADrawVGouraud drawVGouraud; /* Method: Draw Gouraud vertices */
- TQADrawVTexture drawVTexture; /* Method: Draw texture vertices */
- TQADrawBitmap drawBitmap; /* Method: Draw a bitmap */
- TQARenderStart renderStart; /* Method: Initialize for rendering */
- TQARenderEnd renderEnd; /* Method: Complete rendering and display */
- TQARenderAbort renderAbort; /* Method: Abort any outstanding rendering (blocking) */
- TQAFlush flush; /* Method: Start render of any queued commands (non-blocking) */
- TQASync sync; /* Method: Wait for completion of all rendering (blocking) */
- TQASubmitVerticesGouraud submitVerticesGouraud; /* Method: Submit Gouraud vertices for trimesh */
- TQASubmitVerticesTexture submitVerticesTexture; /* Method: Submit Texture vertices for trimesh */
- TQADrawTriMeshGouraud drawTriMeshGouraud; /* Method: Draw a Gouraud triangle mesh */
- TQADrawTriMeshTexture drawTriMeshTexture; /* Method: Draw a Texture triangle mesh */
- TQASetNoticeMethod setNoticeMethod; /* Method: Set a notice method */
- TQAGetNoticeMethod getNoticeMethod; /* Method: Get a notice method */
- TQASubmitMultiTextureParams submitMultiTextureParams; /* Method: Submit Secondary texture params */
- TQAAccessDrawBuffer accessDrawBuffer;
- TQAAccessDrawBufferEnd accessDrawBufferEnd;
- TQAAccessZBuffer accessZBuffer;
- TQAAccessZBufferEnd accessZBufferEnd;
- TQAClearDrawBuffer clearDrawBuffer;
- TQAClearZBuffer clearZBuffer;
- TQATextureNewFromDrawContext textureFromContext;
- TQABitmapNewFromDrawContext bitmapFromContext;
- TQABusy busy;
- TQASwapBuffers swapBuffers;
- };
- /************************************************************************************************
- *
- * Acceleration manager function prototypes.
- *
- ***********************************************************************************************/
- #if CALL_NOT_IN_CARBON
- EXTERN_API_C( TQAError )
- QADrawContextNew (const TQADevice * device,
- const TQARect * rect,
- const TQAClip * clip,
- const TQAEngine * engine,
- unsigned long flags,
- TQADrawContext ** newDrawContext);
- EXTERN_API_C( void )
- QADrawContextDelete (TQADrawContext * drawContext);
- EXTERN_API_C( TQAError )
- QAColorTableNew (const TQAEngine * engine,
- TQAColorTableType tableType,
- void * pixelData,
- long transparentIndexFlag,
- TQAColorTable ** newTable);
- EXTERN_API_C( void )
- QAColorTableDelete (const TQAEngine * engine,
- TQAColorTable * colorTable);
- EXTERN_API_C( TQAError )
- QATextureNew (const TQAEngine * engine,
- unsigned long flags,
- TQAImagePixelType pixelType,
- const TQAImage images[],
- TQATexture ** newTexture);
- EXTERN_API_C( TQAError )
- QATextureDetach (const TQAEngine * engine,
- TQATexture * texture);
- EXTERN_API_C( void )
- QATextureDelete (const TQAEngine * engine,
- TQATexture * texture);
- EXTERN_API_C( TQAError )
- QATextureBindColorTable (const TQAEngine * engine,
- TQATexture * texture,
- TQAColorTable * colorTable);
- EXTERN_API_C( TQAError )
- QABitmapNew (const TQAEngine * engine,
- unsigned long flags,
- TQAImagePixelType pixelType,
- const TQAImage * image,
- TQABitmap ** newBitmap);
- EXTERN_API_C( TQAError )
- QABitmapDetach (const TQAEngine * engine,
- TQABitmap * bitmap);
- EXTERN_API_C( void )
- QABitmapDelete (const TQAEngine * engine,
- TQABitmap * bitmap);
- EXTERN_API_C( TQAError )
- QABitmapBindColorTable (const TQAEngine * engine,
- TQABitmap * bitmap,
- TQAColorTable * colorTable);
- EXTERN_API_C( TQAEngine *)
- QADeviceGetFirstEngine (const TQADevice * device);
- EXTERN_API_C( TQAEngine *)
- QADeviceGetNextEngine (const TQADevice * device,
- const TQAEngine * currentEngine);
- EXTERN_API_C( TQAError )
- QAEngineCheckDevice (const TQAEngine * engine,
- const TQADevice * device);
- EXTERN_API_C( TQAError )
- QAEngineGestalt (const TQAEngine * engine,
- TQAGestaltSelector selector,
- void * response);
- EXTERN_API_C( TQAError )
- QAEngineEnable (long vendorID,
- long engineID);
- EXTERN_API_C( TQAError )
- QAEngineDisable (long vendorID,
- long engineID);
- EXTERN_API_C( TQAError )
- QAAccessTexture (const TQAEngine * engine,
- TQATexture * texture,
- long mipmapLevel,
- long flags,
- TQAPixelBuffer * buffer);
- EXTERN_API_C( TQAError )
- QAAccessTextureEnd (const TQAEngine * engine,
- TQATexture * texture,
- const TQARect * dirtyRect);
- EXTERN_API_C( TQAError )
- QAAccessBitmap (const TQAEngine * engine,
- TQABitmap * bitmap,
- long flags,
- TQAPixelBuffer * buffer);
- EXTERN_API_C( TQAError )
- QAAccessBitmapEnd (const TQAEngine * engine,
- TQABitmap * bitmap,
- const TQARect * dirtyRect);
- #endif /* CALL_NOT_IN_CARBON */
- #if TARGET_OS_MAC
- #if CALL_NOT_IN_CARBON
- EXTERN_API_C( TQAError )
- QARegisterDrawNotificationProc (Rect * globalRect,
- TQADrawNotificationProcPtr proc,
- long refCon,
- TQADrawNotificationProcRefNum * refNum);
- EXTERN_API_C( TQAError )
- QAUnregisterDrawNotificationProc (TQADrawNotificationProcRefNum refNum);
- #endif /* CALL_NOT_IN_CARBON */
- #endif /* TARGET_OS_MAC */
- #if PRAGMA_ENUM_ALWAYSINT
- #pragma enumsalwaysint reset
- #ifdef __RAVE__RESTORE_TWOBYTEINTS
- #pragma fourbyteints off
- #endif
- #elif PRAGMA_ENUM_OPTIONS
- #pragma option enum=reset
- #elif defined(__RAVE__RESTORE_PACKED_ENUMS)
- #pragma options(pack_enums)
- #endif
- #if PRAGMA_STRUCT_ALIGN
- #pragma options align=reset
- #elif PRAGMA_STRUCT_PACKPUSH
- #pragma pack(pop)
- #elif PRAGMA_STRUCT_PACK
- #pragma pack()
- #endif
- #ifdef PRAGMA_IMPORT_OFF
- #pragma import off
- #elif PRAGMA_IMPORT
- #pragma import reset
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* __RAVE__ */