RAVE.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:76k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2.      File:       RAVE.h
  3.  
  4.      Contains:   Interface for RAVE (Renderer Acceleration Virtual Engine)
  5.  
  6.      Version:    Technology: Quickdraw 3D 1.6
  7.                  Release:    QuickTime 6.0.2
  8.  
  9.      Copyright:  (c) 1995-2001 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:      For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __RAVE__
  18. #define __RAVE__
  19. #ifndef __CONDITIONALMACROS__
  20. #include "ConditionalMacros.h"
  21. #endif
  22. #if TARGET_OS_MAC
  23. #ifndef __MACTYPES__
  24. #include "MacTypes.h"
  25. #endif
  26. #ifndef __QUICKDRAW__
  27. #include "Quickdraw.h"
  28. #endif
  29. #ifndef __QDOFFSCREEN__
  30. #include "QDOffscreen.h"
  31. #endif
  32. #endif  /* TARGET_OS_MAC */
  33. #if TARGET_OS_WIN32
  34. #include "windows.h"
  35. #ifndef RAVE_NO_DIRECTDRAW
  36. #include "ddraw.h"
  37. #endif  /* !defined(RAVE_NO_DIRECTDRAW) */
  38. #endif  /* TARGET_OS_WIN32 */
  39. #if PRAGMA_ONCE
  40. #pragma once
  41. #endif
  42. #ifdef __cplusplus
  43. extern "C" {
  44. #endif
  45. #if PRAGMA_IMPORT
  46. #pragma import on
  47. #endif
  48. #if PRAGMA_STRUCT_ALIGN
  49.     #pragma options align=power
  50. #elif PRAGMA_STRUCT_PACKPUSH
  51.     #pragma pack(push, 2)
  52. #elif PRAGMA_STRUCT_PACK
  53.     #pragma pack(2)
  54. #endif
  55. #if PRAGMA_ENUM_ALWAYSINT
  56.     #if defined(__fourbyteints__) && !__fourbyteints__ 
  57.         #define __RAVE__RESTORE_TWOBYTEINTS
  58.         #pragma fourbyteints on
  59.     #endif
  60.     #pragma enumsalwaysint on
  61. #elif PRAGMA_ENUM_OPTIONS
  62.     #pragma option enum=int
  63. #elif PRAGMA_ENUM_PACK
  64.     #if __option(pack_enums)
  65.         #define __RAVE__RESTORE_PACKED_ENUMS
  66.         #pragma options(!pack_enums)
  67.     #endif
  68. #endif
  69. #define RAVE_OBSOLETE 0
  70. /******************************************************************************
  71.  *
  72.  * Platform macros.
  73.  * This sets kQAPlatform to one of kQAMacOS, kQAWin32, or kQAGeneric.
  74.  * kQAPlatform controls platform-specific compilation switches and types.
  75.  *
  76.  *****************************************************************************/
  77. #if !defined(kQAMacOS)
  78. #define  kQAMacOS        1           /* Target is MacOS                  */
  79. #endif
  80. #if !defined(kQAGeneric)
  81. #define kQAGeneric      2           /* Target is generic platform       */
  82. #endif
  83. #if !defined(kQAWin32)
  84. #define kQAWin32      3           /* Target is Win32                  */
  85. #endif
  86. #if defined(_WIN32) || defined(_WINDOWS)
  87.     #define kQAPlatform kQAWin32
  88. #elif !defined(kQAPlatform)
  89.    #define kQAPlatform kQAMacOS
  90. #endif
  91. /******************************************************************************
  92.  *
  93.  * Export Control
  94.  *
  95.  *****************************************************************************/
  96. #if defined(_MSC_VER)
  97.     /* Microsoft Visual C */
  98.    #if defined(WIN32_RAVEEXPORTING)    
  99.    /* define when building DLL */
  100.      #define RAVE_EXPORT     __declspec( dllexport )
  101.         #define RAVE_CALL
  102.       #define RAVE_CALLBACK
  103.   #else
  104.       #define RAVE_EXPORT     __declspec( dllimport )
  105.         #define RAVE_CALL       __cdecl
  106.         #define RAVE_CALLBACK   __cdecl
  107.     #endif 
  108.     /* WIN32_RAVEEXPORTING */
  109. #else
  110.     #define RAVE_EXPORT
  111.     #define RAVE_CALL
  112.   #define RAVE_CALLBACK
  113. #endif 
  114. /* _MSC_VER */
  115. /******************************************************************************
  116.  *
  117.  * Platform dependent datatypes: TQAImagePixelType, TQADevice, TQAClip, and TQARect.
  118.  *
  119.  *****************************************************************************/
  120. enum TQAImagePixelType {
  121.     kQAPixel_Alpha1             = 0,                            /* 1 bit/pixel alpha */
  122.     kQAPixel_RGB16              = 1,                            /* 16 bits/pixel, R=14:10, G=9:5, B=4:0 */
  123.     kQAPixel_ARGB16             = 2,                            /* 16 bits/pixel, A=15, R=14:10, G=9:5, B=4:0 */
  124.     kQAPixel_RGB32              = 3,                            /* 32 bits/pixel, R=23:16, G=15:8, B=7:0 */
  125.     kQAPixel_ARGB32             = 4,                            /* 32 bits/pixel, A=31:24, R=23:16, G=15:8, B=7:0 */
  126.     kQAPixel_CL4                = 5,                            /* 4 bit color look up table, always big endian, ie high 4 bits effect left pixel */
  127.     kQAPixel_CL8                = 6,                            /* 8 bit color look up table */
  128.     kQAPixel_RGB16_565          = 7,                            /* Win32 ONLY  16 bits/pixel, no alpha, R:5, G:6, B:5 */
  129.     kQAPixel_RGB24              = 8,                            /* Win32 ONLY  24 bits/pixel, no alpha, R:8, G:8, B:8 */
  130.     kQAPixel_RGB8_332           = 9,                            /* 8 bits/pixel, R=7:5, G = 4:2, B = 1:0 */
  131.     kQAPixel_ARGB16_4444        = 10,                           /* 16 bits/pixel, A=15:12, R=11:8, G=7:4, B=3:0 */
  132.     kQAPixel_ACL16_88           = 11,                           /* 16 bits/pixel, A=15:8, CL=7:0, 8 bit alpha + 8 bit color lookup */
  133.     kQAPixel_I8                 = 12,                           /* 8 bits/pixel, I=7:0, intensity map (grayscale) */
  134.     kQAPixel_AI16_88            = 13,                           /* 16 bits/pixel, A=15:8, I=7:0, intensity map (grayscale) */
  135.     kQAPixel_YUVS               = 14,                           /* 16 bits/pixel, QD's kYUVSPixelFormat (4:2:2, YUYV ordering, unsigned UV) */
  136.     kQAPixel_YUVU               = 15,                           /* 16 bits/pixel, QD's kYUVUPixelFormat (4:2:2, YUYV ordering, signed UV) */
  137.     kQAPixel_YVYU422            = 16,                           /* 16 bits/pixel, QD's kYVYU422PixelFormat (4:2:2, YVYU ordering, unsigned UV) */
  138.     kQAPixel_UYVY422            = 17                            /* 16 bits/pixel, QD's kUYVY422PixelFormat (4:2:2, UYVY ordering, unsigned UV) */
  139. };
  140. typedef enum TQAImagePixelType TQAImagePixelType;
  141. enum TQAColorTableType {
  142.     kQAColorTable_CL8_RGB32     = 0,                            /* 256 entry, 32 bit/pixel, R=23:16, G=15:8, B=7:0 */
  143.     kQAColorTable_CL4_RGB32     = 1                             /* 16 entry, 32 bit/pixel, R=23:16, G=15:8, B=7:0 */
  144. };
  145. typedef enum TQAColorTableType TQAColorTableType;
  146. /* Selects target device type */
  147. enum TQADeviceType {
  148.     kQADeviceMemory             = 0,                            /* Memory draw context */
  149.     kQADeviceGDevice            = 1,                            /* Macintosh GDevice draw context */
  150.     kQADeviceWin32DC            = 2,                            /* Win32 DC */
  151.     kQADeviceDDSurface          = 3                             /* Win32 DirectDraw Surface */
  152. };
  153. typedef enum TQADeviceType TQADeviceType;
  154. /* Generic memory pixmap device */
  155. struct TQADeviceMemory {
  156.     long                            rowBytes;                   /* Rowbytes */
  157.     TQAImagePixelType               pixelType;                  /* Depth, color space, etc. */
  158.     long                            width;                      /* Width in pixels */
  159.     long                            height;                     /* Height in pixels */
  160.     void *                          baseAddr;                   /* Base address of pixmap */
  161. };
  162. typedef struct TQADeviceMemory          TQADeviceMemory;
  163. /* Offscreen Device */
  164. struct TQADeviceOffscreen {
  165.     TQAImagePixelType               pixelType;                  /* Depth, color space, etc. */
  166. };
  167. typedef struct TQADeviceOffscreen       TQADeviceOffscreen;
  168. /* Selects target clip type */
  169. enum TQAClipType {
  170.     kQAClipRgn                  = 0,                            /* Macintosh clipRgn with serial number */
  171.     kQAClipWin32Rgn             = 1                             /* Win32 clip region */
  172. };
  173. typedef enum TQAClipType TQAClipType;
  174. struct TQARect {
  175.     long                            left;
  176.     long                            right;
  177.     long                            top;
  178.     long                            bottom;
  179. };
  180. typedef struct TQARect                  TQARect;
  181. #if TARGET_OS_MAC
  182. union TQAPlatformDevice {
  183.     TQADeviceMemory                 memoryDevice;
  184.     GDHandle                        gDevice;
  185. };
  186. typedef union TQAPlatformDevice         TQAPlatformDevice;
  187. union TQAPlatformClip {
  188.     RgnHandle                       clipRgn;
  189. };
  190. typedef union TQAPlatformClip           TQAPlatformClip;
  191. typedef CALLBACK_API( void , TQADrawNotificationProcPtr )(short left, short top, short right, short bottom, long refCon);
  192. typedef long                            TQADrawNotificationProcRefNum;
  193. /* used to unregister your proc */
  194. #elif TARGET_OS_WIN32
  195. #if !defined(RAVE_NO_DIRECTDRAW)
  196.  enum TQADirectDrawObjectSelector
  197.    {
  198.       kQADirectDrawObject     = 1,
  199.        kQADirectDrawObject2    = 2
  200.     };
  201.  typedef enum TQADirectDrawObjectSelector TQADirectDrawObjectSelector;
  202.  enum TQADirectDrawSurfaceSelector
  203.   {
  204.       kQADirectDrawSurface    = 1,
  205.        kQADirectDrawSurface2   = 2
  206.     };
  207.  typedef enum TQADirectDrawSurfaceSelector TQADirectDrawSurfaceSelector;
  208. #endif /* !RAVE_NO_DIRECTDRAW */
  209.  union TQAPlatformDevice
  210.     {
  211.       TQADeviceMemory         memoryDevice;
  212.       HDC                     hdc;
  213. #if !defined(RAVE_NO_DIRECTDRAW)
  214.       struct
  215.      {
  216.           TQADirectDrawObjectSelector     objectSelector;
  217.             union
  218.           {
  219.               LPDIRECTDRAW                lpDirectDraw;
  220.               LPDIRECTDRAW2               lpDirectDraw2;
  221.          };
  222.             TQADirectDrawSurfaceSelector    surfaceSelector;
  223.            union
  224.           {
  225.               LPDIRECTDRAWSURFACE         lpDirectDrawSurface;
  226.                LPDIRECTDRAWSURFACE2        lpDirectDrawSurface2;
  227.           };
  228.      };
  229. #endif /* RAVE_NO_DIRECTDRAW */
  230.  };
  231.  typedef union TQAPlatformDevice TQAPlatformDevice;
  232.  
  233.    union TQAPlatformClip
  234.   {
  235.       HRGN            clipRgn;
  236.    };
  237.  typedef union TQAPlatformClip TQAPlatformClip;
  238. #else
  239. /*
  240.      * Generic platform supports memory device only. TQARect is generic. TQAClip is ???.
  241.      */
  242. union TQAPlatformDevice {
  243.     TQADeviceMemory                 memoryDevice;
  244. };
  245. typedef union TQAPlatformDevice         TQAPlatformDevice;
  246. union TQAPlatformClip {
  247.     void *                          region;                     /* ??? */
  248. };
  249. typedef union TQAPlatformClip           TQAPlatformClip;
  250. #endif  /*  */
  251. struct TQADevice {
  252.     TQADeviceType                   deviceType;
  253.     TQAPlatformDevice               device;
  254. };
  255. typedef struct TQADevice                TQADevice;
  256. struct TQAClip {
  257.     TQAClipType                     clipType;
  258.     TQAPlatformClip                 clip;
  259. };
  260. typedef struct TQAClip                  TQAClip;
  261. /******************************************************************************
  262.  *
  263.  * Basic data types.
  264.  *
  265.  *****************************************************************************/
  266. /* Pointer to a drawing engine */
  267. typedef struct TQAEngine TQAEngine;
  268. /* Pointer to an allocated texture */
  269. typedef struct TQATexture TQATexture;
  270. /* Pointer to an allocated bitmap */
  271. typedef struct TQABitmap TQABitmap;
  272. /* Engine's private draw context pointer */
  273. typedef struct TQADrawPrivate TQADrawPrivate;
  274. /* An engine specific color table structure */
  275. typedef struct TQAColorTable TQAColorTable;
  276. /* A single triangle element for QADrawTriMesh */
  277. struct TQAIndexedTriangle {
  278.     unsigned long                   triangleFlags;              /* Triangle flags, see kQATriFlags_ */
  279.     unsigned long                   vertices[3];                /* Indices into a vertex array */
  280. };
  281. typedef struct TQAIndexedTriangle       TQAIndexedTriangle;
  282. /* An image for use as texture or bitmap */
  283. struct TQAImage {
  284.     long                            width;                      /* Width of pixmap */
  285.     long                            height;                     /* Height of pixmap */
  286.     long                            rowBytes;                   /* Rowbytes of pixmap */
  287.     void *                          pixmap;                     /* Pixmap */
  288. };
  289. typedef struct TQAImage                 TQAImage;
  290. /* a pixel buffer */
  291. typedef TQADeviceMemory                 TQAPixelBuffer;
  292. /* a zbuffer */
  293. struct TQAZBuffer {
  294.     long                            width;                      /* Width of pixmap */
  295.     long                            height;                     /* Height of pixmap */
  296.     long                            rowBytes;                   /* Rowbytes of pixmap */
  297.     void *                          zbuffer;                    /* pointer to the zbuffer data */
  298.     long                            zDepth;                     /* bit depth of zbuffer (16,24,32...) */
  299.     long                            isBigEndian;                /* true if zbuffer values are in big-endian format, false if little-endian */
  300. };
  301. typedef struct TQAZBuffer               TQAZBuffer;
  302. /* Standard error type */
  303. enum TQAError {
  304.     kQANoErr                    = 0,                            /* No error */
  305.     kQAError                    = 1,                            /* Generic error flag */
  306.     kQAOutOfMemory              = 2,                            /* Insufficient memory */
  307.     kQANotSupported             = 3,                            /* Requested feature is not supported */
  308.     kQAOutOfDate                = 4,                            /* A newer drawing engine was registered */
  309.     kQAParamErr                 = 5,                            /* Error in passed parameters */
  310.     kQAGestaltUnknown           = 6,                            /* Requested gestalt type isn't available */
  311.     kQADisplayModeUnsupported   = 7,                            /* Engine cannot render to the display in its current , */
  312.                                                                 /* mode, but could if it were in some other mode */
  313.     kQAOutOfVideoMemory         = 8                             /* There is not enough VRAM to support the desired context dimensions */
  314. };
  315. typedef enum TQAError TQAError;
  316. /* TQABoolean */
  317. typedef unsigned char                   TQABoolean;
  318. /************************************************************************************************
  319.  *
  320.  * Vertex data types.
  321.  *
  322.  ***********************************************************************************************/
  323. /*
  324.  * TQAVGouraud is used for Gouraud shading. Each vertex specifies position, color and Z.
  325.  *
  326.  * Alpha is always treated as indicating transparency. Drawing engines which don't
  327.  * support Z-sorted rendering use the back-to-front transparency blending functions
  328.  * shown below. (ARGBsrc are the source (new) values, ARGBdest are  the destination
  329.  * (previous) pixel values.)
  330.  *
  331.  *      Premultiplied                           Interpolated
  332.  *
  333.  *      A = 1 - (1 - Asrc) * (1 - Adest)        A = 1 - (1 - Asrc) * (1 - Adest) 
  334.  *      R = (1 - Asrc) * Rdest + Rsrc           R = (1 - Asrc) * Rdest + Asrc * Rsrc
  335.  *      G = (1 - Asrc) * Gdest + Gsrc           G = (1 - Asrc) * Gdest + Asrc * Gsrc
  336.  *      B = (1 - Asrc) * Bdest + Bsrc           B = (1 - Asrc) * Bdest + Asrc * Bsrc
  337.  *
  338.  * Note that the use of other blending modes to implement antialiasing is performed
  339.  * automatically by the drawing engine when the kQATag_Antialias variable !=
  340.  * kQAAntiAlias_Fast. The driving software should continue to use the alpha fields
  341.  * for transparency even when antialiasing is being used (the drawing engine will
  342.  * resolve the multiple blending requirements as best as it can).
  343.  *
  344.  * Drawing engines which perform front-to-back Z-sorted rendering should replace
  345.  * the blending function shown above with the equivalent front-to-back formula.
  346.  */
  347. struct TQAVGouraud {
  348.     float                           x;                          /* X pixel coordinate, 0.0 <= x < width */
  349.     float                           y;                          /* Y pixel coordinate, 0.0 <= y < height */
  350.     float                           z;                          /* Z coordinate, 0.0 <= z <= 1.0 */
  351.     float                           invW;                       /* 1 / w; required only when kQAPerspectiveZ_On is set */
  352.     float                           r;                          /* Red, 0.0 <= r <= 1.0 */
  353.     float                           g;                          /* Green, 0.0 <= g <= 1.0 */
  354.     float                           b;                          /* Blue, 0.0 <= b <= 1.0 */
  355.     float                           a;                          /* Alpha, 0.0 <= a <= 1.0, 1.0 is opaque */
  356. };
  357. typedef struct TQAVGouraud              TQAVGouraud;
  358. /*
  359.  * TQAVTexture is used for texture mapping. The texture mapping operation
  360.  * is controlled by the kQATag_TextureOp variable, which is a mask of
  361.  * kQATextureOp_None/Modulate/Highlight/Decal. Below is pseudo-code for the
  362.  * texture shading operation:
  363.  *
  364.  *      texPix = TextureLookup (uq/q, vq/q);
  365.  *      if (kQATextureOp_Decal)
  366.  *      {
  367.  *          texPix.r = texPix.a * texPix.r + (1 - texPix.a) * r;
  368.  *          texPix.g = texPix.a * texPix.g + (1 - texPix.a) * g;
  369.  *          texPix.b = texPix.a * texPix.b + (1 - texPix.a) * b;
  370.  *          texPix.a = a;
  371.  *      }
  372.  *      else
  373.  *      {
  374.  *          texPix.a = texPix.a * a;
  375.  *      }
  376.  *      if (kQATextureOp_Modulate)
  377.  *      {
  378.  *          texPix.r *= kd_r;       // Clamped to prevent overflow
  379.  *          texPix.g *= kd_g;       // Clamped to prevent overflow
  380.  *          texPix.b *= kd_b;       // Clamped to prevent overflow
  381.  *      }
  382.  *      if (kQATextureOp_Highlight)
  383.  *      {
  384.  *          texPix.r += ks_r;       // Clamped to prevent overflow
  385.  *          texPix.g += ks_g;       // Clamped to prevent overflow
  386.  *          texPix.b += ks_b;       // Clamped to prevent overflow
  387.  *      }
  388.  *
  389.  * After computation of texPix, transparency blending (as shown
  390.  * above for TQAVGouraud) is performed.
  391.  */
  392. struct TQAVTexture {
  393.     float                           x;                          /* X pixel coordinate, 0.0 <= x < width */
  394.     float                           y;                          /* Y pixel coordinate, 0.0 <= y < height */
  395.     float                           z;                          /* Z coordinate, 0.0 <= z <= 1.0 */
  396.     float                           invW;                       /* 1 / w (always required) */
  397.                                                                 /* rgb are used only when kQATextureOp_Decal is set. a is always required */
  398.     float                           r;                          /* Red, 0.0 <= r <= 1.0 */
  399.     float                           g;                          /* Green, 0.0 <= g <= 1.0 */
  400.     float                           b;                          /* Blue, 0.0 <= b <= 1.0 */
  401.     float                           a;                          /* Alpha, 0.0 <= a <= 1.0, 1.0 is opaque */
  402.                                                                 /* uOverW and vOverW are required by all modes */
  403.     float                           uOverW;                     /* u / w */
  404.     float                           vOverW;                     /* v / w */
  405.                                                                 /* kd_r/g/b are used only when kQATextureOp_Modulate is set */
  406.     float                           kd_r;                       /* Scale factor for texture red, 0.0 <= kd_r */
  407.     float                           kd_g;                       /* Scale factor for texture green, 0.0 <= kd_g */
  408.     float                           kd_b;                       /* Scale factor for texture blue, 0.0 <= kd_b */
  409.                                                                 /* ks_r/g/b are used only when kQATextureOp_Highlight is set */
  410.     float                           ks_r;                       /* Red specular highlight, 0.0 <= ks_r <= 1.0 */
  411.     float                           ks_g;                       /* Green specular highlight, 0.0 <= ks_g <= 1.0 */
  412.     float                           ks_b;                       /* Blue specular highlight, 0.0 <= ks_b <= 1.0 */
  413. };
  414. typedef struct TQAVTexture              TQAVTexture;
  415. /*
  416. *  TQAVMultiTexture allows you to specify the uv and invW values
  417. *  for secondary textures.  This data is submitted with the
  418. *  QASubmitMultiTextureParams() call.
  419. */
  420. struct TQAVMultiTexture {
  421.     float                           invW;
  422.     float                           uOverW;
  423.     float                           vOverW;
  424. };
  425. typedef struct TQAVMultiTexture         TQAVMultiTexture;
  426. /************************************************************************************************
  427.  *
  428.  * Constants used for the state variables.
  429.  *
  430.  ***********************************************************************************************/
  431. /*
  432.  * kQATag_xxx is used to select a state variable when calling QASetFloat(), QASetInt(),
  433.  * QAGetFloat() and QAGetInt(). The kQATag values are split into three separate enumerated
  434.  * types: TQATagInt, TQATagPtr and TQATagFloat. TQATagInt is used for the QASet/GetInt()
  435.  * functions, TQATagPtr is used for the QASet/GetPtr() functions, and TQATagFloat is used for 
  436.  * the QASet/GetFloat() functions. (This is so that a compiler that typechecks enums can flag
  437.  * a float/int tag mismatch during compile.)
  438.  *
  439.  * -=- All tag values must be unique even across all three types. -=-
  440.  *
  441.  * These variables are required by all drawing engines:
  442.  *      kQATag_ZFunction            (Int)   One of kQAZFunction_xxx
  443.  *      kQATag_ColorBG_a            (Float) Background color alpha
  444.  *      kQATag_ColorBG_r            (Float) Background color red
  445.  *      kQATag_ColorBG_g            (Float) Background color green
  446.  *      kQATag_ColorBG_b            (Float) Background color blue
  447.  *      kQATag_Width                (Float) Line and point width (pixels)
  448.  *      kQATag_ZMinOffset           (Float) Min offset to Z to guarantee visibility (Read only!)
  449.  *      kQATag_ZMinScale            (Float) Min scale to Z to guarantee visibility (Read only!)
  450.  
  451.  * These variables are used for optional features:
  452.  *      kQATag_Antialias            (Int)   One of kQAAntiAlias_xxx
  453.  *      kQATag_Blend                (Int)   One of kQABlend_xxx
  454.  *      kQATag_PerspectiveZ         (Int)   One of kQAPerspectiveZ_xxx
  455.  *      kQATag_TextureFilter        (Int)   One of kQATextureFilter_xxx
  456.  *      kQATag_TextureOp            (Int)   Mask of kQATextureOp_xxx
  457.  *      kQATag_Texture              (Ptr)   Pointer to current TQATexture
  458.  *      kQATag_CSGTag               (Int)   One of kQACSGTag_xxx
  459.  *      kQATag_CSGEquation          (Int)   32 bit CSG truth table
  460.  *      kQATag_FogMode              (Int)   One of kQAFogMode_xxxx
  461.  *      kQATag_FogColor_a           (Float) Fog color alpha
  462.  *      kQATag_FogColor_r           (Float) Fog color red
  463.  *      kQATag_FogColor_g           (Float) Fog color green
  464.  *      kQATag_FogColor_b           (Float) Fog color blue
  465.  *      kQATag_FogStart             (Float) Fog start
  466.  *      kQATag_FogEnd               (Float) Fog end
  467.  *      kQATag_FogDensity           (Float) Fog density
  468.  *      kQATag_FogMaxDepth          (Float) Maximun value for 1.0 / invW
  469.  *      kQATag_MipmapBias           (Float) The mipmap page bias factor
  470.  *      kQATag_ChannelMask          (Int) one of kQAChannelMask_xxx
  471.  *      kQATag_ZBufferMask          (Int) one of kQAZBufferMask_xxx
  472.  *      kQATag_ZSortedHint          (Int) 1 = depth sort transparent triangles, 0 = do not sort.
  473.  *      kQATag_Chromakey_r          (Float) chroma key red
  474.  *      kQATag_Chromakey_g          (Float) chroma key green
  475.  *      kQATag_Chromakey_b          (Float) chroma key blue
  476.  *      kQATag_ChromakeyEnable      (Int) 1 = enable chroma keying, 0 = disable chroma keying
  477.  *      kQATag_AlphaTestFunc        (Int) one of kQAAlphaTest_xxx
  478.  *      kQATag_AlphaTestRef         (Float) from 0 to 1
  479.  *      kQATag_DontSwap             (Int) 1 = dont swap buffers during QARenderEnd, 0 = do swap buffers during QARenderEnd.
  480.  *      kQATag_MultiTextureOp       (Int) One of kQAMultiTexture_xxx
  481.  *      kQATag_MultiTextureFilter   (Int) One of kQATextureFilter_xxx
  482.  *      kQATag_MultiTextureCurrent  (Int) which multitexture layer to use for all other multitexture funcs
  483.  *      kQATag_MultiTextureEnable   (Int) how many multitexture layers to use (0 = no multitexturing).
  484.  *      kQATag_MultiTextureWrapU    (Int)
  485.  *      kQATag_MultiTextureWrapV    (Int)
  486.  *      kQATag_MultiTextureMagFilter (Int)
  487.  *      kQATag_MultiTextureMinFilter (Int)
  488.  *      kQATag_MultiTextureBorder_a (Float)
  489.  *      kQATag_MultiTextureBorder_r (Float)
  490.  *      kQATag_MultiTextureBorder_g (Float)
  491.  *      kQATag_MultiTextureBorder_b (Float)
  492.  *      kQATag_MultiTextureMipmapBias (Float)
  493.  *      kQATag_MultiTextureFactor    (Float) used with kQAMultiTexture_Fixed to determine blending factor
  494.  *
  495.  * These variables are used for OpenGL(tm) support:
  496.  *      kQATagGL_DrawBuffer         (Int)   Mask of kQAGL_DrawBuffer_xxx
  497.  *      kQATagGL_TextureWrapU       (Int)   kQAGL_Clamp or kQAGL_Repeat
  498.  *      kQATagGL_TextureWrapV       (Int)   kQAGL_Clamp or kQAGL_Repeat
  499.  *      kQATagGL_TextureMagFilter   (Int)   kQAGL_Nearest or kQAGL_Linear
  500.  *      kQATagGL_TextureMinFilter   (Int)   kQAGL_Nearest, etc.
  501.  *      kQATagGL_ScissorXMin        (Int)   Minimum X value for scissor rectangle
  502.  *      kQATagGL_ScissorYMin        (Int)   Minimum Y value for scissor rectangle
  503.  *      kQATagGL_ScissorXMax        (Int)   Maximum X value for scissor rectangle
  504.  *      kQATagGL_ScissorYMax        (Int)   Maximum Y value for scissor rectangle
  505.  *      kQATagGL_BlendSrc           (Int)   Source blending operation
  506.  *      kQATagGL_BlendDst           (Int)   Destination blending operation
  507.  *      kQATagGL_LinePattern        (Int)   Line rasterization pattern
  508.  *      kQATagGL_AreaPattern0       (Int)   First of 32 area pattern registers
  509.  *      kQATagGL_AreaPattern31      (Int)   Last of 32 area pattern registers
  510.  *
  511.  *      kQATagGL_DepthBG            (Float) Background Z
  512.  *      kQATagGL_TextureBorder_a    (Float) Texture border color alpha
  513.  *      kQATagGL_TextureBorder_r    (Float) Texture border color red
  514.  *      kQATagGL_TextureBorder_g    (Float) Texture border color green
  515.  *      kQATagGL_TextureBorder_b    (Float) Texture border color blue
  516.  *
  517.  * Tags >= kQATag_EngineSpecific_Minimum may be assigned by the vendor for use as
  518.  * engine-specific variables. NOTE: These should be used only in exceptional circumstances,
  519.  * as functions performed by these variables won't be generally accessible. All other tag
  520.  * values are reserved.
  521.  *
  522.  *      kQATag_EngineSpecific_Minimum   Minimum tag value for drawing-engine specific variables
  523.  */
  524. enum TQATagInt {
  525.     kQATag_ZFunction            = 0,
  526.     kQATag_Antialias            = 8,
  527.     kQATag_Blend                = 9,
  528.     kQATag_PerspectiveZ         = 10,
  529.     kQATag_TextureFilter        = 11,
  530.     kQATag_TextureOp            = 12,
  531.     kQATag_CSGTag               = 14,
  532.     kQATag_CSGEquation          = 15,
  533.     kQATag_BufferComposite      = 16,
  534.     kQATag_FogMode              = 17,
  535.     kQATag_ChannelMask          = 27,
  536.     kQATag_ZBufferMask          = 28,
  537.     kQATag_ZSortedHint          = 29,
  538.     kQATag_ChromakeyEnable      = 30,
  539.     kQATag_AlphaTestFunc        = 31,
  540.     kQATag_DontSwap             = 32,
  541.     kQATag_MultiTextureEnable   = 33,
  542.     kQATag_MultiTextureCurrent  = 34,
  543.     kQATag_MultiTextureOp       = 35,
  544.     kQATag_MultiTextureFilter   = 36,
  545.     kQATag_MultiTextureWrapU    = 37,
  546.     kQATag_MultiTextureWrapV    = 38,
  547.     kQATag_MultiTextureMagFilter = 39,
  548.     kQATag_MultiTextureMinFilter = 40,
  549.     kQATag_BitmapFilter         = 54,                           /* filter to use while scaling bitmaps, one of kQAFilter_xxx */
  550.     kQATag_DrawContextFilter    = 55,                           /* filter to use while scaling draw contexts, one of kQAFilter_xxx */
  551.     kQATagGL_DrawBuffer         = 100,
  552.     kQATagGL_TextureWrapU       = 101,
  553.     kQATagGL_TextureWrapV       = 102,
  554.     kQATagGL_TextureMagFilter   = 103,
  555.     kQATagGL_TextureMinFilter   = 104,
  556.     kQATagGL_ScissorXMin        = 105,
  557.     kQATagGL_ScissorYMin        = 106,
  558.     kQATagGL_ScissorXMax        = 107,
  559.     kQATagGL_ScissorYMax        = 108,
  560.     kQATagGL_BlendSrc           = 109,
  561.     kQATagGL_BlendDst           = 110,
  562.     kQATagGL_LinePattern        = 111,
  563.     kQATagGL_AreaPattern0       = 117,                          /* ...kQATagGL_AreaPattern1-30 */
  564.     kQATagGL_AreaPattern31      = 148,
  565.     kQATagGL_LinePatternFactor  = 149,                          /* equivalent to GL_LINE_STIPPLE_REPEAT */
  566.     kQATag_EngineSpecific_Minimum = 1000
  567. };
  568. typedef enum TQATagInt TQATagInt;
  569. enum TQATagPtr {
  570.     kQATag_Texture              = 13,
  571.     kQATag_MultiTexture         = 26
  572. };
  573. typedef enum TQATagPtr TQATagPtr;
  574. enum TQATagFloat {
  575.     kQATag_ColorBG_a            = 1,
  576.     kQATag_ColorBG_r            = 2,
  577.     kQATag_ColorBG_g            = 3,
  578.     kQATag_ColorBG_b            = 4,
  579.     kQATag_Width                = 5,
  580.     kQATag_ZMinOffset           = 6,
  581.     kQATag_ZMinScale            = 7,
  582.     kQATag_FogColor_a           = 18,
  583.     kQATag_FogColor_r           = 19,
  584.     kQATag_FogColor_g           = 20,
  585.     kQATag_FogColor_b           = 21,
  586.     kQATag_FogStart             = 22,
  587.     kQATag_FogEnd               = 23,
  588.     kQATag_FogDensity           = 24,
  589.     kQATag_FogMaxDepth          = 25,
  590.     kQATag_MipmapBias           = 41,
  591.     kQATag_MultiTextureMipmapBias = 42,
  592.     kQATag_Chromakey_r          = 43,
  593.     kQATag_Chromakey_g          = 44,
  594.     kQATag_Chromakey_b          = 45,
  595.     kQATag_AlphaTestRef         = 46,
  596.     kQATag_MultiTextureBorder_a = 47,
  597.     kQATag_MultiTextureBorder_r = 48,
  598.     kQATag_MultiTextureBorder_g = 49,
  599.     kQATag_MultiTextureBorder_b = 50,
  600.     kQATag_MultiTextureFactor   = 51,
  601.     kQATag_BitmapScale_x        = 52,                           /* horizontal bitmap scale factor, default value is 1.0 */
  602.     kQATag_BitmapScale_y        = 53,                           /* vertical bitmap scale factor, default value is 1.0 */
  603.     kQATag_MultiTextureEnvColor_a = 56,
  604.     kQATag_MultiTextureEnvColor_r = 57,
  605.     kQATag_MultiTextureEnvColor_g = 58,
  606.     kQATag_MultiTextureEnvColor_b = 59,
  607.     kQATagGL_DepthBG            = 112,
  608.     kQATagGL_TextureBorder_a    = 113,
  609.     kQATagGL_TextureBorder_r    = 114,
  610.     kQATagGL_TextureBorder_g    = 115,
  611.     kQATagGL_TextureBorder_b    = 116,
  612.     kQATagGL_TextureEnvColor_a  = 150,
  613.     kQATagGL_TextureEnvColor_r  = 151,
  614.     kQATagGL_TextureEnvColor_g  = 152,
  615.     kQATagGL_TextureEnvColor_b  = 153
  616. };
  617. typedef enum TQATagFloat TQATagFloat;
  618. /* kQATag_ZFunction */
  619. enum {
  620.     kQAZFunction_None           = 0,                            /* Z is neither tested nor written (same as no Z buffer) */
  621.     kQAZFunction_LT             = 1,                            /* Znew < Zbuffer is visible */
  622.     kQAZFunction_EQ             = 2,                            /* Znew == Zbuffer is visible */
  623.     kQAZFunction_LE             = 3,                            /* Znew <= Zbuffer is visible */
  624.     kQAZFunction_GT             = 4,                            /* Znew > Zbuffer is visible */
  625.     kQAZFunction_NE             = 5,                            /* Znew != Zbuffer is visible */
  626.     kQAZFunction_GE             = 6,                            /* Znew >= Zbuffer is visible */
  627.     kQAZFunction_True           = 7,                            /* Znew is always visible */
  628.     kQAZFunction_False          = 8                             /* Znew is never visible */
  629. };
  630. /* kQATag_Width */
  631. #define kQAMaxWidth 128.0
  632. /* kQATag_Antialias */
  633. enum {
  634.     kQAAntiAlias_Off            = 0,
  635.     kQAAntiAlias_Fast           = 1,
  636.     kQAAntiAlias_Mid            = 2,
  637.     kQAAntiAlias_Best           = 3
  638. };
  639. /* kQATag_Blend */
  640. enum {
  641.     kQABlend_PreMultiply        = 0,
  642.     kQABlend_Interpolate        = 1,
  643.     kQABlend_OpenGL             = 2
  644. };
  645. /* kQATag_BufferComposite */
  646. enum {
  647.     kQABufferComposite_None     = 0,                            /* Default: New pixels overwrite initial buffer contents */
  648.     kQABufferComposite_PreMultiply = 1,                         /* New pixels are blended with initial buffer contents via PreMultiply */
  649.     kQABufferComposite_Interpolate = 2                          /* New pixels are blended with initial buffer contents via Interpolate */
  650. };
  651. /* kQATag_PerspectiveZ */
  652. enum {
  653.     kQAPerspectiveZ_Off         = 0,                            /* Use Z for hidden surface removal */
  654.     kQAPerspectiveZ_On          = 1                             /* Use InvW for hidden surface removal */
  655. };
  656. /* kQATag_TextureFilter */
  657. enum {
  658.                                                                 /* suggested meanings of these values */
  659.     kQATextureFilter_Fast       = 0,                            /* No filtering, pick nearest */
  660.     kQATextureFilter_Mid        = 1,                            /* Fastest method that does some filtering */
  661.     kQATextureFilter_Best       = 2                             /* Highest quality renderer can do */
  662. };
  663. /* filter tag values */
  664. enum {
  665.                                                                 /* suggested meanings of these values */
  666.     kQAFilter_Fast              = 0,                            /* No filtering, pick nearest */
  667.     kQAFilter_Mid               = 1,                            /* Fastest method that does some filtering */
  668.     kQAFilter_Best              = 2                             /* Highest quality renderer can do */
  669. };
  670. /* kQATag_TextureOp (mask of one or more) */
  671. enum {
  672.     kQATextureOp_None           = 0,                            /* Default texture mapping mode */
  673.     kQATextureOp_Modulate       = (1 << 0),                     /* Modulate texture color with kd_r/g/b */
  674.     kQATextureOp_Highlight      = (1 << 1),                     /* Add highlight value ks_r/g/b */
  675.     kQATextureOp_Decal          = (1 << 2),                     /* When texture alpha == 0, use rgb instead */
  676.     kQATextureOp_Shrink         = (1 << 3),                     /* This is a non-wrapping texture, so the ??? */
  677.     kQATextureOp_Blend          = (1 << 4)                      /* Same as GL_TEXTURE_ENV_MODE GL_BLEND */
  678. };
  679. /* kQATag_MultiTextureOp */
  680. enum {
  681.     kQAMultiTexture_Add         = 0,                            /* texels are added to form final pixel */
  682.     kQAMultiTexture_Modulate    = 1,                            /* texels are multiplied to form final pixel */
  683.     kQAMultiTexture_BlendAlpha  = 2,                            /* texels are blended according to 2nd texel's alpha */
  684.     kQAMultiTexture_Fixed       = 3                             /* texels are blended by a fixed factor via kQATag_MultiTextureFactor  */
  685. };
  686. /* kQATag_CSGTag */
  687. #define kQACSGTag_None 0xffffffffUL
  688. enum {
  689.     kQACSGTag_0                 = 0,                            /* Submitted tris have CSG ID 0 */
  690.     kQACSGTag_1                 = 1,                            /* Submitted tris have CSG ID 1 */
  691.     kQACSGTag_2                 = 2,                            /* Submitted tris have CSG ID 2 */
  692.     kQACSGTag_3                 = 3,                            /* Submitted tris have CSG ID 3 */
  693.     kQACSGTag_4                 = 4                             /* Submitted tris have CSG ID 4 */
  694. };
  695. /* kQATagGL_TextureWrapU/V */
  696. enum {
  697.     kQAGL_Repeat                = 0,
  698.     kQAGL_Clamp                 = 1
  699. };
  700. /* kQATagGL_BlendSrc */
  701. enum {
  702.     kQAGL_SourceBlend_XXX       = 0
  703. };
  704. /* kQATagGL_BlendDst */
  705. enum {
  706.     kQAGL_DestBlend_XXX         = 0
  707. };
  708. /* kQATagGL_DrawBuffer (mask of one or more) */
  709. enum {
  710.     kQAGL_DrawBuffer_None       = 0,
  711.     kQAGL_DrawBuffer_FrontLeft  = (1 << 0),
  712.     kQAGL_DrawBuffer_FrontRight = (1 << 1),
  713.     kQAGL_DrawBuffer_BackLeft   = (1 << 2),
  714.     kQAGL_DrawBuffer_BackRight  = (1 << 3),
  715.     kQAGL_DrawBuffer_Front      = (kQAGL_DrawBuffer_FrontLeft | kQAGL_DrawBuffer_FrontRight),
  716.     kQAGL_DrawBuffer_Back       = (kQAGL_DrawBuffer_BackLeft | kQAGL_DrawBuffer_BackRight)
  717. };
  718. /* kQATag_FogMode */
  719. enum {
  720.     kQAFogMode_None             = 0,                            /* no fog                     */
  721.     kQAFogMode_Alpha            = 1,                            /* fog value is alpha               */
  722.     kQAFogMode_Linear           = 2,                            /* fog = (end - z) / (end - start)         */
  723.     kQAFogMode_Exponential      = 3,                            /* fog = exp(-density * z)              */
  724.     kQAFogMode_ExponentialSquared = 4                           /* fog = exp(-density * z * density * z)  */
  725. };
  726. /* kQATag_ChannelMask */
  727. enum {
  728.     kQAChannelMask_r            = (1 << 0),
  729.     kQAChannelMask_g            = (1 << 1),
  730.     kQAChannelMask_b            = (1 << 2),
  731.     kQAChannelMask_a            = (1 << 3)
  732. };
  733. /* kQATag_ZBufferMask */
  734. enum {
  735.     kQAZBufferMask_Disable      = 0,
  736.     kQAZBufferMask_Enable       = 1
  737. };
  738. /* kQATag_AlphaTestFunc */
  739. enum {
  740.     kQAAlphaTest_None           = 0,
  741.     kQAAlphaTest_LT             = 1,
  742.     kQAAlphaTest_EQ             = 2,
  743.     kQAAlphaTest_LE             = 3,
  744.     kQAAlphaTest_GT             = 4,
  745.     kQAAlphaTest_NE             = 5,
  746.     kQAAlphaTest_GE             = 6,
  747.     kQAAlphaTest_True           = 7
  748. };
  749. /* flags for QAAccess__xxx */
  750. enum {
  751.     kQANoCopyNeeded             = (1 << 0)
  752. };
  753. /************************************************************************************************
  754.  *
  755.  * Constants used as function parameters.
  756.  *
  757.  ***********************************************************************************************/
  758. /*
  759.  * TQAVertexMode is a parameter to QADrawVGouraud() and QADrawVTexture() that specifies how
  760.  * to interpret and draw the vertex array.
  761.  */
  762. enum TQAVertexMode {
  763.     kQAVertexMode_Point         = 0,                            /* Draw nVertices points */
  764.     kQAVertexMode_Line          = 1,                            /* Draw nVertices/2 line segments */
  765.     kQAVertexMode_Polyline      = 2,                            /* Draw nVertices-1 connected line segments */
  766.     kQAVertexMode_Tri           = 3,                            /* Draw nVertices/3 triangles */
  767.     kQAVertexMode_Strip         = 4,                            /* Draw nVertices-2 triangles as a strip */
  768.     kQAVertexMode_Fan           = 5,                            /* Draw nVertices-2 triangles as a fan from v0 */
  769.     kQAVertexMode_NumModes      = 6
  770. };
  771. typedef enum TQAVertexMode TQAVertexMode;
  772. /*
  773.  * TQAGestaltSelector is a parameter to QAEngineGestalt(). It selects which gestalt
  774.  * parameter will be copied into 'response'.
  775.  */
  776. enum TQAGestaltSelector {
  777.     kQAGestalt_OptionalFeatures = 0,                            /* Mask of one or more kQAOptional_xxx */
  778.     kQAGestalt_FastFeatures     = 1,                            /* Mask of one or more kQAFast_xxx */
  779.     kQAGestalt_VendorID         = 2,                            /* Vendor ID */
  780.     kQAGestalt_EngineID         = 3,                            /* Engine ID */
  781.     kQAGestalt_Revision         = 4,                            /* Revision number of this engine */
  782.     kQAGestalt_ASCIINameLength  = 5,                            /* strlen (asciiName) */
  783.     kQAGestalt_ASCIIName        = 6,                            /* Causes strcpy (response, asciiName) */
  784.     kQAGestalt_TextureMemory    = 7,                            /* amount of texture RAM currently available */
  785.     kQAGestalt_FastTextureMemory = 8,                           /* amount of texture RAM currently available */
  786.     kQAGestalt_DrawContextPixelTypesAllowed = 9,                /* returns all the draw context pixel types supported by the RAVE engine */
  787.     kQAGestalt_DrawContextPixelTypesPreferred = 10,             /* returns all the draw context pixel types that are preferred by the RAVE engine. */
  788.     kQAGestalt_TexturePixelTypesAllowed = 11,                   /* returns all the texture pixel types that are supported by the RAVE engine */
  789.     kQAGestalt_TexturePixelTypesPreferred = 12,                 /* returns all the texture pixel types that are preferred by the RAVE engine.*/
  790.     kQAGestalt_BitmapPixelTypesAllowed = 13,                    /* returns all the bitmap pixel types that are supported by the RAVE engine. */
  791.     kQAGestalt_BitmapPixelTypesPreferred = 14,                  /* returns all the bitmap pixel types that are preferred by the RAVE engine. */
  792.     kQAGestalt_OptionalFeatures2 = 15,                          /* Mask of one or more kQAOptional2_xxx */
  793.     kQAGestalt_MultiTextureMax  = 16,                           /* max number of multi textures supported by this engine */
  794.     kQAGestalt_NumSelectors     = 17,
  795.     kQAGestalt_EngineSpecific_Minimum = 1000                    /* all gestalts here and above are for engine specific purposes */
  796. };
  797. typedef enum TQAGestaltSelector TQAGestaltSelector;
  798. /*
  799.  * TQAMethodSelector is a parameter to QASetNoticeMethod to select the notice method
  800.  */
  801. #if RAVE_OBSOLETE
  802. enum TQAMethodSelector {
  803.     kQAMethod_RenderCompletion  = 0,                            /* Called when rendering has completed and buffers swapped */
  804.     kQAMethod_DisplayModeChanged = 1,                           /* Called when a display mode has changed */
  805.     kQAMethod_ReloadTextures    = 2,                            /* Called when texture memory has been invalidated */
  806.     kQAMethod_BufferInitialize  = 3,                            /* Called when a buffer needs to be initialized */
  807.     kQAMethod_BufferComposite   = 4,                            /* Called when rendering is finished and its safe to composite */
  808.     kQAMethod_NumSelectors      = 5
  809. };
  810. typedef enum TQAMethodSelector TQAMethodSelector;
  811. #else
  812. enum TQAMethodSelector {
  813.     kQAMethod_RenderCompletion  = 0,                            /* Called when rendering has completed and buffers swapped */
  814.     kQAMethod_DisplayModeChanged = 1,                           /* Called when a display mode has changed */
  815.     kQAMethod_ReloadTextures    = 2,                            /* Called when texture memory has been invalidated */
  816.     kQAMethod_ImageBufferInitialize = 3,                        /* Called when a buffer needs to be initialized */
  817.     kQAMethod_ImageBuffer2DComposite = 4,                       /* Called when rendering is finished and its safe to composite */
  818.     kQAMethod_NumSelectors      = 5
  819. };
  820. typedef enum TQAMethodSelector TQAMethodSelector;
  821. #endif  /* RAVE_OBSOLETE */
  822. /*
  823.  * kQATriFlags_xxx are ORed together to generate the 'flags' parameter
  824.  * to QADrawTriGouraud() and QADrawTriTexture().
  825.  */
  826. enum {
  827.     kQATriFlags_None            = 0,                            /* No flags (triangle is front-facing or don't care) */
  828.     kQATriFlags_Backfacing      = (1 << 0)                      /* Triangle is back-facing */
  829. };
  830. /*
  831.  * kQATexture_xxx are ORed together to generate the 'flags' parameter to QATextureNew().
  832.  */
  833. enum {
  834.     kQATexture_None             = 0,                            /* No flags */
  835.     kQATexture_Lock             = (1 << 0),                     /* Don't swap this texture out */
  836.     kQATexture_Mipmap           = (1 << 1),                     /* This texture is mipmapped */
  837.     kQATexture_NoCompression    = (1 << 2),                     /* Do not compress this texture */
  838.     kQATexture_HighCompression  = (1 << 3),                     /* Compress texture, even if it takes a while */
  839.     kQATexture_NonRelocatable   = (1 << 4),                     /* Image buffer in VRAM should be non-relocatable */
  840.     kQATexture_NoCopy           = (1 << 5),                     /* Don't copy image to VRAM when creating it */
  841.     kQATexture_FlipOrigin       = (1 << 6),                     /* The image(s) is(are) in a bottom-up format. (The image(s) is(are) flipped vertically.) */
  842.     kQATexture_PriorityBits     = (1 << 31) | (1 << 30) | (1 << 29) | (1 << 28) /* Texture priority: 4 upper bits for 16 levels of priority */
  843. };
  844. /*
  845.  * kQABitmap_xxx are ORed together to generate the 'flags' parameter to QABitmapNew().
  846.  */
  847. enum {
  848.     kQABitmap_None              = 0,                            /* No flags */
  849.     kQABitmap_Lock              = (1 << 1),                     /* Don't swap this bitmap out */
  850.     kQABitmap_NoCompression     = (1 << 2),                     /* Do not compress this bitmap */
  851.     kQABitmap_HighCompression   = (1 << 3),                     /* Compress bitmap, even if it takes a while */
  852.     kQABitmap_NonRelocatable    = (1 << 4),                     /* Image buffer in VRAM should be non-relocatable */
  853.     kQABitmap_NoCopy            = (1 << 5),                     /* Don't copy image to VRAM when creating it */
  854.     kQABitmap_FlipOrigin        = (1 << 6),                     /* The image is in a bottom-up format. (The image is flipped vertically.) */
  855.     kQABitmap_PriorityBits      = (1 << 31) | (1 << 30) | (1 << 29) | (1 << 28) /* Bitmap priority: 4 upper bits for 16 levels of priority */
  856. };
  857. /*
  858.  * kQAContext_xxx are ORed together to generate the 'flags' parameter for QADrawContextNew().
  859.  */
  860. enum {
  861.     kQAContext_None             = 0,                            /* No flags */
  862.     kQAContext_NoZBuffer        = (1 << 0),                     /* No hidden surface removal */
  863.     kQAContext_DeepZ            = (1 << 1),                     /* Hidden surface precision >= 24 bits */
  864.     kQAContext_DoubleBuffer     = (1 << 2),                     /* Double buffered window */
  865.     kQAContext_Cache            = (1 << 3),                     /* This is a cache context */
  866.     kQAContext_NoDither         = (1 << 4),                     /* No dithering, straight color banding */
  867.     kQAContext_Scale            = (1 << 5),                     /* The draw context is to be scaled.  The front buffer is a different size than the back buffer. */
  868.     kQAContext_NonRelocatable   = (1 << 6),                     /* The back buffer and the z buffer must not move in memory */
  869.     kQAContext_EngineSpecific1  = (1 << 28),                    /* engine specific flag # 1 */
  870.     kQAContext_EngineSpecific2  = (1 << 29),                    /* engine specific flag # 2 */
  871.     kQAContext_EngineSpecific3  = (1 << 30),                    /* engine specific flag # 3 */
  872.     kQAContext_EngineSpecific4  = (1 << 31)                     /* engine specific flag # 4 */
  873. };
  874. /*
  875.  * kQAOptional_xxx are ORed together to generate the kQAGestalt_OptionalFeatures response
  876.  * from QAEngineGestalt().
  877.  */
  878. enum {
  879.     kQAOptional_None            = 0,                            /* No optional features */
  880.     kQAOptional_DeepZ           = (1 << 0),                     /* Hidden surface precision >= 24 bits */
  881.     kQAOptional_Texture         = (1 << 1),                     /* Texture mapping */
  882.     kQAOptional_TextureHQ       = (1 << 2),                     /* High quality texture (tri-linear mip or better) */
  883.     kQAOptional_TextureColor    = (1 << 3),                     /* Full color modulation and highlight of textures */
  884.     kQAOptional_Blend           = (1 << 4),                     /* Transparency blending of RGB */
  885.     kQAOptional_BlendAlpha      = (1 << 5),                     /* Transparency blending includes alpha channel */
  886.     kQAOptional_Antialias       = (1 << 6),                     /* Antialiased rendering */
  887.     kQAOptional_ZSorted         = (1 << 7),                     /* Z sorted rendering (for transparency, etc.) */
  888.     kQAOptional_PerspectiveZ    = (1 << 8),                     /* Hidden surface removal using InvW instead of Z */
  889.     kQAOptional_OpenGL          = (1 << 9),                     /* Extended rasterization features for OpenGL(tm) */
  890.     kQAOptional_NoClear         = (1 << 10),                    /* This drawing engine doesn't clear before drawing */
  891.     kQAOptional_CSG             = (1 << 11),                    /* kQATag_CSGxxx are implemented */
  892.     kQAOptional_BoundToDevice   = (1 << 12),                    /* This engine is tightly bound to GDevice */
  893.     kQAOptional_CL4             = (1 << 13),                    /* This engine suports kQAPixel_CL4 */
  894.     kQAOptional_CL8             = (1 << 14),                    /* This engine suports kQAPixel_CL8 */
  895.     kQAOptional_BufferComposite = (1 << 15),                    /* This engine can composite with initial buffer contents */
  896.     kQAOptional_NoDither        = (1 << 16),                    /* This engine can draw with no dithering */
  897.     kQAOptional_FogAlpha        = (1 << 17),                    /* This engine suports alpha based fog */
  898.     kQAOptional_FogDepth        = (1 << 18),                    /* This engine suports depth based fog */
  899.     kQAOptional_MultiTextures   = (1 << 19),                    /* This bit set if engine supports texture compositing */
  900.     kQAOptional_MipmapBias      = (1 << 20),                    /* This bit is set if the engine supports mipmap selection bias */
  901.     kQAOptional_ChannelMask     = (1 << 21),
  902.     kQAOptional_ZBufferMask     = (1 << 22),
  903.     kQAOptional_AlphaTest       = (1 << 23),                    /* this engine supports alpha testing */
  904.     kQAOptional_AccessTexture   = (1 << 24),                    /* if engine supports access to texture */
  905.     kQAOptional_AccessBitmap    = (1 << 25),                    /* if engine supports access to bitmaps */
  906.     kQAOptional_AccessDrawBuffer = (1 << 26),                   /* if engine supports access to draw buffer */
  907.     kQAOptional_AccessZBuffer   = (1 << 27),                    /* if engine supports access to zbuffer */
  908.     kQAOptional_ClearDrawBuffer = (1 << 28),                    /* if engine supports QAClearDrawBuffer() */
  909.     kQAOptional_ClearZBuffer    = (1 << 29),                    /* if engine supports QAClearZBuffer() */
  910.     kQAOptional_OffscreenDrawContexts = (1 << 30)               /* if engine supports TQADeviceOffscreen */
  911. };
  912. /*
  913.  * kQAOptional2_xxx are ORed together to generate the kQAGestalt_OptionalFeatures2 response
  914.  * from QAEngineGestalt().
  915.  */
  916. enum {
  917.     kQAOptional2_None           = 0,
  918.     kQAOptional2_TextureDrawContexts = (1 << 1),                /* if engine supports QATextureNewFromDrawContext() */
  919.     kQAOptional2_BitmapDrawContexts = (1 << 2),                 /* if engine supports QABitmapNewFromDrawContext() */
  920.     kQAOptional2_Busy           = (1 << 3),                     /* if engine supports QABusy() */
  921.     kQAOptional2_SwapBuffers    = (1 << 4),                     /* if engine supports QASwapBuffers() */
  922.     kQAOptional2_Chromakey      = (1 << 5),                     /* if engine supports chromakeying via kQATag_Chromakey_xxx */
  923.     kQAOptional2_NonRelocatable = (1 << 6),                     /* if engine supports nonrelocatable texture & bitmap image buffers in VRAM */
  924.     kQAOptional2_NoCopy         = (1 << 7),                     /* if engine supports ability to not copy texture & bitmap image to VRAM */
  925.     kQAOptional2_PriorityBits   = (1 << 8),                     /* if engine supports texture & bitmap priority levels */
  926.     kQAOptional2_FlipOrigin     = (1 << 9),                     /* if engine supports textures & bitmaps that are vertically flipped */
  927.     kQAOptional2_BitmapScale    = (1 << 10),                    /* if engine supports scaled bitmap drawing */
  928.     kQAOptional2_DrawContextScale = (1 << 11),                  /* if engine supports scaled draw contexts */
  929.     kQAOptional2_DrawContextNonRelocatable = (1 << 12)          /* if engine supports draw contexts with non relocatable buffers */
  930. };
  931. /*
  932.  * kQAFast_xxx are ORed together to generate the kQAGestalt_FastFeatures response
  933.  * from QAEngineGestalt().
  934.  */
  935. enum {
  936.     kQAFast_None                = 0,                            /* No accelerated features */
  937.     kQAFast_Line                = (1 << 0),                     /* Line drawing */
  938.     kQAFast_Gouraud             = (1 << 1),                     /* Gouraud shaded triangles */
  939.     kQAFast_Texture             = (1 << 2),                     /* Texture mapped triangles */
  940.     kQAFast_TextureHQ           = (1 << 3),                     /* High quality texture (tri-linear mip or better) */
  941.     kQAFast_Blend               = (1 << 4),                     /* Transparency blending */
  942.     kQAFast_Antialiasing        = (1 << 5),                     /* Antialiased rendering */
  943.     kQAFast_ZSorted             = (1 << 6),                     /* Z sorted rendering of non-opaque objects */
  944.     kQAFast_CL4                 = (1 << 7),                     /* This engine accelerates kQAPixel_CL4 */
  945.     kQAFast_CL8                 = (1 << 8),                     /* This engine accelerates kQAPixel_CL8 */
  946.     kQAFast_FogAlpha            = (1 << 9),                     /* This engine accelerates alpha based fog */
  947.     kQAFast_FogDepth            = (1 << 10),                    /* This engine accelerates depth based fog */
  948.     kQAFast_MultiTextures       = (1 << 11),                    /* This engine accelerates texture compositing */
  949.     kQAFast_BitmapScale         = (1 << 12),                    /* This engine accelerates scaled bitmap drawing */
  950.     kQAFast_DrawContextScale    = (1 << 13)                     /* This engine accelerates scaled draw contexts */
  951. };
  952. /************************************************************************************************
  953.  *
  954.  * Macro definition for easily setting the texture priority bits in the flags field of
  955.  * QATextureNew(), and QABitMapNew().
  956.  *
  957.  * The priority value must be a number between 0 and 15.  0 is top priority, and 15 is lowest
  958.  * priority. Note that this is different than OpenGL which uses floats from 0.0 to 1.0 where
  959.  * 1.0 is top priority. In RAVE, this system is more like texture ranking, thus 0 is top rank,
  960.  * and 15 is the last ranking.
  961.  *
  962.  * Texture prioritization is mainly used for systems which support AGP memory.  This allows the
  963.  * hardware driver to determine which textures to put into faster VRAM and which to put into
  964.  * slower AGP RAM. If you dont care about texture priority, then you dont need to worry about
  965.  * this macro or the priority bits since the default will always be top priority when all 4 bits
  966.  * of this flag field are 0's.
  967.  *
  968.  * To upload a texture with high priority, do the following:
  969.  *
  970.  *         unsigned long flags = kQATexture_Mipmap;            // Initialize flags
  971.  *
  972.  *       flags |= QACalculatePriorityBits(0);                // Setting top priority (this actually does
  973.  *                                                          // nothing since the bits are still 0000)
  974.  *        QATextureNew(myEngine, flags, pixelType, image, &raveTexture);
  975.  *
  976.  *
  977.  * To do a texture with a middle priority of 8, do the following:
  978.  *
  979.  *        unsigned long flags = kQATexture_HighCompression;   // Initialize flags
  980.  *
  981.  *       flags |= QACalculatePriorityBits(8);                // Setting middle priority
  982.  *
  983.  *        QATextureNew(myEngine, flags, pixelType, image, &raveTexture);
  984.  *
  985.  ***********************************************************************************************/
  986. #define QACalculatePriorityBits(_priority)  (((unsigned long) (_priority)) << 28)
  987. /************************************************************************************************
  988.  *
  989.  * Macro definitions for the drawing engine methods included in TQADrawContext. These
  990.  * macros are the recommended means of accessing the engine's draw methods, e.g:
  991.  *
  992.  *      TQADrawContext  *drawContext;
  993.  *        TQAVTexture     vertices[3];
  994.  *
  995.  *      drawContext = QADrawContextNew (rect, gdevice, engine, kQAContext_ZBuffer);
  996.  *      ...
  997.  *      QASetInt (drawContext, kQATag_ZFunction, kQAZFunction_LT);
  998.  *       QADrawTriGouraud (drawContext, &vertices[0], &vertices[1], &vertices[2], kQATriFlags_None);
  999.  *
  1000.  * Note that QARenderStart(), QARenderEnd(), QAFlush() and QASync() have real function
  1001.  * definitions instead of macros. This is because these functions can afford the extra
  1002.  * per-call overhead of a function layer (which makes application code a little smaller),
  1003.  * and to allow a cleaner implementation of handling NULL parameters to QARenderStart().
  1004.  *
  1005.  ***********************************************************************************************/
  1006. #define QASetFloat(drawContext,tag,newValue) 
  1007.         (drawContext)->setFloat (drawContext,tag,newValue)
  1008. #define QASetInt(drawContext,tag,newValue) 
  1009.        (drawContext)->setInt (drawContext,tag,newValue)
  1010. #define QASetPtr(drawContext,tag,newValue) 
  1011.      (drawContext)->setPtr (drawContext,tag,newValue)
  1012. #define QAGetFloat(drawContext,tag) 
  1013.         (drawContext)->getFloat (drawContext,tag)
  1014. #define QAGetInt(drawContext,tag) 
  1015.      (drawContext)->getInt (drawContext,tag)
  1016. #define QAGetPtr(drawContext,tag) 
  1017.        (drawContext)->getPtr (drawContext,tag)
  1018. #define QADrawPoint(drawContext,v) 
  1019.       (drawContext)->drawPoint (drawContext,v)
  1020. #define QADrawLine(drawContext,v0,v1) 
  1021.       (drawContext)->drawLine (drawContext,v0,v1)
  1022. #define QADrawTriGouraud(drawContext,v0,v1,v2,flags) 
  1023.         (drawContext)->drawTriGouraud (drawContext,v0,v1,v2,flags)
  1024. #define QADrawTriTexture(drawContext,v0,v1,v2,flags) 
  1025.      (drawContext)->drawTriTexture (drawContext,v0,v1,v2,flags)
  1026. #define QASubmitVerticesGouraud(drawContext,nVertices,vertices) 
  1027.       (drawContext)->submitVerticesGouraud(drawContext,nVertices,vertices)
  1028.        
  1029. #define QASubmitVerticesTexture(drawContext,nVertices,vertices) 
  1030.      (drawContext)->submitVerticesTexture(drawContext,nVertices,vertices)
  1031.        
  1032. #define QASubmitMultiTextureParams(drawContext,nParams,params) 
  1033.       (drawContext)->submitMultiTextureParams(drawContext,nParams,params)
  1034.         
  1035. #define QADrawTriMeshGouraud(drawContext,nTriangle,triangles) 
  1036.        (drawContext)->drawTriMeshGouraud (drawContext,nTriangle,triangles)
  1037. #define QADrawTriMeshTexture(drawContext,nTriangle,triangles) 
  1038.        (drawContext)->drawTriMeshTexture (drawContext,nTriangle,triangles)
  1039. #define QADrawVGouraud(drawContext,nVertices,vertexMode,vertices,flags) 
  1040.      (drawContext)->drawVGouraud (drawContext,nVertices,vertexMode,vertices,flags)
  1041. #define QADrawVTexture(drawContext,nVertices,vertexMode,vertices,flags) 
  1042.        (drawContext)->drawVTexture (drawContext,nVertices,vertexMode,vertices,flags)
  1043. #define QADrawBitmap(drawContext,v,bitmap) 
  1044.         (drawContext)->drawBitmap (drawContext,v,bitmap)
  1045. #define QARenderStart(drawContext,dirtyRect,initialContext) 
  1046.         (drawContext)->renderStart (drawContext,dirtyRect,initialContext)
  1047. #define QARenderEnd(drawContext,modifiedRect) 
  1048.      (drawContext)->renderEnd (drawContext,modifiedRect)
  1049. #define QARenderAbort(drawContext) 
  1050.       (drawContext)->renderAbort (drawContext)
  1051. #define QAFlush(drawContext) 
  1052.        (drawContext)->flush (drawContext)
  1053. #define QASync(drawContext) 
  1054.       (drawContext)->sync (drawContext)
  1055. #define QASetNoticeMethod(drawContext, method, completionCallBack, refCon) 
  1056.         (drawContext)->setNoticeMethod (drawContext, method, completionCallBack, refCon)
  1057. #define QAGetNoticeMethod(drawContext, method, completionCallBack, refCon) 
  1058.      (drawContext)->getNoticeMethod (drawContext, method, completionCallBack, refCon)
  1059.        
  1060. #define QAAccessDrawBuffer(drawContext, pixelBuffer) 
  1061.         (drawContext)->accessDrawBuffer(drawContext, pixelBuffer)
  1062. #define QAAccessDrawBufferEnd(drawContext, dirtyRect) 
  1063.      (drawContext)->accessDrawBufferEnd(drawContext, dirtyRect)
  1064. #define QAAccessZBuffer(drawContext, zBuffer) 
  1065.         (drawContext)->accessZBuffer(drawContext, zBuffer)
  1066. #define QAAccessZBufferEnd(drawContext, dirtyRect) 
  1067.        (drawContext)->accessZBufferEnd(drawContext, dirtyRect)
  1068.         
  1069. #define QAClearDrawBuffer(drawContext, rect, initialContext) 
  1070.         (drawContext)->clearDrawBuffer(drawContext, rect, initialContext)
  1071. #define QAClearZBuffer(drawContext, rect, initialContext) 
  1072.      (drawContext)->clearZBuffer(drawContext, rect, initialContext)
  1073. #define QATextureNewFromDrawContext(drawContext, flags, newTexture) 
  1074.       (drawContext)->textureFromContext(drawContext, flags, newTexture)
  1075. #define QABitmapNewFromDrawContext(drawContext, flags, newBitmap) 
  1076.      (drawContext)->bitmapFromContext(drawContext, flags, newBitmap)
  1077. #define QABusy(drawContext) 
  1078.      (drawContext)->busy(drawContext)
  1079. #define QASwapBuffers(drawContext, dirtyRect) 
  1080.       (drawContext)->swapBuffers(drawContext, dirtyRect)
  1081. /********************************************************************
  1082.  * TQAVersion sets the TQADrawContext 'version' field. It is set by
  1083.  * the manager to indicate the version of the TQADrawContext structure.
  1084.  *******************************************************************/
  1085. enum TQAVersion {
  1086.     kQAVersion_Prerelease       = 0,
  1087.     kQAVersion_1_0              = 1,
  1088.     kQAVersion_1_0_5            = 2,                            /* Added tri mesh functions, color tables */
  1089.     kQAVersion_1_5              = 3,                            /* Added call backs, texture compression, and new error return code */
  1090.     kQAVersion_1_6              = 4                             /* Added QAAccess_xxx, fog, _Options2, Clear_xxx, etc. */
  1091. };
  1092. typedef enum TQAVersion TQAVersion;
  1093. /***********************************************************************
  1094.  * TQADrawContext structure holds method pointers.
  1095.  * This is a forward refrence. The structure is defined later.
  1096.  **********************************************************************/
  1097. typedef struct TQADrawContext           TQADrawContext;
  1098. /************************************************************************************************
  1099.  *
  1100.  * Typedefs of draw method functions provided by the drawing engine. One function pointer
  1101.  * for each of these function types in stored in the TQADrawContext public data structure.
  1102.  *
  1103.  * These functions should be accessed through the QA<function>(context,...) macros,
  1104.  * defined above.
  1105.  *
  1106.  ***********************************************************************************************/
  1107. typedef CALLBACK_API_C( void , TQAStandardNoticeMethod )(const TQADrawContext *drawContext, void *refCon);
  1108. typedef CALLBACK_API_C( void , TQABufferNoticeMethod )(const TQADrawContext *drawContext, const TQADevice *buffer, const TQARect *dirtyRect, void *refCon);
  1109. union TQANoticeMethod {
  1110.     TQAStandardNoticeMethod         standardNoticeMethod;       /* Used for non-buffer related methods */
  1111.     TQABufferNoticeMethod           bufferNoticeMethod;         /* Used for buffer handling methods */
  1112. };
  1113. typedef union TQANoticeMethod           TQANoticeMethod;
  1114. typedef CALLBACK_API_C( void , TQASetFloat )(TQADrawContext *drawContext, TQATagFloat tag, float newValue);
  1115. typedef CALLBACK_API_C( void , TQASetInt )(TQADrawContext *drawContext, TQATagInt tag, unsigned long newValue);
  1116. typedef CALLBACK_API_C( void , TQASetPtr )(TQADrawContext *drawContext, TQATagPtr tag, const void *newValue);
  1117. typedef CALLBACK_API_C( float , TQAGetFloat )(const TQADrawContext *drawContext, TQATagFloat tag);
  1118. typedef CALLBACK_API_C( unsigned long , TQAGetInt )(const TQADrawContext *drawContext, TQATagInt tag);
  1119. typedef CALLBACK_API_C( void *, TQAGetPtr )(const TQADrawContext *drawContext, TQATagPtr tag);
  1120. typedef CALLBACK_API_C( void , TQADrawPoint )(const TQADrawContext *drawContext, const TQAVGouraud *v);
  1121. typedef CALLBACK_API_C( void , TQADrawLine )(const TQADrawContext *drawContext, const TQAVGouraud *v0, const TQAVGouraud *v1);
  1122. typedef CALLBACK_API_C( void , TQADrawTriGouraud )(const TQADrawContext *drawContext, const TQAVGouraud *v0, const TQAVGouraud *v1, const TQAVGouraud *v2, unsigned long flags);
  1123. typedef CALLBACK_API_C( void , TQADrawTriTexture )(const TQADrawContext *drawContext, const TQAVTexture *v0, const TQAVTexture *v1, const TQAVTexture *v2, unsigned long flags);
  1124. typedef CALLBACK_API_C( void , TQASubmitVerticesGouraud )(const TQADrawContext *drawContext, unsigned long nVertices, const TQAVGouraud *vertices);
  1125. typedef CALLBACK_API_C( void , TQASubmitVerticesTexture )(const TQADrawContext *drawContext, unsigned long nVertices, const TQAVTexture *vertices);
  1126. typedef CALLBACK_API_C( void , TQADrawTriMeshGouraud )(const TQADrawContext *drawContext, unsigned long nTriangles, const TQAIndexedTriangle *triangles);
  1127. typedef CALLBACK_API_C( void , TQADrawTriMeshTexture )(const TQADrawContext *drawContext, unsigned long nTriangles, const TQAIndexedTriangle *triangles);
  1128. typedef CALLBACK_API_C( void , TQADrawVGouraud )(const TQADrawContext *drawContext, unsigned long nVertices, TQAVertexMode vertexMode, const TQAVGouraud vertices[], const unsigned long flags[]);
  1129. typedef CALLBACK_API_C( void , TQADrawVTexture )(const TQADrawContext *drawContext, unsigned long nVertices, TQAVertexMode vertexMode, const TQAVTexture vertices[], const unsigned long flags[]);
  1130. typedef CALLBACK_API_C( void , TQADrawBitmap )(const TQADrawContext *drawContext, const TQAVGouraud *v, TQABitmap *bitmap);
  1131. typedef CALLBACK_API_C( void , TQARenderStart )(const TQADrawContext *drawContext, const TQARect *dirtyRect, const TQADrawContext *initialContext);
  1132. typedef CALLBACK_API_C( TQAError , TQARenderEnd )(const TQADrawContext *drawContext, const TQARect *modifiedRect);
  1133. typedef CALLBACK_API_C( TQAError , TQARenderAbort )(const TQADrawContext *drawContext);
  1134. typedef CALLBACK_API_C( TQAError , TQAFlush )(const TQADrawContext *drawContext);
  1135. typedef CALLBACK_API_C( TQAError , TQASync )(const TQADrawContext *drawContext);
  1136. typedef CALLBACK_API_C( TQAError , TQASetNoticeMethod )(const TQADrawContext *drawContext, TQAMethodSelector method, TQANoticeMethod completionCallBack, void *refCon);
  1137. typedef CALLBACK_API_C( TQAError , TQAGetNoticeMethod )(const TQADrawContext *drawContext, TQAMethodSelector method, TQANoticeMethod *completionCallBack, void **refCon);
  1138. typedef CALLBACK_API_C( void , TQASubmitMultiTextureParams )(const TQADrawContext *drawContext, unsigned long nParams, const TQAVMultiTexture *params);
  1139. typedef CALLBACK_API_C( TQAError , TQAAccessDrawBuffer )(const TQADrawContext *drawContext, TQAPixelBuffer *buffer);
  1140. typedef CALLBACK_API_C( TQAError , TQAAccessDrawBufferEnd )(const TQADrawContext *drawContext, const TQARect *dirtyRect);
  1141. typedef CALLBACK_API_C( TQAError , TQAAccessZBuffer )(const TQADrawContext *drawContext, TQAZBuffer *buffer);
  1142. typedef CALLBACK_API_C( TQAError , TQAAccessZBufferEnd )(const TQADrawContext *drawContext, const TQARect *dirtyRect);
  1143. typedef CALLBACK_API_C( TQAError , TQAClearDrawBuffer )(const TQADrawContext *drawContext, const TQARect *rect, const TQADrawContext *initialContext);
  1144. typedef CALLBACK_API_C( TQAError , TQAClearZBuffer )(const TQADrawContext *drawContext, const TQARect *rect, const TQADrawContext *initialContext);
  1145. typedef CALLBACK_API_C( TQAError , TQATextureNewFromDrawContext )(const TQADrawContext *drawContext, unsigned long flags, TQATexture **newTexture);
  1146. typedef CALLBACK_API_C( TQAError , TQABitmapNewFromDrawContext )(const TQADrawContext *drawContext, unsigned long flags, TQABitmap **newBitmap);
  1147. typedef CALLBACK_API_C( TQABoolean , TQABusy )(const TQADrawContext *drawContext);
  1148. typedef CALLBACK_API_C( TQAError , TQASwapBuffers )(const TQADrawContext *drawContext, const TQARect *dirtyRect);
  1149. /************************************************************************************************
  1150.  *
  1151.  * Public TQADrawContext structure. This contains function pointers for the chosen
  1152.  * drawing engine.
  1153.  *
  1154.  ***********************************************************************************************/
  1155. struct TQADrawContext {
  1156.     TQADrawPrivate *                drawPrivate;                /* Engine's private data for this context */
  1157.     TQAVersion                      version;                    /* Version number */
  1158.     TQASetFloat                     setFloat;                   /* Method: Set a float state variable */
  1159.     TQASetInt                       setInt;                     /* Method: Set an unsigned long state variable */
  1160.     TQASetPtr                       setPtr;                     /* Method: Set an unsigned long state variable */
  1161.     TQAGetFloat                     getFloat;                   /* Method: Get a float state variable */
  1162.     TQAGetInt                       getInt;                     /* Method: Get an unsigned long state variable */
  1163.     TQAGetPtr                       getPtr;                     /* Method: Get an pointer state variable */
  1164.     TQADrawPoint                    drawPoint;                  /* Method: Draw a point */
  1165.     TQADrawLine                     drawLine;                   /* Method: Draw a line */
  1166.     TQADrawTriGouraud               drawTriGouraud;             /* Method: Draw a Gouraud shaded triangle */
  1167.     TQADrawTriTexture               drawTriTexture;             /* Method: Draw a texture mapped triangle */
  1168.     TQADrawVGouraud                 drawVGouraud;               /* Method: Draw Gouraud vertices */
  1169.     TQADrawVTexture                 drawVTexture;               /* Method: Draw texture vertices */
  1170.     TQADrawBitmap                   drawBitmap;                 /* Method: Draw a bitmap */
  1171.     TQARenderStart                  renderStart;                /* Method: Initialize for rendering */
  1172.     TQARenderEnd                    renderEnd;                  /* Method: Complete rendering and display */
  1173.     TQARenderAbort                  renderAbort;                /* Method: Abort any outstanding rendering (blocking) */
  1174.     TQAFlush                        flush;                      /* Method: Start render of any queued commands (non-blocking) */
  1175.     TQASync                         sync;                       /* Method: Wait for completion of all rendering (blocking) */
  1176.     TQASubmitVerticesGouraud        submitVerticesGouraud;      /* Method: Submit Gouraud vertices for trimesh */
  1177.     TQASubmitVerticesTexture        submitVerticesTexture;      /* Method: Submit Texture vertices for trimesh */
  1178.     TQADrawTriMeshGouraud           drawTriMeshGouraud;         /* Method: Draw a Gouraud triangle mesh */
  1179.     TQADrawTriMeshTexture           drawTriMeshTexture;         /* Method: Draw a Texture triangle mesh */
  1180.     TQASetNoticeMethod              setNoticeMethod;            /* Method: Set a notice method */
  1181.     TQAGetNoticeMethod              getNoticeMethod;            /* Method: Get a notice method */
  1182.     TQASubmitMultiTextureParams     submitMultiTextureParams;   /* Method: Submit Secondary texture params */
  1183.     TQAAccessDrawBuffer             accessDrawBuffer;
  1184.     TQAAccessDrawBufferEnd          accessDrawBufferEnd;
  1185.     TQAAccessZBuffer                accessZBuffer;
  1186.     TQAAccessZBufferEnd             accessZBufferEnd;
  1187.     TQAClearDrawBuffer              clearDrawBuffer;
  1188.     TQAClearZBuffer                 clearZBuffer;
  1189.     TQATextureNewFromDrawContext    textureFromContext;
  1190.     TQABitmapNewFromDrawContext     bitmapFromContext;
  1191.     TQABusy                         busy;
  1192.     TQASwapBuffers                  swapBuffers;
  1193. };
  1194. /************************************************************************************************
  1195.  *
  1196.  * Acceleration manager function prototypes.
  1197.  *
  1198.  ***********************************************************************************************/
  1199. #if CALL_NOT_IN_CARBON
  1200. EXTERN_API_C( TQAError )
  1201. QADrawContextNew                (const TQADevice *      device,
  1202.                                  const TQARect *        rect,
  1203.                                  const TQAClip *        clip,
  1204.                                  const TQAEngine *      engine,
  1205.                                  unsigned long          flags,
  1206.                                  TQADrawContext **      newDrawContext);
  1207. EXTERN_API_C( void )
  1208. QADrawContextDelete             (TQADrawContext *       drawContext);
  1209. EXTERN_API_C( TQAError )
  1210. QAColorTableNew                 (const TQAEngine *      engine,
  1211.                                  TQAColorTableType      tableType,
  1212.                                  void *                 pixelData,
  1213.                                  long                   transparentIndexFlag,
  1214.                                  TQAColorTable **       newTable);
  1215. EXTERN_API_C( void )
  1216. QAColorTableDelete              (const TQAEngine *      engine,
  1217.                                  TQAColorTable *        colorTable);
  1218. EXTERN_API_C( TQAError )
  1219. QATextureNew                    (const TQAEngine *      engine,
  1220.                                  unsigned long          flags,
  1221.                                  TQAImagePixelType      pixelType,
  1222.                                  const TQAImage         images[],
  1223.                                  TQATexture **          newTexture);
  1224. EXTERN_API_C( TQAError )
  1225. QATextureDetach                 (const TQAEngine *      engine,
  1226.                                  TQATexture *           texture);
  1227. EXTERN_API_C( void )
  1228. QATextureDelete                 (const TQAEngine *      engine,
  1229.                                  TQATexture *           texture);
  1230. EXTERN_API_C( TQAError )
  1231. QATextureBindColorTable         (const TQAEngine *      engine,
  1232.                                  TQATexture *           texture,
  1233.                                  TQAColorTable *        colorTable);
  1234. EXTERN_API_C( TQAError )
  1235. QABitmapNew                     (const TQAEngine *      engine,
  1236.                                  unsigned long          flags,
  1237.                                  TQAImagePixelType      pixelType,
  1238.                                  const TQAImage *       image,
  1239.                                  TQABitmap **           newBitmap);
  1240. EXTERN_API_C( TQAError )
  1241. QABitmapDetach                  (const TQAEngine *      engine,
  1242.                                  TQABitmap *            bitmap);
  1243. EXTERN_API_C( void )
  1244. QABitmapDelete                  (const TQAEngine *      engine,
  1245.                                  TQABitmap *            bitmap);
  1246. EXTERN_API_C( TQAError )
  1247. QABitmapBindColorTable          (const TQAEngine *      engine,
  1248.                                  TQABitmap *            bitmap,
  1249.                                  TQAColorTable *        colorTable);
  1250. EXTERN_API_C( TQAEngine *)
  1251. QADeviceGetFirstEngine          (const TQADevice *      device);
  1252. EXTERN_API_C( TQAEngine *)
  1253. QADeviceGetNextEngine           (const TQADevice *      device,
  1254.                                  const TQAEngine *      currentEngine);
  1255. EXTERN_API_C( TQAError )
  1256. QAEngineCheckDevice             (const TQAEngine *      engine,
  1257.                                  const TQADevice *      device);
  1258. EXTERN_API_C( TQAError )
  1259. QAEngineGestalt                 (const TQAEngine *      engine,
  1260.                                  TQAGestaltSelector     selector,
  1261.                                  void *                 response);
  1262. EXTERN_API_C( TQAError )
  1263. QAEngineEnable                  (long                   vendorID,
  1264.                                  long                   engineID);
  1265. EXTERN_API_C( TQAError )
  1266. QAEngineDisable                 (long                   vendorID,
  1267.                                  long                   engineID);
  1268. EXTERN_API_C( TQAError )
  1269. QAAccessTexture                 (const TQAEngine *      engine,
  1270.                                  TQATexture *           texture,
  1271.                                  long                   mipmapLevel,
  1272.                                  long                   flags,
  1273.                                  TQAPixelBuffer *       buffer);
  1274. EXTERN_API_C( TQAError )
  1275. QAAccessTextureEnd              (const TQAEngine *      engine,
  1276.                                  TQATexture *           texture,
  1277.                                  const TQARect *        dirtyRect);
  1278. EXTERN_API_C( TQAError )
  1279. QAAccessBitmap                  (const TQAEngine *      engine,
  1280.                                  TQABitmap *            bitmap,
  1281.                                  long                   flags,
  1282.                                  TQAPixelBuffer *       buffer);
  1283. EXTERN_API_C( TQAError )
  1284. QAAccessBitmapEnd               (const TQAEngine *      engine,
  1285.                                  TQABitmap *            bitmap,
  1286.                                  const TQARect *        dirtyRect);
  1287. #endif  /* CALL_NOT_IN_CARBON */
  1288. #if TARGET_OS_MAC
  1289. #if CALL_NOT_IN_CARBON
  1290. EXTERN_API_C( TQAError )
  1291. QARegisterDrawNotificationProc  (Rect *                 globalRect,
  1292.                                  TQADrawNotificationProcPtr  proc,
  1293.                                  long                   refCon,
  1294.                                  TQADrawNotificationProcRefNum * refNum);
  1295. EXTERN_API_C( TQAError )
  1296. QAUnregisterDrawNotificationProc (TQADrawNotificationProcRefNum  refNum);
  1297. #endif  /* CALL_NOT_IN_CARBON */
  1298. #endif  /* TARGET_OS_MAC */
  1299. #if PRAGMA_ENUM_ALWAYSINT
  1300.     #pragma enumsalwaysint reset
  1301.     #ifdef __RAVE__RESTORE_TWOBYTEINTS
  1302.         #pragma fourbyteints off
  1303.     #endif
  1304. #elif PRAGMA_ENUM_OPTIONS
  1305.     #pragma option enum=reset
  1306. #elif defined(__RAVE__RESTORE_PACKED_ENUMS)
  1307.     #pragma options(pack_enums)
  1308. #endif
  1309. #if PRAGMA_STRUCT_ALIGN
  1310.     #pragma options align=reset
  1311. #elif PRAGMA_STRUCT_PACKPUSH
  1312.     #pragma pack(pop)
  1313. #elif PRAGMA_STRUCT_PACK
  1314.     #pragma pack()
  1315. #endif
  1316. #ifdef PRAGMA_IMPORT_OFF
  1317. #pragma import off
  1318. #elif PRAGMA_IMPORT
  1319. #pragma import reset
  1320. #endif
  1321. #ifdef __cplusplus
  1322. }
  1323. #endif
  1324. #endif /* __RAVE__ */