HOOPS/3dGS I.M. Interface

     << Back      Full Index      Forward >>


database.h

00001 /*
00002  * Copyright (c) 1998-2001 by Tech Soft 3D, LLC.
00003  * The information contained herein is confidential and proprietary to
00004  * Tech Soft 3D, LLC., and considered a trade secret as defined under
00005  * civil and criminal statutes.  Tech Soft 3D shall pursue its civil
00006  * and criminal remedies in the event of unauthorized use or misappropriation
00007  * of its trade secrets.  Use of this information by anyone other than
00008  * authorized employees of Tech Soft 3D, LLC. is granted only under a
00009  * written non-disclosure agreement, expressly prescribing the scope and
00010  * manner of such use.
00011  *
00012  * $Id: database_8h-source.html,v 1.29 2008-03-10 07:09:28 stage Exp $
00013  */
00014 
00015 #ifndef DATABASE_DEFINED
00016 
00017 
00018 /* Cast away constness (if any)! */
00019 #define REALLY_UTILE(ref) do {                          \
00020             H_LOCK_MUTEX_LOW (OUR (utility_mutex));     \
00021             ++*(HT_Utility alter *)&(ref)->h.utility;   \
00022             H_UNLOCK_MUTEX_LOW (OUR (utility_mutex));   \
00023         } while (0)
00024 
00025 #define REALLY_INUTILE(ref) do {                                    \
00026             int     _utility_;                              \
00027             H_LOCK_MUTEX_LOW (OUR (utility_mutex));                 \
00028             _utility_ = --*(HT_Utility alter *)&(ref)->h.utility;   \
00029             H_UNLOCK_MUTEX_LOW (OUR (utility_mutex));               \
00030             if (_utility_ == 0)                                     \
00031                 HI_Au_Revoir ((HT_Anything *)ref);                  \
00032         } while (0)
00033 
00034 #ifdef VALIDATE_MEMORY
00035 #   define UTILE(ref) do {                                                                  \
00036         if ((ref)->h.utility == 0x55555555) HE_ERROR (0, 0, "detected UTILE after free");   \
00037         else REALLY_UTILE (ref);                                                            \
00038     } while (0)
00039 
00040 #   define INUTILE(ref) do {                                                                \
00041         if ((ref)->h.utility == 0x55555555) HE_ERROR (0, 0, "detected INUTILE after free"); \
00042         else REALLY_INUTILE (ref);                                                          \
00043     } while (0)
00044 #else
00045 #   define UTILE(ref)    REALLY_UTILE(ref)
00046 #   define INUTILE(ref)  REALLY_INUTILE(ref)
00047 #endif
00048 
00049 /* to use the following block, 
00050  * 1) add "(fclose(OUR(utile_debug_fp)))," before the (HE_ERROR in the above VALIDATE_MEMORY section
00051  * 2) add a utile_debug_fp FILE * to the ht world structure in hoops.h
00052  * 3) rename the UTILE and INUTILE above to V_UTILE and V_INUTILE
00053  */
00054 #if 0
00055 #define UTILE(ref)  do {    \
00056     if (!OUR(utile_debug_fp)) OUR(utile_debug_fp) = fopen ("utile_debug.txt", "w"); \
00057     fprintf(OUR(utile_debug_fp), "I: %p %d %s\n", (void*)ref, __LINE__, __FILE__); \
00058     V_UTILE(ref); \
00059 } while (0)
00060 #define INUTILE(ref)    do {    \
00061     fprintf(OUR(utile_debug_fp), "D: %p %d %s\n", (void*)ref, __LINE__, __FILE__); \
00062     V_INUTILE(ref); \
00063 } while (0)
00064 #endif
00065 
00066 
00067 #define UNLINK(g) do {                                  \
00068         if ((*(g)->h.backlink = (g)->h.next) != null)   \
00069             (g)->h.next->h.backlink = (g)->h.backlink;  \
00070         (g)->h.backlink = &(g)->h.next;                 \
00071         (g)->h.next = null;                             \
00072     } while (0)
00073 
00074 
00075 
00076 #define Act_REDRAW_WINDOWS              (HT_Activity)0x00000001
00077 #define Act_REDRAW_GEOMETRY             (HT_Activity)0x00000002
00078 #define Act_REDRAW_WINDOW_FRAMES        (HT_Activity)0x00000004
00079 #define Act_GEOMETRY_REDRAW_WITHIN      (HT_Activity)0x00000008
00080 #define Act_INNER_REDRAW                (HT_Activity)0x00000010
00081 #define Act_PARTIAL_ERASE_THIS_WIND     (HT_Activity)0x00000020
00082 #define Act_PARTIAL_ERASE_THIS_SEG      (HT_Activity)0x00000040
00083 #define Act_SCOPE_IS_VALID              (HT_Activity)0x00000080
00084 #define Act_FULL_SCOPE_REDRAW           (HT_Activity)0x00000100
00085 #define Act_ERASE                       (HT_Activity)0x00000200
00086 #define Act_REDRAW_ANYTHING             (HT_Activity)0x000003FF
00087 
00088 #define Act_MODIFIED                    (HT_Activity)0x00000400
00089 #define Act_CREATED                     (HT_Activity)0x00000800
00090 #define Act_INNER_CHANGES               (HT_Activity)0x00001000
00091 
00092 #define Act_MARK_ALL_OO_GEOMETRY        (HT_Activity)0x00002000
00093                   /* OO = out of order */
00094 
00095 #define Act_REDRAW_COLOR_MAP            (HT_Activity)0x00004000
00096 
00097 #define Act_ERASE_RADIOSITY             (HT_Activity)0x00008000
00098 #define Act_REFRESH                     (HT_Activity)0x00010000
00099 
00100 #define Act_MUST_VISIT                  (HT_Activity)0x00020000 /* only used during update */
00101 #define Act_VALIDATE_REGION             (HT_Activity)0x00040000
00102 #define Act_REFIGURE_SOFT_CLIP          (HT_Activity)0x00080000
00103 
00104 #define Act_REGENERATE_CUT_GEOMETRY     (HT_Activity)0x00100000
00105 #define Act_REGENERATE_OCTREE           (HT_Activity)0x00200000
00106 #define Act_INNER_SPRITING              (HT_Activity)0x00400000
00107 #define Act_REGENERATE_HIDDEN_LINE      (HT_Activity)0x00800000
00108 #define Act_REGENERATE_SHADOW           (HT_Activity)0x01000000
00109 #define Act_REGENERATE_DERIVED          (HT_Activity)0x01100000
00110 #define Act_REPOSITION_SHADOW           (HT_Activity)0x02000000
00111 #define Act_SHADOW_POINT_CHANGE         (HT_Activity)0x04000000
00112 #define Act_RESET_DEVICE                (HT_Activity)0x08000000
00113 #define Act_REGENERATE_3D_TEXT_BOUNDS   (HT_Activity)0x10000000
00114 #define Act_TEXT_BOUNDS_REGENERATED     (HT_Activity)0x20000000
00115 #define Act_REGENERATE_SORT_GRID        (HT_Activity)0x40000000
00116 
00117 #define Act_SET_INNER_CHANGES           Act_INNER_CHANGES
00118 #define Act_SET_INNER_REDRAW            (Act_SET_INNER_CHANGES|Act_INNER_REDRAW)
00119 #define Act_SET_SCOPED_INNER_REDRAW     (Act_SET_INNER_REDRAW|Act_SCOPE_IS_VALID|Act_FULL_SCOPE_REDRAW)
00120 #define Act_SET_GEOMETRY_REDRAW_WITHIN  (Act_SET_SCOPED_INNER_REDRAW|Act_GEOMETRY_REDRAW_WITHIN|Act_VALIDATE_REGION/*|Act_MARK_ALL_OO_GEOMETRY*/)
00121 #define Act_SET_REDRAW_GEOMETRY         (Act_SET_GEOMETRY_REDRAW_WITHIN|Act_REDRAW_GEOMETRY)
00122 #define Act_SET_REDRAW_WINDOWS          (Act_SET_SCOPED_INNER_REDRAW|Act_REDRAW_WINDOWS)
00123 #define Act_SET_REDRAW_WINDOW_FRAMES    (Act_SET_SCOPED_INNER_REDRAW|Act_REDRAW_WINDOW_FRAMES)
00124 #define Act_SET_REDRAW_FRAMED_WINDOWS   (Act_SET_SCOPED_INNER_REDRAW|Act_REDRAW_WINDOW_FRAMES|Act_REDRAW_WINDOWS)
00125 #define Act_SET_REDRAW_EVERYTHING       (Act_SET_REDRAW_GEOMETRY|Act_REDRAW_WINDOW_FRAMES|Act_REDRAW_WINDOWS)
00126 #define Act_SET_ERASE_GEOMETRY          (Act_SET_REDRAW_GEOMETRY|Act_REDRAW_WINDOWS|Act_ERASE)
00127 #define Act_SET_ERASE_EVERYTHING        (Act_SET_REDRAW_EVERYTHING|Act_ERASE)
00128 #define Act_SET_PARTIAL_ERASE           (Act_SET_GEOMETRY_REDRAW_WITHIN|Act_PARTIAL_ERASE_THIS_WIND|Act_PARTIAL_ERASE_THIS_SEG)
00129 #define Act_SET_MODIFIED                (Act_SET_INNER_CHANGES|Act_MODIFIED)
00130 #define Act_SET_CREATED                 (Act_SET_INNER_CHANGES|Act_CREATED)
00131 #define Act_SET_GEOMETRY_MODIFIED       (Act_SET_REDRAW_GEOMETRY|Act_MODIFIED) /* w/ radiosity? */
00132 #define Act_SET_GEOMETRY_CREATED        (Act_SET_REDRAW_GEOMETRY|Act_CREATED)  /* w/ radiosity? */
00133 #define Act_SET_REDRAW_COLOR_MAP        (Act_SET_SCOPED_INNER_REDRAW|Act_REDRAW_COLOR_MAP|Act_ERASE_RADIOSITY)
00134 #define Act_SET_REDRAW_GEOMETRY_XRAD    (Act_SET_REDRAW_GEOMETRY|Act_ERASE_RADIOSITY)
00135 #define Act_SET_REDRAW_EVERYTHING_XRAD  (Act_SET_REDRAW_EVERYTHING|Act_ERASE_RADIOSITY)
00136 #define Act_SET_ERASE_GEOMETRY_XRAD     (Act_SET_ERASE_GEOMETRY|Act_ERASE_RADIOSITY)
00137 #define Act_SET_ERASE_EVERYTHING_XRAD   (Act_SET_ERASE_EVERYTHING|Act_ERASE_RADIOSITY)
00138 #define Act_SET_PARTIAL_ERASE_XRAD      (Act_SET_PARTIAL_ERASE|Act_ERASE_RADIOSITY)
00139 #define Act_SET_REFRESH                 (Act_SET_REDRAW_WINDOW_FRAMES|Act_REFRESH)
00140 #define Act_SET_REGENERATE_CUT_GEOMETRY (Act_SET_INNER_REDRAW|Act_REGENERATE_CUT_GEOMETRY)
00141 #define Act_SET_REGENERATE_OCTREE       (Act_SET_INNER_REDRAW|Act_REGENERATE_OCTREE)
00142 #define Act_SET_REGENERATE_HIDDEN_LINE  (Act_SET_INNER_REDRAW|Act_REGENERATE_HIDDEN_LINE)
00143 #define Act_SET_REGENERATE_SHADOW       (Act_SET_INNER_REDRAW|Act_REGENERATE_SHADOW)
00144 #define Act_SET_REGENERATE_DERIVED      (Act_SET_INNER_REDRAW|Act_REGENERATE_CUT_GEOMETRY|Act_REGENERATE_SHADOW)
00145 #define Act_SET_SHADOW_POINT_CHANGE     (Act_SET_INNER_REDRAW|Act_SHADOW_POINT_CHANGE)
00146 
00147 EXTERNAL void HC_CDECL HI_Propagate_Activity (HT_Segstuff *stuff, HT_Integer32 which);
00148 #define PROPAGATE_ACTIVITY(who, what)   (ALLBITS ((who)->h.activity, (what)) ?\
00149                     0 : (HI_Propagate_Activity ((HT_Segstuff *)(who), (what)), 0))
00150 
00151 struct HT_Header {
00152     HT_Anything         *next,
00153                         **backlink;
00154     HT_Anything         *owner;
00155     HT_Utility          utility;
00156     HT_Type             type;
00157     HT_Database_Flags   dbflags;
00158     HT_Activity         activity,
00159                         old_activity;
00160     HT_Key              key;
00161 };
00162 
00163 /* Warning: Style/Includes assume AHeaders and SSHeaders are the same size! */
00164 
00165 struct HT_AHeader {
00166     HT_Attribute        *next,
00167                         **backlink;
00168     HT_Segment          *owner;
00169     HT_Utility          utility;
00170     HT_Type             type;
00171     HT_Database_Flags   dbflags;
00172     HT_Activity         activity,
00173                         old_activity;
00174     HT_Key              key;
00175 };
00176 
00177 struct HT_GHeader {
00178     HT_Geometry         *next,
00179                         **backlink;
00180     HT_Segment          *owner;
00181     HT_Utility          utility;
00182     HT_Type             type;
00183     HT_Database_Flags   dbflags;
00184     HT_Activity         activity,
00185                         old_activity;
00186     HT_Key              key;
00187     long                priority;
00188     HT_Attribute        *attributes;
00189 };
00190 
00191 struct HT_SSHeader {
00192     HT_Subsegment       *next,
00193                         **backlink;
00194     HT_Segment          *owner;
00195     HT_Utility          utility;
00196     HT_Type             type;
00197     HT_Database_Flags   dbflags;
00198     HT_Activity         activity,
00199                         old_activity;
00200     HT_Key              key;
00201 };
00202 
00203 struct HT_IHeader {
00204     HT_Instance         *next,
00205                         **backlink;
00206     HT_Instance         *owner;         /* but may be HT_Include !! */
00207     HT_Utility          utility;
00208     HT_Type             type;
00209     HT_Database_Flags   dbflags;
00210     HT_Activity         activity,
00211                         old_activity;
00212     HT_Key              key;
00213 };
00214 
00215 struct HT_StuffHeader {     /* the common sections of the above types */
00216     HT_Segstuff         *next,
00217                         **backlink;
00218     HT_Segment          *owner;
00219     HT_Utility          utility;
00220     HT_Type             type;
00221     HT_Database_Flags   dbflags;
00222     HT_Activity         activity,
00223                         old_activity;
00224     HT_Key              key;
00225 };
00226 
00227 
00228 struct HT_DLHeader {
00229     HT_Display_List     *next,
00230                         **backlink;
00231     HT_Anything         *owner;
00232     HT_Utility          utility;
00233     HT_Type             type;
00234     HT_Database_Flags   dbflags;
00235 };
00236 
00237 /* The following flags are confusing because they are used both as
00238  * "maybes" flags and for Visibility/Selectability. It would be nice to
00239  * break the two usages apart, but there are several places where
00240  * "(maybes & visibility) != 0" is useful.  T_SHARED is additionally used
00241  * in that case to limit the check to certain bits.
00242  */
00243 
00244 /* the following are interesting within both 'visibility' and 'maybes' */
00245 #define T_FACES                         (HT_Type_Flags)0x00000001L
00246 #define T_EDGES                         (HT_Type_Flags)0x00000002L
00247 #define T_LINES                         (HT_Type_Flags)0x00000004L
00248 #define T_MARKERS                       (HT_Type_Flags)0x00000008L
00249 #define T_VERTICES                      (HT_Type_Flags)0x00000010L
00250 #define T_IMAGES                        (HT_Type_Flags)0x00000020L
00251 #define T_TEXT                          (HT_Type_Flags)0x00000040L
00252 #define T_STRING_CURSORS                (HT_Type_Flags)0x00000080L
00253 #define T_WINDOWS                       (HT_Type_Flags)0x00000100L
00254 
00255 #define T_CUT_GEOMETRY                  (HT_Type_Flags)0x00000200L
00256 
00257 #define T_LIGHTS_FOR_FACES              (HT_Type_Flags)0x00000400L
00258 #define T_LIGHTS_FOR_EDGES              (HT_Type_Flags)0x00000800L
00259 #define T_LIGHTS_FOR_MARKERS            (HT_Type_Flags)0x00001000L
00260 
00261 #define T_CUTTING_PLANES                (HT_Type_Flags)0x00002000L
00262 
00263 #define T_SHARED                        (HT_Type_Flags)0x0000FFFFL  /* a few bits reserved */
00264 
00265 /* the following are interesting within 'visibility' */
00266 #define T_INTERIOR_SILHOUETTE_EDGES     (HT_Type_Flags)0x00010000L
00267 #define T_PERIMETER_EDGES               (HT_Type_Flags)0x00020000L
00268 #define T_ADJACENT_EDGES                (HT_Type_Flags)0x00040000L
00269 #define T_MESH_QUAD_EDGES               (HT_Type_Flags)0x00080000L
00270 #define T_HARD_EDGES                    (HT_Type_Flags)0x00100000L
00271 #define T_NONCULLED_EDGES               (HT_Type_Flags)0x00200000L
00272 
00273 #define T_ANY_SHADOW                    (HT_Type_Flags)0x00400000L
00274 
00275 
00276 #define T_GENERIC_EDGES                 T_EDGES
00277 #define T_ANY_POLYGON_EDGE              (HT_Type_Flags)(T_GENERIC_EDGES|T_PERIMETER_EDGES|T_ADJACENT_EDGES)
00278 #define T_ANY_GRID_EDGE                 T_ANY_POLYGON_EDGE
00279 #define T_ANY_SHELL_EDGE                (HT_Type_Flags)(T_ANY_POLYGON_EDGE|T_HARD_EDGES|T_INTERIOR_SILHOUETTE_EDGES|T_NONCULLED_EDGES)
00280 #define T_ANY_MESH_EDGE                 (HT_Type_Flags)(T_ANY_SHELL_EDGE|T_MESH_QUAD_EDGES)
00281 #define T_ANY_SPHERE_EDGE               (HT_Type_Flags)(T_GENERIC_EDGES|T_INTERIOR_SILHOUETTE_EDGES|T_MESH_QUAD_EDGES|T_NONCULLED_EDGES)
00282 #define T_ANY_EDGE                      T_ANY_MESH_EDGE
00283 
00284 #define T_ANY_LIGHTS                    (HT_Type_Flags)(T_LIGHTS_FOR_FACES|T_LIGHTS_FOR_EDGES|T_LIGHTS_FOR_MARKERS)
00285 
00286 #define T_ANY_DRAWABLE_GEOMETRY         (HT_Type_Flags)(T_FACES|T_ANY_EDGE|T_LINES|T_MARKERS|T_VERTICES| \
00287                                                         T_IMAGES|T_TEXT|T_STRING_CURSORS|T_ANY_LIGHTS)
00288 #define T_ANY_COLORED_GEOMETRY          T_ANY_DRAWABLE_GEOMETRY
00289 #define T_ANY_SELECTABLE_GEOMETRY       T_ANY_DRAWABLE_GEOMETRY
00290 #define T_ANY_GEOMETRY                  (HT_Type_Flags)(T_ANY_DRAWABLE_GEOMETRY|T_CUTTING_PLANES)
00291 #define T_ANY_OVERLAYABLE_STUFF         (HT_Type_Flags)(T_ANY_DRAWABLE_GEOMETRY|T_WINDOWS)
00292 #define T_ANY_REDRAWABLE_STUFF          (HT_Type_Flags)(T_ANY_GEOMETRY|T_WINDOWS)
00293 #define T_ANY_SELECTABILITY_STUFF       (HT_Type_Flags)(T_ANY_SELECTABLE_GEOMETRY|T_WINDOWS)
00294 #ifdef AIR
00295 #   define T_ANY_VISIBILITY_STUFF       (HT_Type_Flags)(T_ANY_GEOMETRY|T_WINDOWS|T_CUT_GEOMETRY|T_ANY_SHADOW)
00296 #else
00297 #   define T_ANY_VISIBILITY_STUFF       (HT_Type_Flags)(T_ANY_GEOMETRY|T_WINDOWS|T_CUT_GEOMETRY)
00298 #endif
00299 
00300 
00301 /* the following are interesting within 'maybes' */
00302 #define T_3D                            (HT_Type_Flags)0x00010000L
00303 #define T_COLORS                        (HT_Type_Flags)0x00020000L
00304 #define T_DITHER_INDUCING_GEOMETRY      (HT_Type_Flags)0x00040000L
00305 #define T_GEOMETRY_SELECTABLE           (HT_Type_Flags)0x00080000L
00306 #define T_GEOMETRY_VISIBLE              (HT_Type_Flags)0x00100000L
00307 #define T_WINDOWS_SELECTABLE            (HT_Type_Flags)0x00200000L
00308 #define T_WINDOWS_VISIBLE               (HT_Type_Flags)0x00400000L
00309 #define T_WINDOW_PATTERNS               (HT_Type_Flags)0x00800000L
00310 #define T_MEMORY_PURGING                (HT_Type_Flags)0x01000000L
00311 #define T_INCLUDES                      (HT_Type_Flags)0x02000000L
00312 #define T_PARTIAL_ERASE                 (HT_Type_Flags)0x04000000L
00313 #define T_OVERLAYS                      (HT_Type_Flags)0x08000000L
00314 #define T_CAMERA_BELOW                  (HT_Type_Flags)0x10000000L
00315 #define T_LOCKING                       (HT_Type_Flags)0x20000000L
00316 
00317 #define T_SPECIAL                       (HT_Type_Flags)0x80000000L
00318 
00319 
00320 
00321 /* these are in their own subfield in visibility */
00322 #define T_SHADOW_RECEIVING              (HT_Type_Flags)0x00000001L
00323 #define T_SHADOW_CASTING                (HT_Type_Flags)0x00000002L
00324 #define T_SHADOW_EMITTING               (HT_Type_Flags)0x00000004L
00325 #define T_SHADOW_ALL                    (HT_Type_Flags)0x00000007L
00326 
00327 
00328 /* The following are used in segflags */
00329 
00330 typedef HT_Integer32    HT_Seg_Flags;
00331 #define Seg_STREAMING                   (HT_Seg_Flags)0x00000001
00332 #define Seg_GEOMETRY_DISORDERED         (HT_Seg_Flags)0x00000002
00333 #define Seg_SUBSEGMENTS_DISORDERED      (HT_Seg_Flags)0x00000004
00334 #define Seg_HAS_WINDOW                  (HT_Seg_Flags)0x00000008
00335 #define Seg_HAS_DRIVER                  (HT_Seg_Flags)0x00000010
00336 #define Seg_HAS_DISPLAY_DRIVER          (HT_Seg_Flags)0x00000020
00337 #define Seg_HAS_PARTIAL_ERASE           (HT_Seg_Flags)0x00000040
00338 #define Seg_HAS_NO_PARTIAL_ERASE        (HT_Seg_Flags)0x00000080
00339 #define Seg_HAS_INPUT_METAFILE          (HT_Seg_Flags)0x00000100
00340 #define Seg_HAS_OUTPUT_METAFILE         (HT_Seg_Flags)0x00000200
00341 #define Seg_VISIBLE_WINDOWS             (HT_Seg_Flags)0x00000400
00342 #define Seg_INVISIBLE_WINDOWS           (HT_Seg_Flags)0x00000800
00343 #define Seg_TRANSPARENT_WINDOW          (HT_Seg_Flags)0x00001000
00344 #define Seg_HAS_ISOLATED_DRIVER         (HT_Seg_Flags)0x00002000
00345 #define Seg_OCCLUDED                    (HT_Seg_Flags)0x00004000
00346 #define Seg_CULLED                      (HT_Seg_Flags)0x00008000
00347 #define Seg_SHADOW_POINT                (HT_Seg_Flags)0x00010000
00348 #define Seg_HAS_OVERLAY                 (HT_Seg_Flags)0x00020000
00349 #define Seg_HAS_PENDING_OVERLAY         (HT_Seg_Flags)0x00040000
00350 #define Seg_HAS_CAMERA                  (HT_Seg_Flags)0x00080000
00351 #define Seg_DATABASE_CALLBACK           (HT_Seg_Flags)0x00100000
00352 #define Seg_STATIC_SCENE                (HT_Seg_Flags)0x00200000
00353 #define Seg_SUBSEGMENT_PRIORITY         (HT_Seg_Flags)0x00400000
00354 #define Seg_HAS_SPRITING                (HT_Seg_Flags)0x00800000
00355 
00356 #define Seg_ANY_OVERLAY (Seg_HAS_OVERLAY | Seg_HAS_PENDING_OVERLAY)
00357 
00358 
00359 typedef char            HT_Redraw_Flags;
00360 
00361 #define R_WINDOWS       (HT_Redraw_Flags)0x01
00362 #define R_POLYGONS      (HT_Redraw_Flags)0x02
00363 #define R_LINES         (HT_Redraw_Flags)0x04
00364 #define R_IMAGES        (HT_Redraw_Flags)0x08
00365 #define R_MARKERS       (HT_Redraw_Flags)0x10
00366 #define R_TEXT          (HT_Redraw_Flags)0x20
00367 #define R_INSIDE        (HT_Redraw_Flags)0x40
00368 
00369 #define R_GEOMETRY      (R_POLYGONS|R_LINES|R_IMAGES|R_MARKERS|R_TEXT)
00370 #define R_EVERYTHING    (R_GEOMETRY|R_WINDOWS)
00371 
00372 typedef unsigned HT_Integer32   HT_Attribute_Mask;
00373 
00374 
00375 #define Condition_NOT   -1
00376 #define Condition_EQ    -2
00377 #define Condition_NEQ   -3
00378 #define Condition_AND   -4
00379 #define Condition_OR    -5
00380 #define Condition_XOR   -6
00381 
00382 struct HT_Conditional {
00383     int                 *codes;
00384     int                 count;
00385 };
00386 
00387 
00388 struct HT_Segment_Cache {
00389     HT_Net_Rendition *              net_rendition;
00390     struct ht_air_data *            air_data;
00391     HT_Frame_Buffer_Info *          frame_buffer_info;
00392     HT_Cut_Geometry_Set *           cut_geometry;
00393     HT_Simple_Shadow *              simple_shadow;
00394     HT_Shadow_Map *                 shadow_map;
00395     HT_Octree_Base *                octree;
00396     HT_Sort_Grid *                  sort_grid;
00397     HT_HL_Data *                    hidden_line;
00398     HT_Matrix *                     net_modelling_matrix;
00399     HT_Include *                    attribute_tree;
00400     HT_Display_List *               display_lists;
00401     HT_Display_List *               depth_peeling_display_lists;
00402 };
00403 
00404 #define LOD_MAX_LEVELS 8
00405 struct HT_LOD_Node {
00406     HT_Header           h;
00407     HT_Geometry *data[LOD_MAX_LEVELS];
00408 };
00409 
00410 
00411 
00412 struct HT_Segment {
00413     HT_SSHeader                 h;
00414                                 /* these must follow header */
00415     long                        priority;
00416     HT_Attribute                *attributes;
00417     HT_Subsegment               *subsegments;
00418 #ifndef DISABLE_INSTANCING
00419     HT_Instance                 *instances;
00420 #endif
00421     HT_Segment_Cache            *cache;
00422     HT_Seg_Flags                segflags;
00423                                 /* through here lines up with instance */
00424 
00425     HT_Xref                     *references;
00426     HT_Fast_Lookup              *fast_lookup;
00427 
00428     HT_Geometry                 *geometry;
00429     HT_Geometry                 **geometry_table;
00430     HT_Geometry                 *deleted;
00431 
00432     HT_Bounding                 *bounding;          /* includes subsegments */
00433     HT_Bounding                 *geometry_bounding; /* local geometry only */
00434 
00435     HT_Name                     name;           
00436     HT_Type_Flags               maybes;         /* 4 bytes */
00437 
00438     short                       number_of_lights;
00439     short                       number_of_cutting_planes;
00440     short                       number_of_shadows;
00441     short                       unused;         /* maintains 4-byte alignment */
00442     int                         number_of_transparencies;
00443 
00444     HT_LOD_Node                 *lodbase;
00445     HT_Display_List             *polyline_display_lists;
00446 };
00447 
00448 struct HT_Instance {
00449     HT_IHeader                  h;
00450                                 /* these must follow header */
00451     long                        pad_priority;
00452     HT_Attribute                *pad_attributes;
00453     HT_Instance                 *subinstances;
00454 #ifndef DISABLE_INSTANCING
00455     HT_Instance                 *instancee_next;
00456 #endif
00457     HT_Segment_Cache            *cache;
00458     HT_Seg_Flags                segflags;
00459                                 /* through here lines up with segment */
00460 
00461     HT_Subsegment               *instancee;     /* may be HT_Segment or HT_Include */
00462     HT_Instance                 **instancee_backlink;
00463 };
00464 
00465 
00466 #define Include_IMPLICIT_PRIORITY       DB_TYPE_SPECIFIC(1)
00467 
00468 struct HT_Include {
00469     HT_SSHeader                 h;
00470                                 /* these must follow the header */
00471     long                        priority;
00472     HT_Attribute                *pad_attributes;
00473     HT_Subsegment               *referee;                       /* usually instance, but maybe the segment */
00474 #ifndef DISABLE_INSTANCING
00475     HT_Instance                 *instances;
00476 #endif
00477 
00478     HT_Xref                     *referee_next;          /* must match across xrefs */
00479     HT_Xref                     **referee_backlink;
00480     HT_Conditional              condition;              /* local, but matches */
00481 };
00482 
00483 struct HT_Geometry_Reference {              /* not a subsegment type, but it's essentially an include */
00484     HT_GHeader                  h;
00485                                 /* these must follow the header (Note: GHeader includes priority & attributes) */
00486     HT_Anything const           *referee;
00487 #ifndef DISABLE_INSTANCING
00488     HT_Bounding                 *bounding;      /* keeps structures aligned */
00489 #endif
00490 
00491     HT_Xref                     *referee_next;          /* must match across xrefs */
00492     HT_Xref                     **referee_backlink;
00493     HT_Conditional              condition;              /* local, but matches */
00494 };
00495 
00496 struct HT_Style {
00497     HT_AHeader                  h;
00498     long                        pad_priority;       /* keeps structures aligned due to shorter AHeader */
00499     HT_Attribute            *pad_attributes;    /* same */
00500                                 /* these must follow the header */
00501     HT_Segment                  *referee;
00502 #ifndef DISABLE_INSTANCING
00503     HT_Instance         *pad_instances;     /* keeps structures aligned */
00504 #endif
00505 
00506     HT_Xref     *referee_next;          /* must match across xrefs */
00507     HT_Xref     **referee_backlink;
00508     HT_Conditional      condition;              /* local, but matches */
00509 };
00510 
00511 
00512 typedef HT_Include      HT_XGeneric;
00513 
00514 union HT_Xref { /* things that are legal in cross-reference lists */
00515     HT_SSHeader         h;              /* ?? */
00516     HT_XGeneric         xgeneric;
00517 
00518     HT_Style                style;
00519     HT_Include              include;
00520     HT_Geometry_Reference   gref;
00521 };
00522 
00523 
00524 union HT_Subsegment {
00525     HT_SSHeader         h;
00526 
00527     struct {
00528         HT_SSHeader     h;
00529     long                        priority;
00530     HT_Attribute            *pad_attributes;
00531         HT_Subsegment       *subsegments;   /* these must match segment/instance */
00532 #ifndef DISABLE_INSTANCING
00533         HT_Instance     *instances;     /* segment, include, instance */
00534 #endif
00535         HT_Segment_Cache *cache;            /* segment, instance */
00536         HT_Seg_Flags            segflags;       /* segment, instance */
00537     }                   ss;
00538 
00539     HT_Include          include;
00540     HT_Segment          segment;
00541     HT_Instance         instance;
00542 };
00543 
00544 
00545 
00546 
00547 #define Polyline_INKING         DB_TYPE_SPECIFIC(1)
00548 #define Polyline_BY_REFERENCE   DB_TYPE_SPECIFIC(2)
00549 #define Polyline_BASIS_PAIR     DB_TYPE_SPECIFIC(3)
00550 
00551 struct HT_Polyline {
00552     HT_GHeader          h;
00553     HT_Point            *points;
00554     HT_Vector           *orientation;
00555     int                 count,
00556                         allocated;
00557 };
00558 
00559 #define Polygon_PLANE_TESTED       DB_TYPE_SPECIFIC(1)
00560 #define Polygon_PLANE_VALID        DB_TYPE_SPECIFIC(2)
00561 
00562 struct HT_Callback {
00563     HT_AHeader                  h;
00564     HT_Callback_List            *callback_list;
00565 };
00566 
00567 typedef int HT_Callback_Type;
00568 
00569 struct HT_Callback_Name {
00570     struct {
00571         HT_Callback_Name        *next,
00572                                 **backlink;
00573         HT_World                *owner;
00574         HT_Utility              utility;
00575         HT_Type                 type;
00576         HT_Database_Flags       dbflags;
00577     }                   h;
00578 
00579     HT_Void_Routine     address;
00580 
00581     HT_Name             name;
00582 };
00583 
00584 struct HT_Polygon {
00585     HT_GHeader          h;
00586     HT_Point            *points;
00587     int                 count,
00588                         allocated;
00589 
00590     HT_Plane            plane;
00591 };
00592 
00593 struct HT_Contour {
00594     HT_GHeader          h;
00595     HT_Point            *points;
00596     int                 count, allocated;
00597     int                 *lengths;
00598     int                 length_count, length_count_allocated;
00599 
00600     HT_Plane            plane;
00601 };
00602 
00603 struct HT_Cutting_Plane {
00604     HT_GHeader          h;
00605     HT_Plane *          planes;
00606     int                 count;
00607 };
00608 
00609 /* NOTE: all circle & ellipse structures are arranged to share all common
00610  * values immediately after the header.  In addition, all common arc or solid
00611  * parameters then match each other.
00612  * circular_wedge & circular_chord are just special cases of circular_arc
00613  * which define an extra point or two, and are filled instead of stroked
00614  */
00615 
00616 struct HT_Circle {
00617     HT_GHeader          h;
00618     HT_Point            center;         /* common to all */
00619     HT_Plane            plane;
00620     HT_Vector           basis1,
00621                         basis2;
00622 
00623     float               radius;         /* local */
00624     HT_Point            start,
00625                         middle,
00626                         end;
00627 };
00628 
00629 struct HT_Circular_Arc {
00630     HT_GHeader          h;
00631     HT_Point            center;         /* common to all */
00632     HT_Plane            plane;
00633     HT_Vector           basis1,
00634                         basis2;
00635 
00636     float               arc_start,      /* common to arcs */
00637                         arc_length;
00638 
00639     float               radius;         /* local */
00640     HT_Point            start,
00641                         middle,
00642                         end;
00643 };
00644 
00645 struct HT_Ellipse {
00646     HT_GHeader          h;
00647     HT_Point            center;         /* common to all */
00648     HT_Plane            plane;
00649     HT_Vector           basis1,
00650                         basis2;
00651 
00652     HT_Point            major,          /* local */
00653                         minor;
00654 };
00655 
00656 struct HT_Elliptical_Arc {
00657     HT_GHeader          h;
00658     HT_Point            center;         /* common to all */
00659     HT_Plane            plane;
00660     HT_Vector           basis1,
00661                         basis2;
00662 
00663     float               start,          /* common to arcs */
00664                         end;
00665 
00666     HT_Point            major,          /* local */
00667                         minor;
00668 };
00669 
00670 
00671 /* careful: HT_Circle won't fit into the pattern of HT_Generic_Arc if
00672  * BIT (circle->h.dbflags, Circle_LIGHTWEIGHT) */
00673 union HT_Generic_Arc {
00674     HT_GHeader          h;
00675 
00676     struct {
00677         HT_GHeader      h;
00678         HT_Point        center;         /* common to all */
00679         HT_Plane        plane;
00680         HT_Vector       basis1,
00681                         basis2;
00682     }                   generic;
00683 
00684     HT_Circle           circle;
00685     HT_Ellipse          ellipse;
00686     HT_Circular_Arc     circular_arc;
00687     HT_Elliptical_Arc   elliptical_arc;
00688 };
00689 
00690 
00691 #define Circle_USER_CENTER      DB_TYPE_SPECIFIC(1)
00692 #define Circle_LIGHTWEIGHT      DB_TYPE_SPECIFIC(2)
00693 #define Circle_LINEAR_ARC       DB_TYPE_SPECIFIC(3)
00694 
00695 struct HT_Circle_Lite {
00696     HT_GHeader          h;
00697     struct {
00698         float   x, y;
00699     }                   center;
00700     float               radius;
00701 };
00702 
00703 struct HT_Circular_Arc_Lite {
00704     HT_GHeader          h;
00705     struct {
00706         float   x, y;
00707     }                   center;
00708     float               radius;
00709     float               arc_start,
00710                         arc_length;
00711 };
00712 
00713 
00714 /* if this structure is needed, it should be allocated as a HT_Circular_Arc
00715  * instead, in case we need to edit it in place later. */
00716 struct HT_Circular_Arc_Linear {
00717     HT_GHeader          h;
00718     HT_Point            points[3];
00719 };
00720 
00721 
00722 #define Curve_HAS_NEGATIVE_WEIGHTS DB_TYPE_SPECIFIC(1)
00723 
00724 struct HT_Curve_Common {
00725     HT_GHeader h;
00726     int         degree;
00727     int         control_point_count;
00728     HT_Point *  control_points;
00729 };
00730 
00731 struct HT_NURBS_Curve {
00732     HT_Curve_Common     common;
00733     float *             weights;/* length is common.control_point_count */
00734     float *             knots;  /* length is common.control_point_count + common.degree + 1 */
00735     float               start_u, end_u;
00736     /* Under certain rendering options, we draw a precomputed polyline in 
00737      * place of the curve. */
00738     struct {
00739         HT_Point                *points;
00740         int                     count, allocated;
00741     } polyline;
00742 };
00743 
00744 union HT_Generic_Curve {
00745     HT_GHeader          h;
00746     HT_Curve_Common     common;
00747     HT_NURBS_Curve      nurbs;
00748 };
00749 
00750 typedef HT_Integer32 HT_Tristrip_Flags;
00751 /*
00752  * flags to be stored on tristrip->special_flags
00753  */
00754 #define DL_FLAG_INVALID                 (HT_Tristrip_Flags)0xFFFFFFFF 
00755 #define DL_LIGHTING                     (HT_Tristrip_Flags)0x00000001
00756 #define DL_FLAT_LIGHTING                (HT_Tristrip_Flags)0x00000002
00757 #define DL_TEXTURING                    (HT_Tristrip_Flags)0x00000004
00758 #define DL_PATTERN                      (HT_Tristrip_Flags)0x00000008
00759 #define DL_COLOR_INTERPOLATION          (HT_Tristrip_Flags)0x00000010
00760 #define DL_INDEX_INTERPOLATION          (HT_Tristrip_Flags)0x00000020
00761 #define DL_FORCE_SMOOTH_SHADE_MODEL     (HT_Tristrip_Flags)0x00000040 /* use smooth shade model when drawing */
00762 #define DL_DRAW_LAST_PIXEL              (HT_Tristrip_Flags)0x00000080 /* polyedges: draw a dot at the end of each strip */
00763 #define DL_NATURAL_PARAMETERS           (HT_Tristrip_Flags)0x00000100
00764 #define DL_LOCAL_GRAYSCALE              (HT_Tristrip_Flags)0x00000200 /* grayscale colors baked into display list */
00765 #define DL_TEMPORARY                    (HT_Tristrip_Flags)0x00000400 /* not attached to database */
00766 #define DL_TEMPORARY_DATA               (HT_Tristrip_Flags)0x00000800 /* isolate needed before deferral */
00767 #define DL_DO_NOT_DEFER                 (HT_Tristrip_Flags)0x00001000
00768 #define DL_3D_TRANSPARENCY              (HT_Tristrip_Flags)0x00002000
00769 #define DL_DO_NOT_RECOMPILE             (HT_Tristrip_Flags)0x00004000 /* struct has no real data.  it is a display list container only.  do not punt, defer or recompile */
00770 #define DL_POLYEDGE_FROM_TRISTRIP       (HT_Tristrip_Flags)0x00008000
00771 #define DL_LIGHTWEIGHT_DISPLAY_LIST     (HT_Tristrip_Flags)0x00010000 /* display list is a GLuint (or equivalent), not an HT_Display_List pointer */
00772 #define DL_INSUFFICIENT_VRAM            (HT_Tristrip_Flags)0x00020000 /* display lists were suppressed because of vram limits */
00773 #define DL_TEXTURE_PREBOUND             (HT_Tristrip_Flags)0x00040000 /* skip texture setup */
00774 #define DL_NEGATIVE_3X3                 (HT_Tristrip_Flags)0x00080000 /* tristrips only: faces were transformed through a negative scale matrix at display list creation time (i.e. handedness reversed) */
00775 #define DL_PC_RADII_REVERSED            (HT_Tristrip_Flags)0x00100000 /* polycylinders: reverse radii */
00776 #define DL_PC_COLORS_REVERSED           (HT_Tristrip_Flags)0x00200000 /* polycylinders: reverse colors */
00777 #define DL_SHADOW_TRISTRIP              (HT_Tristrip_Flags)0x00400000 /* trigger special handling for the simple shadow's tristrip */
00778 #define DL_STRIP_OWNS_POINTERS          (HT_Tristrip_Flags)0x00800000 /* free points array and vertex attributes on destruction */
00779 #define DL_STRIP_OWNS_INDICES           (HT_Tristrip_Flags)0x01000000 /* as with STRIP_OWNS_POINTERS, but additionally free the vertex/edge/face indices arrays */
00780 #define DL_STRIP_OWNS_PARAMETERS        (HT_Tristrip_Flags)0x02000000 /* as with STRIP_OWNS_POINTERS, but only for vertex_parameter pointer */
00781 #define DL_SUPPRESS_GEOMETRY_DISPLAY_LISTS  (HT_Tristrip_Flags)0x04000000 /* do not attempt to create geometry-level display lists (segment-level still ok, though, unless otherwise specified)*/
00782 #define DL_SUPPRESS_SEGMENT_DISPLAY_LISTS   (HT_Tristrip_Flags)0x08000000 /* do not attempt to create segment-level display lists (geometry-level still ok, though, unless otherwise specified)*/
00783 #define DL_COLORS_BY_FINDEX             (HT_Tristrip_Flags)0x10000000 /* the tristrip or polyedge has colors by findex attached */
00784 #define DL_INDEXED_TRISTRIP             (HT_Tristrip_Flags)0x20000000 /* has colors by findex and was compiled with cii (color index interpolation) enabled */
00785 #define DL_VCOLORED_TRISTRIP            (HT_Tristrip_Flags)0x40000000 /* has vertex colors by findex or value and was compiled with ci (color interpolation) enabled */
00786 #define DL_HAS_TRANSPARENCY             (HT_Tristrip_Flags)0x80000000 
00787 /*
00788  * flags to be stored on tristrip->flags
00789  */
00790 #define DL_DISPLAY_LIST_PENDING         (HT_Tristrip_Flags)0x00000001 /* a segdl is currently being compiled */
00791 
00792 /* utility mask to get rid of some bits that should not trigger display list recompiles */
00793 #define DL_SPECIALS_MASK  (             \
00794     ~(DL_FORCE_SMOOTH_SHADE_MODEL |     \
00795         DL_DO_NOT_RECOMPILE |           \
00796         DL_TEMPORARY |                  \
00797         DL_TEMPORARY_DATA |             \
00798         DL_INSUFFICIENT_VRAM |          \
00799         DL_LIGHTWEIGHT_DISPLAY_LIST |   \
00800         DL_INDEXED_TRISTRIP |           \
00801         DL_STRIP_OWNS_POINTERS |        \
00802         DL_STRIP_OWNS_PARAMETERS)   \
00803     )
00804 #define DL_SUPPRESS_ALL_DISPLAY_LISTS (         \
00805     DL_SUPPRESS_GEOMETRY_DISPLAY_LISTS |        \
00806     DL_SUPPRESS_SEGMENT_DISPLAY_LISTS)
00807 
00808 
00809 #define DL_TYPE_GEOMETRY        0
00810 #define DL_TYPE_TEXTURE         1
00811 
00812 struct HT_Base_Driver_Display_List {
00813     HT_Display_List *peer;
00814 };
00815 
00816 struct HT_Display_List_Cleanup_List {
00817     HT_Display_List_Cleanup_List    *next;
00818     HT_Base_Driver_Display_List     *list;
00819 };
00820 
00821 struct HT_Display_List {
00822     HT_DLHeader                 h;
00823     HT_Driver const *   driver;         /* owner */
00824     HT_Base_Driver_Display_List *list;          /* whatever */
00825     unsigned HT_Integer32       action_mask;
00826     HT_Rendo_Flags              rendo_flags;    /* options at creation */
00827     unsigned int                special;        /* extra info */
00828 };
00829 
00830 
00831 #define Cylinder_Cap_NONE       0x00
00832 #define Cylinder_Cap_FIRST      0x01
00833 #define Cylinder_Cap_SECOND     0x02
00834 #define Cylinder_Cap_BOTH       0x03
00835 #define Cylinder_Cap_MASK       0x03
00836 #define Cylinder_CLOSED         0x04
00837 /* Normals for end alignment on polycylinders */
00838 #define Cylinder_Normal_FIRST   0x10
00839 #define Cylinder_Normal_SECOND  0x20
00840 #define Cylinder_Normal_MASK    0x30
00841 
00842 struct HT_Basis_Pair {
00843     HT_Vector   axis[2];
00844 };
00845 
00846 struct HT_Cylinder {
00847     HT_GHeader      h;
00848     HT_Point        axis[2];
00849     float           radius;
00850     int             flags;
00851     HT_Basis_Pair   basis;
00852 };
00853 
00854 typedef unsigned char HT_PCA_Vertex_Flags;
00855 #define PCA_EXPLICIT_ECOLOR_BY_VALUE     (HT_PCA_Vertex_Flags)0x01
00856 #define PCA_EXPLICIT_ECOLOR_BY_FINDEX    (HT_PCA_Vertex_Flags)0x02
00857 #define PCA_ANY_EXPLICIT_ECOLOR          (HT_PCA_Vertex_Flags)0x03
00858 #define PCA_EXPLICIT_FCOLOR_BY_VALUE     (HT_PCA_Vertex_Flags)0x04
00859 #define PCA_EXPLICIT_FCOLOR_BY_FINDEX    (HT_PCA_Vertex_Flags)0x08
00860 #define PCA_ANY_EXPLICIT_FCOLOR          (HT_PCA_Vertex_Flags)0x0C
00861 #define PCA_ANY_EXPLICIT_COLOR_BY_VALUE  (HT_PCA_Vertex_Flags)0x05
00862 #define PCA_ANY_EXPLICIT_COLOR_BY_FINDEX (HT_PCA_Vertex_Flags)0x0A
00863 #define PCA_ANY_EXPLICIT_COLOR           (HT_PCA_Vertex_Flags)0x0F
00864 
00865 struct HT_PolyCylinder_Attributes {
00866     /* All arrays of size == point_count */
00867     HT_PCA_Vertex_Flags     *flags;
00868     HT_RGB                  *fcolors;
00869     HT_RGB                  *ecolors;
00870     HT_Color_Float_Index    *ffindices;
00871     HT_Color_Float_Index    *efindices;
00872     int                     explicit_fcolor_by_value_count;
00873     int                     explicit_fcolor_by_findex_count;
00874     int                     explicit_ecolor_by_value_count;
00875     int                     explicit_ecolor_by_findex_count;
00876 };
00877 
00878 struct HT_PolyCylinder {
00879     HT_GHeader          h;
00880     HT_Point            *points;
00881     float               *radii;
00882     HT_Basis_Pair       *basis;
00883     float               *twists;
00884     HT_PolyCylinder_Attributes  *local_attributes;
00885     HT_Display_List     *tristrip_display_list;
00886     HT_Display_List     *polyedge_display_list;
00887     int                 point_count;
00888     int                 radius_count;
00889     int                 flags;
00890     HT_Vector           end_normals[2];
00891     float               maximum_displacement;
00892     int                 display_list_resolution;
00893     HT_Bounding         bounding;
00894 };
00895 
00896 
00897 
00898 struct HT_Sphere {
00899     HT_GHeader  h;
00900     HT_Point    center;
00901     float       radius;
00902     HT_Vector   *basis;  /* if non-null, allocated as array of 3 vectors */
00903 };
00904 
00905 
00906 
00907 struct HT_Marker {
00908     HT_GHeader          h;
00909     HT_Point            whereabouts;
00910 };
00911 
00912 typedef short   HT_Light_Flags;
00913 #   define      LF_CAMERA_RELATIVE      (HT_Light_Flags)0x0001
00914 #   define      LF_INNER                (HT_Light_Flags)0x0002 /* relevant to spot lights only */
00915 #   define      LF_OUTER                (HT_Light_Flags)0x0004 /* relevant to spot lights only */
00916 #   define      LF_CONCENTRATION        (HT_Light_Flags)0x0008 /* relevant to spot lights only */
00917 #   define      LF_BRIGHT_SIDE          (HT_Light_Flags)0x0010 /* relevant to area lights only */
00918 #   define      LF_FRONT                (HT_Light_Flags)0x0020 /* relevant to area lights only */
00919 #   define      LF_BACK                 (HT_Light_Flags)0x0040 /* relevant to area lights only */
00920 #   define      LF_BOTH                 (HT_Light_Flags)0x0080 /* relevant to area lights only */
00921 
00922 typedef char    HT_Spot_Light_Size_Units;
00923 #   define      LSU_NOT_VALID   (HT_Spot_Light_Size_Units)0
00924 #   define      LSU_FRU         (HT_Spot_Light_Size_Units)1
00925 #   define      LSU_DEGREES     (HT_Spot_Light_Size_Units)2
00926 #   define      LSU_PERCENT     (HT_Spot_Light_Size_Units)3
00927 
00928 
00929 struct HT_Light {
00930     HT_GHeader          h;
00931 #define Light_DISTANT           (HT_Type)0
00932 #define Light_POINT             (HT_Type)1
00933 #define Light_SPOT              (HT_Type)2
00934 #define Light_AREA              (HT_Type)3
00935     HT_Type             type;
00936     HT_Light_Flags      flags;
00937 
00938     union {
00939         struct {
00940             HT_Point            original;
00941             HT_Vector           direction;
00942         }       distant;
00943         struct {
00944             HT_Point            position;
00945         }       point;
00946         struct {
00947             HT_Point            position;
00948             HT_Point            target;
00949             float               outer,
00950                                 inner;
00951             float               concentration;
00952             HT_Spot_Light_Size_Units outer_units,
00953                                 inner_units;
00954 
00955             float               final_inner,
00956                                 final_outer;
00957         }       spot;
00958         struct {
00959             int                 count;
00960             HT_Point            *points;
00961             HT_Light_Flags      bright_side;
00962         }       area;
00963     }   l;
00964 };
00965 
00966 struct HT_Missing_Geometry {
00967     HT_GHeader          h;
00968     HT_Type_Flags               which;
00969 };
00970 
00971 
00972 struct HT_String_Cursor {
00973     HT_GHeader          h;      /* owned by HT_Text */
00974     int                 row,
00975                         column;
00976 };
00977 
00978 struct HT_Font_Name {
00979     HT_Font_Name                *next;
00980 
00981     /* (generic font name values (GFN_XXX) are defined in Hoops.h, for
00982      *  driver convenience) */
00983     HT_Generic_Font_Name        generic;
00984     HT_Name                     specified;
00985 };
00986 
00987 struct HT_Text_Region {
00988     int                 count;
00989     HT_Point            points[4];      /* 2 or 4 */
00990 #define Text_Region_WINDOW      0x01    /* default object */
00991 #define Text_Region_RELATIVE    0x02    /* default absolute */
00992 #define Text_Region_ADJUST      0x04    /* default maintain direction */
00993 
00994 #define Text_Region_BOTTOM      0x00
00995 #define Text_Region_CENTER      0x10
00996 #define Text_Region_TOP         0x20
00997 #define Text_Region_ALIGNMENT   0x30    /* id & mask */
00998     int                 options;
00999 };
01000 
01001 
01002 typedef HT_Integer32 HT_KAttribute_Flags;
01003 
01004 #define KA_NAME             (HT_KAttribute_Flags)0x00000001
01005 #define KA_SIZE             (HT_KAttribute_Flags)0x00000002
01006 #define KA_VERTICAL_OFFSET  (HT_KAttribute_Flags)0x00000004
01007 #define KA_OMITTED          (HT_KAttribute_Flags)0x00000008
01008 #define KA_INVISIBLE        (HT_KAttribute_Flags)0x00000010
01009 #define KA_SLANT            (HT_KAttribute_Flags)0x00000020
01010 #define KA_WIDTH_SCALE      (HT_KAttribute_Flags)0x00000040
01011 #define KA_ROTATION         (HT_KAttribute_Flags)0x00000080
01012 #define KA_ROTATION_FIXED   (HT_KAttribute_Flags)0x00000100
01013 
01014 struct HT_KAttribute {
01015 
01016     HT_Font_Name        *names;
01017 
01018     float               size;
01019     float               vertical_offset;
01020     float               slant;
01021     float               rotation;
01022     float               width_scale;
01023 
01024     HT_KAttribute_Flags flags_mask, flags_value;
01025 
01026     HT_Font_Size_Units  size_units;
01027     HT_Font_Size_Units  vertical_offset_units;
01028 };
01029 
01030 struct HT_Text {
01031     HT_GHeader          h;
01032     HT_Point            whereabouts;
01033     int                 count;
01034     int                 lines;
01035     HT_Karacter *       karacters;
01036     HT_KAttribute *     kattribute;
01037     int                 kattribute_count;
01038     int *               counts;
01039     HT_Karacter **      starts;
01040         
01041     HT_String_Cursor *  cursors;
01042     HT_Text_Region *    region;
01043 
01044     HT_Text_Encoding    encoding;
01045 };
01046 
01047 
01048 /* careful: matching array in show_onefloats */
01049 #   define      GSU_UNQUALIFIED (HT_Generic_Size_Units)0
01050 #   define      GSU_ORU         (HT_Generic_Size_Units)1
01051 #   define      GSU_SRU         (HT_Generic_Size_Units)2
01052 #   define      GSU_WRU         (HT_Generic_Size_Units)3
01053 #   define      GSU_PIXELS      (HT_Generic_Size_Units)4
01054 #   define      GSU_POINTS      (HT_Generic_Size_Units)5
01055 #   define      GSU_PERCENT     (HT_Generic_Size_Units)6
01056 #   define      GSU_SCALE       (HT_Generic_Size_Units)7
01057 #   define      GSU_WORLD       (HT_Generic_Size_Units)8
01058 /* if more are added to this list, show_onefloats will need updating */
01059 
01060 struct HT_Generic_Size {
01061     float                       value;
01062     HT_Generic_Size_Units       units;
01063 };
01064 
01065 
01066 
01067 #define HT_Param_Source         char
01068 #define HK_PS_UNSPECIFIED       (HT_Param_Source)0
01069 #define HK_PS_U                 (HT_Param_Source)1
01070 #define HK_PS_UV                (HT_Param_Source)2
01071 #define HK_PS_UVW               (HT_Param_Source)3
01072 #define HK_PS_OBJECT            (HT_Param_Source)4
01073 #define HK_PS_WORLD             (HT_Param_Source)5
01074 #define HK_PS_SURFACE_NORMAL    (HT_Param_Source)6
01075 #define HK_PS_REFLECTION_VECTOR (HT_Param_Source)7
01076 #define HK_PS_NATURAL_UV        (HT_Param_Source)8
01077 #define HK_PS_LOCAL_PIXELS      (HT_Param_Source)9
01078 #define HK_PS_OUTER_PIXELS      (HT_Param_Source)10
01079 #define HK_PS_LOCAL_WINDOW      (HT_Param_Source)11
01080 #define HK_PS_OUTER_WINDOW      (HT_Param_Source)12
01081 #define HK_PS_TRANSMISSION_VECTOR (HT_Param_Source)13
01082 #define HK_PS_SPHERE            (HT_Param_Source)14
01083 #define HK_PS_CYLINDER          (HT_Param_Source)15
01084 #define HK_PS_PHYSICAL_REFLECTION (HT_Param_Source)16
01085 
01086 #define HT_Texture_Layout       char
01087 #define HK_TL_UNSPECIFIED       (HT_Param_Source)0
01088 #define HK_TL_RECTILINEAR       (HT_Param_Source)1
01089 #define HK_TL_SPHERICAL         (HT_Param_Source)2
01090 #define HK_TL_HEMISPHERICAL     (HT_Param_Source)3
01091 #define HK_TL_CUBIC_FACES       (HT_Param_Source)4
01092 
01093 #define HT_Tiling_Style         char
01094 #define HK_TS_REPEAT            (HT_Tiling_Style)0
01095 #define HK_TS_CLAMP             (HT_Tiling_Style)1
01096 #define HK_TS_MIRROR            (HT_Tiling_Style)2
01097 
01098 #define HT_Filter               char
01099 #define HK_FILTER_NONE          (HT_Filter)0
01100 #define HK_FILTER_BILINEAR      (HT_Filter)1
01101 #define HK_FILTER_TRILINEAR     (HT_Filter)2
01102 #define HK_FILTER_MIPMAP        (HT_Filter)3
01103 #define HK_FILTER_SUMED_AREAS   (HT_Filter)4
01104 #define HK_FILTER_GAUSSIAN      (HT_Filter)5
01105 #define HK_FILTER_STOCHASTIC    (HT_Filter)6
01106 #define HK_FILTER_ANISOTROPIC   (HT_Filter)7
01107 
01108 #define HT_Channel              char
01109 #define HK_CHAN_NONE            (HT_Channel)0
01110 #define HK_CHAN_RED             (HT_Channel)1
01111 #define HK_CHAN_GREEN           (HT_Channel)2
01112 #define HK_CHAN_BLUE            (HT_Channel)3
01113 #define HK_CHAN_ALPHA           (HT_Channel)4
01114 #define HK_CHAN_ZERO            (HT_Channel)5
01115 #define HK_CHAN_ONE             (HT_Channel)6
01116 #define HK_CHAN_LUMINANCE       (HT_Channel)7
01117 
01118 typedef HT_Integer32 HT_Texture_Flags;
01119 #define TF_NONE                 (HT_Texture_Flags)0x00000000
01120 #define TF_PARAM_SOURCE         (HT_Texture_Flags)0x00000001
01121 #define TF_PARAM_OFFSET         (HT_Texture_Flags)0x00000002
01122 #define TF_TRANSFORM            (HT_Texture_Flags)0x00000004
01123 #define TF_TILING               (HT_Texture_Flags)0x00000008
01124 #define TF_SOURCE               (HT_Texture_Flags)0x00000010
01125 #define TF_INTERPOLATION_FILTER (HT_Texture_Flags)0x00000020
01126 #define TF_DECIMATION_FILTER    (HT_Texture_Flags)0x00000040
01127 #define TF_RED_CHAN_MAPPING     (HT_Texture_Flags)0x00000080
01128 #define TF_GREEN_CHAN_MAPPING   (HT_Texture_Flags)0x00000100
01129 #define TF_BLUE_CHAN_MAPPING    (HT_Texture_Flags)0x00000200
01130 #define TF_ALPHA_CHAN_MAPPING   (HT_Texture_Flags)0x00000400
01131 #define TF_ANY_CHANNEL_REMAPPED (HT_Texture_Flags)0x00000780
01132 #define TF_VALUE_SCALE          (HT_Texture_Flags)0x00000800
01133 #define TF_CACHING              (HT_Texture_Flags)0x00001000
01134 #define TF_IMPLICIT_DEFINITION  (HT_Texture_Flags)0x00002000
01135 #define TF_TRANSPARENCY         (HT_Texture_Flags)0x00004000
01136 #define TF_TEXTURE_LAYOUT       (HT_Texture_Flags)0x00008000
01137 #define TF_UNEVALUATED          (HT_Texture_Flags)0x00010000
01138 #define TF_MODULATE             (HT_Texture_Flags)0x00020000
01139 #define TF_DOWNSAMPLE           (HT_Texture_Flags)0x00040000
01140 #define TF_DECAL                (HT_Texture_Flags)0x00080000
01141 #define TF_SOURCE_CALLBACK      (HT_Texture_Flags)0x00100000
01142 #define TF_CHECKERBOARD         (HT_Texture_Flags)0x00200000
01143 #define TF_ACTIVATED            (HT_Texture_Flags)0x00400000
01144 #define TF_CUBEMAP              (HT_Texture_Flags)0x00800000
01145 
01146 #define TBF_NONE                (HT_Texture_Flags)0x00000000
01147 #define TBF_MODULATE            (HT_Texture_Flags)0x00000001
01148 #define TBF_NO_DOWNSAMPLE       (HT_Texture_Flags)0x00000002
01149 #define TBF_DECAL               (HT_Texture_Flags)0x00000004
01150 #define TBF_NO_CACHING          (HT_Texture_Flags)0x00000008
01151 #define TBF_MODULATE_COLOR      (HT_Texture_Flags)0x00000010
01152 #define TBF_SOURCE_CALLBACK     (HT_Texture_Flags)0x00000020
01153 
01154 /* used in HI_Determine_Image_Format */
01155 struct HT_Image_Options {
01156     HT_Name name; /*remember to free this*/
01157     HT_Image_Format format;
01158     bool use_bytes;
01159     bool localized;
01160     bool texture;
01161     HT_Generic_Size width_size;
01162     HT_Generic_Size height_size;
01163     bool down_sample;
01164 };
01165 
01166 #define Image_BY_REFERENCE      DB_TYPE_SPECIFIC(1)
01167 
01168 typedef unsigned int HT_Image_Flags;
01169 #define IF_NONE         (HT_Image_Flags)0x00000000
01170 #define IF_TRANSPARENCY (HT_Image_Flags)0x00000001
01171 #define IF_POWER_OF_TWO (HT_Image_Flags)0x00000002
01172 #define IF_BORDERED     (HT_Image_Flags)0x00000004
01173 #define IF_MIRRORED     (HT_Image_Flags)0x00000008
01174 #define IF_FORCED_ALPHA (HT_Image_Flags)0x00000010
01175 #define IF_MIPMAPS      (HT_Image_Flags)0x00000020
01176 #define IF_REMAPPED     (HT_Image_Flags)0x00000040
01177 #define IF_BLOCK        (HT_Image_Flags)0x00000080
01178 #define IF_BEST_QUALITY (HT_Image_Flags)0x00000100
01179 #define IF_NO_DATA      (HT_Image_Flags)0x00000200
01180 #define IF_WAS_TARGET   (HT_Image_Flags)0x00000400
01181 #define IF_FORCED_BLOCK (HT_Image_Flags)0x00000800
01182 #define IF_FORCED_GRAY  (HT_Image_Flags)0x00001000
01183 #define IF_INSET        (HT_Image_Flags)0x00002000
01184 #define IF_ANISOTROPIC  (HT_Image_Flags)0x00004000
01185 #define IF_NON_MIPMAPS  (HT_Image_Flags)0x00008000
01186 #define IF_DL_ONLY      (HT_Image_Flags)0x00010000
01187 #define IF_NO_DOWNSAMPLE (HT_Image_Flags)0x00020000
01188 
01189 struct HT_Image {
01190     HT_GHeader          h;
01191     HT_Image_Format     format, source_format;
01192     char                bytes_per_pixel, source_bytes_per_pixel;
01193     int                 row_bytes;
01194     HT_Point            whereabouts;
01195     int                 width, height;
01196     void const          * const *rasters;
01197     void const          * const *inverted_rasters;
01198     void const          *block;
01199 
01200     HT_Color_Index      color_max;
01201     HT_Integer32        transparent_pixels;
01202     HT_Integer32        forced_alpha;
01203 
01204     HT_Name             name;
01205 
01206     /* texture related stuff */
01207     HT_Display_List     *display_lists;
01208     HT_Texture  *texture;
01209     HT_Image        *next;
01210     HT_Image        *prev;
01211 
01212     HT_Generic_Size     width_size, height_size;
01213 
01214     HT_Channel          red_channel_source;
01215     HT_Channel          green_channel_source;
01216     HT_Channel          blue_channel_source;
01217     HT_Channel          alpha_channel_source;
01218     float               scale_min, scale_max;
01219     float               attenuation;
01220     HT_RGB              attenuation_color;
01221 
01222     HT_Image_Flags      flags;
01223 };
01224 
01225 struct HT_Texture_Matrix {
01226     HT_AHeader          h;
01227     HT_Matrix           matrix;
01228 };
01229 
01230 struct HT_Texture_Defs {
01231     HT_AHeader          h;
01232     HT_Texture          **textures;
01233     HT_Integer32        *keys;
01234     int                 count;
01235 };
01236 
01237 struct HT_Texture {
01238     struct {
01239         HT_Texture              *next, **backlink;
01240         HT_Anything     *owner;
01241         HT_Utility              utility;
01242         HT_Type                 type;
01243         HT_Database_Flags       dbflags;
01244     }                   h;
01245     HT_Name             name;
01246     HT_Name_List        *source_names;
01247     HT_Integer32        key;
01248     HT_Callback_Name    *lookup;
01249     HT_Image            *image;
01250     HT_Image            *active_image;
01251     HT_Segment          *transform_style_segment;
01252     HT_Texture_Matrix   *transform_cache;
01253     HT_Texture  **cubemap_textures;
01254     float               scale_min;
01255     float               scale_max;
01256     float               attenuation;
01257     HT_RGB              attenuation_color;
01258     HT_Texture_Flags    flags;
01259     HT_Texture_Flags    bool_flags;
01260     int                 param_offset;
01261     HT_Param_Source     param_source;
01262     HT_Texture_Layout   layout;
01263     HT_Tiling_Style     tiling_style;
01264     HT_Filter           interpolation_filter;
01265     HT_Filter           decimation_filter;
01266     HT_Channel          red_channel_source;
01267     HT_Channel          green_channel_source;
01268     HT_Channel          blue_channel_source;
01269     HT_Channel          alpha_channel_source;
01270 
01271 };
01272 
01273 struct HT_Stencil_Bitmap {
01274     HT_Stencil_Bitmap           *next;
01275     unsigned char               *bitmap;
01276     HT_Texture                  *txr;
01277     unsigned char               *rle;
01278     unsigned int                rle_n;
01279     int                         width;
01280     int                         height;
01281     int                         advance_x;
01282     int                         advance_y;
01283     int                         x_orig;
01284     int                         y_orig;
01285     int                         x_correct;
01286     int                         y_correct;
01287     int                         bytes_per_row;
01288     int                         bits_per_pixel;
01289     int                         id;
01290     float                       rotation;
01291     float                       width_scale;
01292 };
01293 
01294 
01295 struct HT_Grid {
01296     HT_GHeader          h;
01297     int                 type;
01298 #define Grid_QUADRILATERAL      1
01299 #define Grid_RADIAL             2
01300     HT_Point            origin,
01301                         ref1,
01302                         ref2;
01303     int                 count1,
01304                         count2;
01305 
01306     HT_Vector           basis1,
01307                         basis2;
01308     HT_Plane            plane;
01309     int                 divisions;              /* radial only */
01310 
01311 };
01312 
01313 
01316 union HT_Geometry {
01317     HT_GHeader          h;
01318 
01319     HT_Circle           circle;
01320     HT_Circular_Arc     circular_arc;
01321     HT_Cutting_Plane    cutting_plane;
01322     HT_Ellipse          ellipse;
01323     HT_Elliptical_Arc   elliptical_arc;
01324     HT_Grid             grid;
01325     HT_Image            image;
01326     HT_Polyline         line;
01327     HT_Light            light;
01328     HT_Marker           marker;
01329 /*  HT_Mesh             mesh; */
01330     HT_Missing_Geometry missing_geometry;
01331     HT_Polyline         polyline;
01332     HT_Polygon          polygon;
01333     HT_Contour          contour;
01334 /*  HT_Shell            shell; */
01335     HT_String_Cursor    string_cursor;
01336     HT_Text             text;
01337     HT_NURBS_Curve      nurbs_curve; 
01338 /*  HT_NURBS_Surface    nurbs_surface; */
01339     HT_Cylinder         cylinder; 
01340     HT_PolyCylinder     polycylinder; 
01341     HT_Sphere           sphere;
01342 
01343     HT_Geometry_Reference   reference;
01344 };
01345 
01346 
01347 struct HT_Modelling_Matrix {
01348     HT_AHeader          h;
01349     HT_Matrix           matrix;
01350 };
01351 
01352 struct HT_Window {
01353     HT_AHeader          h;
01354     HT_Rectangle        bounds,
01355                         redraw,
01356                         old_redraw;
01357 };
01358 
01359 
01360 #define Clip_Region_WORLD_SPACE 0x01
01361 
01362 struct HT_Clip_Region {
01363     HT_AHeader          h;
01364     HT_Point            *points;
01365     int                 count;
01366     int                 flags;
01367 };
01368 
01369 
01370 struct HT_Visibility {
01371     HT_AHeader          h;
01372     HT_Type_Flags       mask,
01373                         value;
01374     struct {
01375         HT_Type_Flags   mask,
01376                         value;
01377     }                   cut_geometry;
01378     struct {
01379         HT_Type_Flags   mask,
01380                         value;
01381     }                   shadow;
01382 };
01383 
01384 struct HT_Selectability {
01385     HT_AHeader          h;
01386     HT_Type_Flags       mask,
01387                         up,
01388                         down,
01389                         still_up,
01390                         still_down,
01391                         even_invisible,
01392                         any_kind;
01393 };
01394 
01395 
01396 typedef HT_Integer32 HT_Window_Frame_Flags;
01397 
01398 #define WFF_OFF                         (HT_Window_Frame_Flags)0x00000001
01399 #define WFF_ON                          (HT_Window_Frame_Flags)0x00000002
01400 #define WFF_SINGLE                      (HT_Window_Frame_Flags)0x00000004
01401 #define WFF_INSET                       (HT_Window_Frame_Flags)0x00000008
01402 #define WFF_IMPLICIT_INSET              (HT_Window_Frame_Flags)0x00000010
01403 #define WFF_DECORATIVE                  (HT_Window_Frame_Flags)0x00000020
01404 #define WFF_ATTRIBUTE_MASK              (HT_Window_Frame_Flags)0x0000FFFF
01405 
01406 /* these are used by the window rendition */
01407 #define WFF_WINDOW_WAS_REDRAWN          (HT_Window_Frame_Flags)0x00010000
01408 #define WFF_UPPER_WINDOW_WAS_REDRAWN    (HT_Window_Frame_Flags)0x00020000
01409 #define WFF_BYPASS_Z_CLEAR              (HT_Window_Frame_Flags)0x80000000
01410 
01411 struct HT_Window_Frame {
01412     HT_AHeader              h;
01413     HT_Window_Frame_Flags   flags;
01414 };
01415 
01416 struct HT_Handedness {
01417     HT_AHeader          h;
01418     int                 which;
01419 #   define      RIGHT_HANDED    0
01420 #   define      LEFT_HANDED     1
01421 };
01422 
01423 struct HT_Streaming_Mode {
01424     HT_AHeader          h;
01425     HT_Segment          *end_of_stream;
01426     bool            flag;
01427 };
01428 
01429 struct HT_Driver_Options {
01430     HT_AHeader          h;
01431     HT_Drivo_Flags      values_mask,
01432                         values_set;
01433 
01434 #   define    Drivo_DEBUG                       (HT_Drivo_Flags)0x00000001
01435 #   define    Drivo_DISABLE_INPUT               (HT_Drivo_Flags)0x00000002
01436 #   define    Drivo_FIRST_COLOR                 (HT_Drivo_Flags)0x00000004
01437 #   define    Drivo_FIXED_COLORS                (HT_Drivo_Flags)0x00000008
01438 #   define    Drivo_LANDSCAPE_ORIENTATION       (HT_Drivo_Flags)0x00000010
01439 #   define    Drivo_LIGHT_SCALING               (HT_Drivo_Flags)0x00000020
01440 #   define    Drivo_COLOR_CONSOLIDATION         (HT_Drivo_Flags)0x00000040
01441 #   define    Drivo_LOCATER_TRANSFORM           (HT_Drivo_Flags)0x00000080
01442 #   define    Drivo_NUMBER_OF_COLORS            (HT_Drivo_Flags)0x00000100
01443 #   define    Drivo_PEN_SPEED                   (HT_Drivo_Flags)0x00000200
01444 #   define    Drivo_PHYSICAL_SIZE               (HT_Drivo_Flags)0x00000400
01445 #   define    Drivo_SELECTION_PROXIMITY         (HT_Drivo_Flags)0x00000800
01446 #   define    Drivo_SUBSCREEN                   (HT_Drivo_Flags)0x00001000
01447 #   define    Drivo_TITLE                       (HT_Drivo_Flags)0x00002000
01448 #   define    Drivo_UPDATE_INTERRUPTS           (HT_Drivo_Flags)0x00004000
01449 #   define    Drivo_USE_COLORMAP_ID             (HT_Drivo_Flags)0x00008000
01450 #   define    Drivo_USE_WINDOW_ID               (HT_Drivo_Flags)0x00010000
01451 #   define    Drivo_USE_WINDOW_ID2              (HT_Drivo_Flags)0x00020000
01452 #   define    Drivo_WRITE_MASK                  (HT_Drivo_Flags)0x00040000
01453 #   define    Drivo_OUTPUT_FORMAT               (HT_Drivo_Flags)0x00080000
01454 #   define    Drivo_HARDCOPY_RESOLUTION         (HT_Drivo_Flags)0x00100000
01455 #   define    Drivo_TEXT_PREFERENCE             (HT_Drivo_Flags)0x00200000
01456 #   define    Drivo_USE_CLIP_OVERRIDE           (HT_Drivo_Flags)0x00400000
01457 #   define    Drivo_QMOVES_PREFERENCE           (HT_Drivo_Flags)0x00800000
01458 #   define    Drivo_SHADOW_PREFERENCE           (HT_Drivo_Flags)0x01000000
01459 #   define    Drivo_FALLBACK_FONT               (HT_Drivo_Flags)0x02000000
01460 #   define    Drivo_ANTI_ALIAS_REQUESTED        (HT_Drivo_Flags)0x04000000
01461 #   define    Drivo_EXIT_UPDATE                 (HT_Drivo_Flags)0x08000000
01462 #   define    Drivo_DISPLAY_INTERRUPTED_UPDATE  (HT_Drivo_Flags)0x10000000
01463 #   define    Drivo_FONT_TABLE                  (HT_Drivo_Flags)0x20000000
01464 
01465 #   define    Drivo_FLAG                        (HT_Drivo_Flags)0x80000000
01466 
01467     HT_Drivo_Flags      flags_mask,
01468                         flags_set;
01469 
01470 #   define    Drivo_BACKING_STORE               (HT_Drivo_Flags)0x80000001
01471 #   define    Drivo_BORDER                      (HT_Drivo_Flags)0x80000002
01472 #   define    Drivo_CONTROL_AREA                (HT_Drivo_Flags)0x80000004
01473 #   define    Drivo_DOUBLE_BUFFERING            (HT_Drivo_Flags)0x80000008
01474 #   define    Drivo_FORCE_BLACK_AND_WHITE       (HT_Drivo_Flags)0x80000010
01475 #   define    Drivo_GAMMA_CORRECTION            (HT_Drivo_Flags)0x80000020
01476 #   define    Drivo_SUBSCREEN_CREATING          (HT_Drivo_Flags)0x80000040
01477 #   define    Drivo_SUBSCREEN_MOVING            (HT_Drivo_Flags)0x80000080
01478 #   define    Drivo_SUBSCREEN_RESIZING          (HT_Drivo_Flags)0x80000100
01479 #   define    Drivo_SUBSCREEN_STRETCHING        (HT_Drivo_Flags)0x80000200
01480 #   define    Drivo_SPECIAL_EVENTS              (HT_Drivo_Flags)0x80000400
01481 #   define    Drivo_STEREO_REQUESTED            (HT_Drivo_Flags)0x80000800
01482 #   define    Drivo_STENCIL_REQUESTED           (HT_Drivo_Flags)0x80001000
01483 #   define    Drivo_ABSOLUTE_LINE_WEIGHT        (HT_Drivo_Flags)0x80002000
01484 #   define    Drivo_VERTEX_SPOTLIGHT            (HT_Drivo_Flags)0x80004000
01485 #   define    Drivo_FORCE_GRAYSCALE             (HT_Drivo_Flags)0x80008000
01486 #   define    Drivo_DISPLAY_STATS               (HT_Drivo_Flags)0x80010000
01487 #   define    Drivo_DISPLAY_TIME_STATS          (HT_Drivo_Flags)0x80020000
01488 #   define    Drivo_FULLSCREEN                  (HT_Drivo_Flags)0x80040000
01489 #   define    Drivo_ISOLATED                    (HT_Drivo_Flags)0xC0000000
01490 
01491     int             debug_count;
01492     int             *debug_array;
01493     int             debug;
01494     int             first_color;
01495     int             fixed_colors[3];
01496     float           light_scaling;
01497     float           color_consolidation;
01498     float           locater_transform[3][2];
01499     int             number_of_colors;
01500     float           pen_speed;
01501     HT_XY           physical_size;
01502     float           selection_proximity;
01503     HT_Rectangle    subscreen;
01504     HT_Name         title;
01505     int             anti_alias_samples;
01506     HT_Font_Name    *fallback_font_names;
01507     HT_Font_Name    *font_table;
01508 
01509 #   define      Interrupt_NONE          0
01510 #   define      Interrupt_NORMAL        1
01511 #   define      Interrupt_UNRESTRICTED  3
01512     int             update_interrupts;
01513 
01514 #   define      Display_Interrupted_Update_NONE     0
01515 #   define      Display_Interrupted_Update_OFF      1
01516 #   define      Display_Interrupted_Update_ON       2
01517     int             display_interrupted_update_mode;
01518 
01519 
01520     POINTER_SIZED_INT use_colormap_ID;
01521     POINTER_SIZED_INT use_window_ID;
01522     POINTER_SIZED_INT use_window_ID2;
01523     POINTER_SIZED_INT use_clip_override;
01524 
01525     int             write_mask;
01526     HT_Name_List    *output_format;
01527 
01528 #   define    Drivo_Landscape_OFF               0
01529 #   define    Drivo_Landscape_ON                1
01530 #   define    Drivo_Landscape_ENVIRONMENT       2
01531     int             landscape_option;
01532 
01533 #   define    Drivo_Text_Bitmap                 0
01534 #   define    Drivo_Text_Outline                1
01535 #   define    Drivo_Text_Default                2
01536     int             text_preference;
01537 
01538 #   define    Drivo_Input_ENABLED       0
01539 #   define    Drivo_Input_DISABLED      1
01540 #   define    Drivo_Input_ALL_DISABLED  2
01541     int             disable_input_option;
01542 
01543 #   define    Drivo_QMoves_Default      0
01544 #   define    Drivo_QMoves_XOR          1
01545 #   define    Drivo_QMoves_Overlay      2 /* can mean "overlay" or "accumulation" */
01546 #   define    Drivo_QMoves_Spriting     3
01547 #   define    LAST_QMOVES               Drivo_QMoves_Spriting
01548     int             qmoves_preferences[LAST_QMOVES+1];
01549 
01550 #   define    Drivo_Shadow_Software     0
01551 #   define    Drivo_Shadow_Hardware     1
01552 #   define    Drivo_Shadow_Image        2
01553 #   define    Drivo_Shadow_OGL          3
01554 #   define    Drivo_Shadow_SoftOGL      4
01555     int             shadow_preference; 
01556 
01557     bool            subscreen_by_program;
01558 
01559     int             hardcopy_resolution;
01560 
01561 
01562     void *          set_clear_debug;
01563 
01564     HT_Callback_Name        *exit_update_name;
01565 };
01566 
01567 
01568 /* just XOR a bunch of stuff together */
01569 #define GENERATE_NURBS_SURFACE_CHECKSUM(configs) \
01570     ((configs).checksum = \
01571        ((configs).trim_curve_budget) ^\
01572        ((configs).surface_budget << 16) ^\
01573        ((*(const int *)(&(configs).max_trim_curve_deviation))) ^\
01574        ((*(const int *)(&(configs).max_facet_deviation)>>2)) ^\
01575        ((*(const int *)(&(configs).max_facet_angle)>>4)) ^\
01576        ((*(const int *)(&(configs).max_facet_width)>>6))\
01577     )
01578 
01579 struct HT_NURBS_Curve_Control {
01580         int                     budget,
01581                                 continued_budget;
01582         float                   max_deviation,
01583                                 max_angle,
01584                                 max_length;
01585         bool                view_dependent;
01586 };
01587 
01588 
01589 struct HT_NURBS_Surface_Tessellation_Configs {
01590     int     checksum;
01591     float   max_trim_curve_deviation;   /* normalized [0..1] parametric space */
01592     int     trim_curve_budget;          /* point_count */
01593     float   max_facet_deviation;        /* object space */
01594     float   max_facet_angle;            /* degrees */
01595     float   max_facet_width;            /* normalized [0..1] parametric space */
01596     int     surface_budget;             /* point count */
01597 };
01598 
01599 
01600 
01601 
01602 struct HT_Heuristics {
01603     HT_AHeader          h;
01604     HT_Heuristics_Flags mask,
01605                         value;
01606 #   define      Heur_NONE                       (HT_Heuristics_Flags)0x00000000
01607 #   define      Heur_CLIPPING                   (HT_Heuristics_Flags)0x00000001
01608 #   define      Heur_TRANSFORMATIONS            (HT_Heuristics_Flags)0x00000002
01609 #   define      Heur_INTERSECTING_POLYGONS      (HT_Heuristics_Flags)0x00000004
01610 #   define      Heur_BACKPLANE_CULL             (HT_Heuristics_Flags)0x00000008
01611 #   define      Heur_CONCAVE_POLYGONS           (HT_Heuristics_Flags)0x00000010
01612 #   define      Heur_POLYGON_CROSSINGS          (HT_Heuristics_Flags)0x00000020
01613 #   define      Heur_RIGHT_HANDED_POLYGONS_ONLY (HT_Heuristics_Flags)0x00000040
01614 #   define      Heur_LEFT_HANDED_POLYGONS_ONLY  (HT_Heuristics_Flags)0x00000080
01615 #   define      Heur_INCREMENTAL_UPDATES        (HT_Heuristics_Flags)0x00000100
01616 #   define      Heur_HIDDEN_SURFACES            (HT_Heuristics_Flags)0x00000200
01617 #   define      Heur_MEMORY_PURGE               (HT_Heuristics_Flags)0x00000400
01618 #   define      Heur_PARTIAL_ERASE              (HT_Heuristics_Flags)0x00000800
01619 #   define      Heur_QMOVES_OVERLAY             (HT_Heuristics_Flags)0x00001000
01620 #   define      Heur_QMOVES_SPRITING            (HT_Heuristics_Flags)0x00002000
01621 #   define      Heur_QMOVES_XOR                 (HT_Heuristics_Flags)0x00004000
01622 #   define      Heur_RELATED_SELECTION_LIMIT    (HT_Heuristics_Flags)0x00008000
01623 #   define      Heur_INTERNAL_SELECTION_LIMIT   (HT_Heuristics_Flags)0x00010000
01624 #   define      Heur_SELECTION_SORTING          (HT_Heuristics_Flags)0x00020000
01625 #   define      Heur_CULLING                    (HT_Heuristics_Flags)0x00040000
01626 #   define      Heur_VISUAL_SELECTION           (HT_Heuristics_Flags)0x00080000
01627 #   define      Heur_EXCLUDE_BOUNDING           (HT_Heuristics_Flags)0x00100000
01628 #   define      Heur_DETAIL_SELECTION           (HT_Heuristics_Flags)0x00200000
01629 #   define      Heur_ORDERED_DRAWING            (HT_Heuristics_Flags)0x00400000
01630 #   define      Heur_ORDERED_UNIT               (HT_Heuristics_Flags)0x00800000
01631 #   define      Heur_ORDERED_OPTIONS            (HT_Heuristics_Flags)0x01000000
01632 #   define      Heur_ORDERED_GRID               (HT_Heuristics_Flags)0x02000000
01633 #   define      Heur_STATIC_SCENE               (HT_Heuristics_Flags)0x04000000
01634 #   define      Heur_SELECTION_LEVEL            (HT_Heuristics_Flags)0x08000000
01635 
01636 #   define      Heur_ANY_POLYGON_HANDEDNESS (HT_Heuristics_Flags)(Heur_RIGHT_HANDED_POLYGONS_ONLY|Heur_LEFT_HANDED_POLYGONS_ONLY)
01637 #   define      Heur_ANY_QUICK_MOVES        (HT_Heuristics_Flags)(Heur_QMOVES_OVERLAY|Heur_QMOVES_SPRITING|Heur_QMOVES_XOR)
01638 #   define      Heur_ANY_ORDERED_MODE       (HT_Heuristics_Flags)(Heur_ORDERED_DRAWING|Heur_ORDERED_UNIT|Heur_ORDERED_GRID)
01639 
01640 
01641 #   define      Heur_Culling_NONE               0x0000
01642 #   define      Heur_Culling_VIEW_FRUSTUM       0x0001
01643 #   define      Heur_Culling_EXTENT             0x0002
01644 #   define      Heur_Culling_OBSCURATION        0x0004
01645 #   define      Heur_Culling_VECTOR             0x0008
01646 #   define      Heur_Culling_EXTENT_MODE        0x0100
01647 #   define      Heur_Culling_VERTEX_THRESHOLD   0x0200
01648 #   define      Heur_Culling_VECTOR_TOLERANCE   0x0400
01649 #   define      Heur_Culling_ANY                0x070F
01650 
01651 #   define      Heur_MAX_EXTENT_MODE_NONE           0
01652 #   define      Heur_MAX_EXTENT_MODE_DOT            1
01653 #   define      Heur_MAX_EXTENT_MODE_BOUNDING       2
01654 #   define      Heur_MAX_EXTENT_MODE_DEFER          3
01655     struct {
01656         short       mask,
01657                     value;
01658         /* segment-level culling vector */
01659         HT_Vector   vector;
01660         float       vector_tolerance;
01661         /* maximum extent culling */
01662         int         maximum_extent;
01663         int         vertex_threshold;
01664         int         maximum_extent_mode;
01665         /* obscuration culling */
01666         int         pixel_threshold;
01667         bool    use_octree;
01668     }           culling;
01669 
01670     int         related_selection_limit;
01671     struct {
01672         int         shell,
01673                     polyline;
01674 #       define      Heur_Internal_SHELL         0x01
01675 #       define      Heur_Internal_POLYLINE      0x02
01676         short       mask,
01677                     value;
01678     }           internal_selection_limit;
01679 
01680 #   define      Heur_Order_WORLD_VOLUME         0
01681 #   define      Heur_Order_SCREEN_EXTENT        1
01682 #   define      Heur_Order_DISTANCE             2
01683 #   define      Heur_Order_DIVERGENCE           3
01684 #   define      Heur_Order_DENSITY              4
01685 #   define      Heur_Order_PRIORITY             5
01686 #   define      Heur_Order_COUNT                6
01687 
01688 #   define      Heur_OBSCURATION_CULLING_PIXEL_THRESHOLD    0
01689 #   define      Heur_OBSCURATION_CULLING_USE_OCTREE         1
01690 
01691     int         ordered_weight_mask;
01692     float       ordered_weights[Heur_Order_COUNT];
01693 
01694 #   define      Heur_Selection_Level_ENTITY         0
01695 #   define      Heur_Selection_Level_SEGMENT        1
01696 #   define      Heur_Selection_Level_SEGMENT_TREE   2
01697 #   define      Heur_Selection_Level_COLLECTING     3   /* internal */
01698     int         selection_level;
01699 };
01700 
01701 
01702 /* equivalent of 'a |= b' for structures */
01703 #define BLOCK_SET(_a_, _b_, _insize_) {                                         \
01704         int                     _size_ = _insize_;                      \
01705         unsigned char           *_ap_ = (unsigned char *)_a_;           \
01706         unsigned char const     *_bp_ = (unsigned char const *)_b_;     \
01707         while (_size_ >= 4) {                                                   \
01708             *(unsigned int *)_ap_ |= *(unsigned int const *)_bp_;               \
01709             _ap_ += 4;  _bp_ += 4;  _size_ -= 4;                                \
01710         }                                                                       \
01711         while (_size_-- > 0) *_ap_++ |= *_bp_++;                                \
01712     }
01713 /* equivalent of 'a &= b' for structures */
01714 #define BLOCK_MASK(_a_, _b_, _insize_) {                                        \
01715         int                     _size_ = _insize_;                      \
01716         unsigned char           *_ap_ = (unsigned char *)_a_;           \
01717         unsigned char const     *_bp_ = (unsigned char const *)_b_;     \
01718         while (_size_ >= 4) {                                                   \
01719             *(unsigned int *)_ap_ &= *(unsigned int const *)_bp_;               \
01720             _ap_ += 4;  _bp_ += 4;  _size_ -= 4;                                \
01721         }                                                                       \
01722         while (_size_-- > 0) *_ap_++ &= *_bp_++;                                \
01723     }
01724 /* equivalent of 'a &= ~b' for structures */
01725 #define BLOCK_CLEAR(_a_, _b_, _insize_) {                                       \
01726         int                     _size_ = _insize_;                      \
01727         unsigned char           *_ap_ = (unsigned char *)_a_;           \
01728         unsigned char const     *_bp_ = (unsigned char const *)_b_;     \
01729         while (_size_ >= 4) {                                                   \
01730             *(unsigned int *)_ap_ &= ~*(unsigned int const *)_bp_;              \
01731             _ap_ += 4;  _bp_ += 4;  _size_ -= 4;                                \
01732         }                                                                       \
01733         while (_size_-- > 0) *_ap_++ &= ~*_bp_++;                               \
01734     }
01735 
01736 
01737 struct HT_Attribute_Lock {
01738     HT_Attribute_Mask       attributes;
01739     HT_Color_Object          color;
01740     HT_Material_Components    materials[Color_Type_MATERIAL_COUNT];
01741     HT_Type_Flags            visibility;
01742     HT_Rendo_Flags           rendering_options;
01743 };
01744 
01745 
01746 struct HT_Rendering_Options {
01747     HT_AHeader          h;
01748 
01749 #   define Rendo_SUBTYPE_MASK                   (HT_Rendo_Flags)0xC0000000
01750 #   define Rendo_SUBTYPE_COMPLEX                (HT_Rendo_Flags)0x00000000
01751 #   define Rendo_SUBTYPE_SIMPLE                 (HT_Rendo_Flags)0x40000000
01752 #   define Rendo_SUBTYPE_INTERPOLATION          (HT_Rendo_Flags)0x80000000
01753 #   define Rendo_SUBTYPE_UNUSED                 (HT_Rendo_Flags)0xC0000000
01754 
01755     HT_Rendo_Flags      complex_mask,
01756                         complex_value;
01757 #   define Rendo_ATTRIBUTE_LOCK                 (HT_Rendo_Flags)0x00000001
01758 #   define Rendo_BUFFER_OPTIONS                 (HT_Rendo_Flags)0x00000002
01759 #   define Rendo_CUT_GEOMETRY_OPTIONS           (HT_Rendo_Flags)0x00000004
01760 #   define Rendo_GEOMETRY_OPTIONS               (HT_Rendo_Flags)0x00000008
01761 #   define Rendo_HIDDEN_LINE_OPTIONS            (HT_Rendo_Flags)0x00000010
01762 #   define Rendo_LOD_OPTIONS                    (HT_Rendo_Flags)0x00000020
01763 #   define Rendo_MATRIX_OVERRIDE                (HT_Rendo_Flags)0x00000040
01764 #   define Rendo_NURBS_CURVE_OPTIONS            (HT_Rendo_Flags)0x00000080
01765 #   define Rendo_NURBS_SURFACE_OPTIONS          (HT_Rendo_Flags)0x00000100
01766 #   define Rendo_SIMPLE_SHADOW_OPTIONS          (HT_Rendo_Flags)0x00000200
01767 #   define Rendo_TESSELLATION_OPTIONS           (HT_Rendo_Flags)0x00000400
01768 #   define Rendo_TRANSPARENCY_OPTIONS           (HT_Rendo_Flags)0x00000800
01769 #   define Rendo_ANTIALIAS_OPTIONS              (HT_Rendo_Flags)0x00001000
01770 #   define Rendo_SHADOW_MAP_OPTIONS             (HT_Rendo_Flags)0x00002000
01771 #   define Rendo_SIMPLE_REFLECTION_OPTIONS      (HT_Rendo_Flags)0x00004000
01772 #   define Rendo_RADIOSITY_OPTIONS              (HT_Rendo_Flags)0x10000000
01773 #   define Rendo_RAY_TRACE_OPTIONS              (HT_Rendo_Flags)0x20000000
01774 
01775 /* 'LOD' looks like a high-level option, but is stored under lod_options, so any unique value here */
01776 #   define Rendo_LOD                            (HT_Rendo_Flags)0x00000021
01777 
01778     HT_Rendo_Flags      simple_mask,
01779                         simple_value;
01780 #   define Rendo_UNUSED_1                       (HT_Rendo_Flags)0x40000001
01781 #   define Rendo_ATMOSPHERIC_ATTENUATION        (HT_Rendo_Flags)0x40000002
01782 #   define Rendo_DEBUG                          (HT_Rendo_Flags)0x40000004
01783 #   define Rendo_DEPTH_RANGE                    (HT_Rendo_Flags)0x40000008
01784 #   define Rendo_DISPLAY_LISTS                  (HT_Rendo_Flags)0x40000010
01785 #   define Rendo_FACE_DISPLACEMENT              (HT_Rendo_Flags)0x40000020
01786 #   define Rendo_FORCE_GRAYSCALE                (HT_Rendo_Flags)0x40000040
01787 #   define Rendo_HSR_ALGORITHM                  (HT_Rendo_Flags)0x40000080
01788 #   define Rendo_IMAGE_SCALE                    (HT_Rendo_Flags)0x40000100
01789 #   define Rendo_IMAGE_TINT                     (HT_Rendo_Flags)0x40000200
01790 #   define Rendo_LOCAL_VIEWER                   (HT_Rendo_Flags)0x40000400
01791 #   define Rendo_LOCAL_CUTTING_PLANES           (HT_Rendo_Flags)0x40000800
01792 #   define Rendo_PERSPECTIVE_CORRECTION         (HT_Rendo_Flags)0x40001000
01793 #   define Rendo_QUANTIZATION                   (HT_Rendo_Flags)0x40002000
01794 #   define Rendo_STEREO                         (HT_Rendo_Flags)0x40004000
01795 #   define Rendo_STEREO_SEPARATION              (HT_Rendo_Flags)0x40008000
01796 #   define Rendo_TECHNOLOGY                     (HT_Rendo_Flags)0x40010000
01797 #   define Rendo_GENERAL_DISPLACEMENT           (HT_Rendo_Flags)0x40020000
01798 #   define Rendo_JOIN_CUTOFF_ANGLE              (HT_Rendo_Flags)0x40040000
01799 #   define Rendo_STEREO_DISTANCE                (HT_Rendo_Flags)0x40080000
01800 #   define Rendo_SCREEN_RANGE                   (HT_Rendo_Flags)0x40100000
01801 
01802     HT_Rendo_Flags      interpolation_mask,
01803                         interpolation_value;
01804 #   define Rendo_PHONG_EDGES                        (HT_Rendo_Flags)0x80000001
01805 #   define Rendo_GOURAUD_EDGES                      (HT_Rendo_Flags)0x80000002
01806 #   define Rendo_PHONG_FACES                        (HT_Rendo_Flags)0x80000004
01807 #   define Rendo_GOURAUD_FACES                      (HT_Rendo_Flags)0x80000008
01808 #   define Rendo_LIGHTING_INTERPOLATION             (HT_Rendo_Flags)0x8000000F
01809 
01810 #   define Rendo_COLOR_INTERPOLATION_MARKERS        (HT_Rendo_Flags)0x80000010
01811 #   define Rendo_COLOR_INTERPOLATION_EDGES          (HT_Rendo_Flags)0x80000020
01812 #   define Rendo_COLOR_INTERPOLATION_FACES          (HT_Rendo_Flags)0x80000040
01813 #   define Rendo_COLOR_INTERPOLATION                (HT_Rendo_Flags)0x80000070
01814 
01815 #   define Rendo_COLOR_INDEX_INTERPOLATION_EDGES    (HT_Rendo_Flags)0x80000100
01816 #   define Rendo_COLOR_INDEX_INTERPOLATION_FACES    (HT_Rendo_Flags)0x80000200
01817 #   define Rendo_COLOR_INDEX_INTERPOLATION          (HT_Rendo_Flags)0x80000300
01818 #   define Rendo_COLOR_INDEX_FACE_ISOLINES          (HT_Rendo_Flags)0x80000400
01819 
01820 #   define Rendo_TEXTURE_INTERPOLATION_MARKERS      (HT_Rendo_Flags)0x80001000
01821 #   define Rendo_TEXTURE_INTERPOLATION_EDGES        (HT_Rendo_Flags)0x80002000
01822 #   define Rendo_TEXTURE_INTERPOLATION_FACES        (HT_Rendo_Flags)0x80004000
01823 #   define Rendo_TEXTURE_INTERPOLATION              (HT_Rendo_Flags)0x80007000
01824 
01825 
01826 
01827     HT_Quantization_Flags       quantization;
01828 #   define Quantization_THRESHOLD               (HT_Quantization_Flags)0x01
01829 #   define Quantization_DITHER                  (HT_Quantization_Flags)0x02
01830 #   define Quantization_ERROR_DIFFUSION         (HT_Quantization_Flags)0x04
01831 
01832     HT_Technology_Flags technology;
01833 #   define      Technology_STANDARD                     (HT_Technology_Flags)0x01
01834 #   define      Technology_RADIOSITY                    (HT_Technology_Flags)0x02
01835 #   define      Technology_RAY_TRACE                    (HT_Technology_Flags)0x04
01836 #   define      Technology_SOFTWARE_FRAME_BUFFER        (HT_Technology_Flags)0x08
01837 
01838     HT_Rendo_Debug      debug;
01839 #   define      Rendo_Debug_SHOW_RADIOSITY_MESH         (HT_Rendo_Debug)0x00000002
01840 #   define      Rendo_Debug_NO_PAINTERS_PANELLING       (HT_Rendo_Debug)0x00000008
01841 #   define      Rendo_Debug_NO_TRANSPARENT_FULL_REDRAW  (HT_Rendo_Debug)0x00000010
01842 #   define      Rendo_Debug_NO_TRANSPARENCY_TREE        (HT_Rendo_Debug)0x00000020
01843 #   define      Rendo_Debug_SHOW_DEPTH_BUFFER           (HT_Rendo_Debug)0x00000040
01844 #   define      Rendo_Debug_UNUSED_1                    (HT_Rendo_Debug)0x00000080
01845     /*
01846      * The following are for performance testing.
01847      * When set, they short-out specific rendering routines with a "return".
01848      */
01849 #   define      Rendo_Debug_NO_WRITE_FRAME_BUFFER       (HT_Rendo_Debug)0x00010000
01850 #   define      Rendo_Debug_NO_RASTERIZE                (HT_Rendo_Debug)0x00020000
01851 #   define      Rendo_Debug_NO_CULL_AND_PACK            (HT_Rendo_Debug)0x00040000
01852 #   define      Rendo_Debug_NO_SHADING                  (HT_Rendo_Debug)0x00080000
01853 #   define      Rendo_Debug_NO_TRANSFORM_AND_CLIP       (HT_Rendo_Debug)0x00100000
01854 #   define      Rendo_Debug_NO_RENDER                   (HT_Rendo_Debug)0x00200000
01855 #   define      Rendo_Debug_NO_SCREEN_CLEAR             (HT_Rendo_Debug)0x00400000
01856 #   define      Rendo_Debug_NO_Z_CLEAR                  (HT_Rendo_Debug)0x00800000
01857 #   define      Rendo_Debug_NO_PAINTER_CULL             (HT_Rendo_Debug)0x01000000
01858 
01859 
01860     /* some flags for display list invalidation */
01861 #   define Rendo_TRISTRIP_MASK (Rendo_PHONG_FACES|Rendo_GOURAUD_FACES|Rendo_TEXTURE_INTERPOLATION_FACES)
01862 #   define Rendo_POLYEDGE_MASK (Rendo_PHONG_EDGES|Rendo_GOURAUD_EDGES|Rendo_TEXTURE_INTERPOLATION_EDGES)
01863 #   define Rendo_POLYMARKER_MASK (Rendo_COLOR_INTERPOLATION_MARKERS)
01864 #   define Rendo_ISOLINES_MASK ((Rendo_COLOR_INDEX_INTERPOLATION_FACES|Rendo_COLOR_INDEX_FACE_ISOLINES) & ~Rendo_SUBTYPE_MASK)
01865 
01866     HT_Integer32                face_displacement;
01867     HT_Integer32                general_displacement;
01868 
01869     HT_Attribute_Lock   lock_mask, lock_value;
01870 
01871     HT_HSR_Algorithm    hsr_algorithm;
01872 #   define      HSR_NONE                        (HT_HSR_Algorithm)0x0000
01873 #   define      HSR_HARDWARE_Z_BUFFER           (HT_HSR_Algorithm)0x0001
01874 #   define      HSR_PAINTERS                    (HT_HSR_Algorithm)0x0002
01875 #   define      HSR_SOFTWARE_Z_BUFFER           (HT_HSR_Algorithm)0x0004
01876 #   define      HSR_SPIDER_WEB                  (HT_HSR_Algorithm)0x0008
01877 #   define      HSR_Z_SORT_ONLY                 (HT_HSR_Algorithm)0x0010
01878 #   define      HSR_PRIORITY                    (HT_HSR_Algorithm)0x0020
01879 #   define      HSR_HIDDEN_LINE                 (HT_HSR_Algorithm)0x0040
01880 #   define      HSR_Z_HIDDEN_LINE               (HT_HSR_Algorithm)0x0080
01881 #   define      HSR_DEPTH_PEELING               (HT_HSR_Algorithm)0x0100    /* only for transparency */
01882 #   define      HSR_TRANSPARENT                 (HT_HSR_Algorithm)0x8000
01883 
01884     struct {
01885 #   define      Antialias_OFF               0x0000
01886 #   define      Antialias_SCREEN            0x0001
01887 #   define      Antialias_TEXT              0x0002
01888 #   define      Antialias_LINES             0x0004      
01889 #   define      Antialias_ON                (Antialias_SCREEN|Antialias_TEXT|Antialias_LINES)   
01890 #   define      Antialias_EVERYTHING        (Antialias_SCREEN|Antialias_TEXT|Antialias_LINES)
01891 
01892         short                   mask,
01893                                 value;
01894     }                   antialias_options;  
01895 
01896     struct {
01897         short                   mask,
01898                                 value;
01899 #   define      Transparency_STYLE              0x0001
01900 #   define      Transparency_HSRA               0x0002
01901 #   define      Transparency_HARDWARE           0x0004 /* not used */
01902 #   define      Transparency_PEELING_LAYERS     0x0008
01903 #   define      Transparency_PEELING_MIN_AREA   0x0010
01904 #   define      Transparency_PEELING_OPTIONS    0x0018
01905 #   define      Transparency_ZSORT_FAST         0x0020
01906 
01907         char                    style;
01908 #   define      Transparency_STYLE_NONE             0
01909 #   define      Transparency_STYLE_BLENDING         1
01910 #   define      Transparency_STYLE_SCREEN_DOOR      2
01911 
01912         HT_HSR_Algorithm        hsr_algorithm;  /* selected types per normal hsr above */
01913 
01914         int                     peeling_layers;
01915         float                   peeling_min_area;
01916     }                   transparency_options;
01917 
01918     struct {
01919         HT_Buffer_Flags         mask,
01920                                 value;
01921 #   define      Buffer_SIZE_LIMIT               (HT_Buffer_Flags)0x01
01922 #   define      Buffer_RETENTION                (HT_Buffer_Flags)0x02
01923 #   define      Buffer_COLOR_DEPTH              (HT_Buffer_Flags)0x04
01924         int                     size_limit;
01925 
01926         int                     color_depth;
01927 #   define      Color_Depth_MATCH_DEVICE        (HT_Color_Depth)0x01
01928 #   define      Color_Depth_FULL_COLOR          (HT_Color_Depth)0x02
01929     }                   buffer_options;
01930 
01931 
01932     struct {
01933         HT_Hidden_Line_Flags    mask,
01934                                 value;
01935 #   define      Hidden_LINE_VISIBILITY          (HT_Hidden_Line_Flags)0x0001
01936 #   define      Hidden_LINE_PATTERN             (HT_Hidden_Line_Flags)0x0002
01937 #   define      Hidden_LINE_DIM_FACTOR          (HT_Hidden_Line_Flags)0x0004
01938 #   define      Hidden_LINE_FACE_DISPLACEMENT   (HT_Hidden_Line_Flags)0x0008
01939 #   define      Hidden_LINE_RENDER_FACES        (HT_Hidden_Line_Flags)0x0010
01940 #   define      Hidden_LINE_SILHOUETTE_CLEANUP  (HT_Hidden_Line_Flags)0x0020
01941 #   define      Hidden_LINE_COLOR               (HT_Hidden_Line_Flags)0x0040
01942 #   define      Hidden_LINE_WEIGHT              (HT_Hidden_Line_Flags)0x0080
01943 #   define      Hidden_LINE_IMAGE_OUTLINE       (HT_Hidden_Line_Flags)0x0100
01944 #   define      Hidden_LINE_HSR_ALGORITHM       (HT_Hidden_Line_Flags)0x0200
01945 
01946         HT_RGB                  color;
01947         HT_Name                 line_pattern_name;
01948         HT_Integer32            line_pattern_key;
01949         float                   dim_factor;
01950         float                   face_displacement;
01951         HT_Generic_Size         weight;
01952         HT_HSR_Algorithm        hsr_algorithm;  /* as normal hsr above */
01953     }                           hidden_line_options;
01954 
01955     struct {
01956 #define LOD_MAX_LEVELS 8
01957 /* generation-time options */
01958 #   define LOD_FLAGS_ON                 (HT_LOD_Flags)0x00000001
01959 #   define LOD_FLAGS_CONSERVE_MEMORY    (HT_LOD_Flags)0x00000002
01960 #   define LOD_FLAGS_TOLERANCE_FRU      (HT_LOD_Flags)0x00000004
01961 #   define LOD_FLAGS_TOLERANCE_ORU      (~(LOD_FLAGS_TOLERANCE_FRU))
01962 #   define LOD_RATIO                    (HT_LOD_Flags)0x00000008
01963 #   define LOD_MIN_TRIANGLE_COUNT       (HT_LOD_Flags)0x00000010
01964 #   define LOD_NUM_LEVELS               (HT_LOD_Flags)0x00000020
01965 #   define LOD_MAX_DEGREE               (HT_LOD_Flags)0x00000040
01966 #   define LOD_COLLAPSE_VERTICES        (HT_LOD_Flags)0x00000080
01967 #   define LOD_TOLERANCE                (HT_LOD_Flags)0x00000100  /* relates to LOD_COLLAPSE_VERTICES */
01968 #   define LOD_ALGORITHM                (HT_LOD_Flags)0x00000200
01969 #   define LOD_SEGMENT_MODE             (HT_LOD_Flags)0x00000400
01970 #   define LOD_FLAGS_PREPROCESS         (HT_LOD_Flags)0x00000800  /* old */
01971 #   define LOD_USEFULNESS_HEURISTIC     (HT_LOD_Flags)0x00001000  /* old */
01972 #   define LOD_BOUNDING                 (HT_LOD_Flags)0x00002000  /* old */
01973 #   define LOD_FLAGS_BOUNDING_CURRENT   (HT_LOD_Flags)0x00004000  /* old */
01974 #   define LOD_FLAGS_BOUNDING_EXPLICIT  (HT_LOD_Flags)0x00008000  /* old */
01975 #   define LOD_FLAGS_BOUNDING_ANY       (LOD_FLAGS_BOUNDING_CURRENT|LOD_FLAGS_BOUNDING_EXPLICIT)
01976 #   define LOD_CALCULATION_CUTOFF       (HT_LOD_Flags)0x00010000  /* old */
01977 /* draw-time options */
01978 #   define LOD_FLAGS_PHYSICAL           (HT_LOD_Flags)0x00020000
01979 #   define LOD_FLAGS_SCREEN_SPACE       (HT_LOD_Flags)0x00040000
01980 #   define LOD_FLAGS_UNSPECIFIED        (HT_LOD_Flags)0
01981 #   define LOD_FLAGS_AREA_PERCENTAGE    (HT_LOD_Flags)0x00080000
01982 #   define LOD_FLAGS_DISTANCE           (HT_LOD_Flags)0x00100000
01983 #   define LOD_FALLBACK                 (HT_LOD_Flags)0x00200000
01984 #   define LOD_CLAMP                    (HT_LOD_Flags)0x00400000
01985 #   define LOD_THRESHOLD                (HT_LOD_Flags)0x00800000
01986 
01987 #   define LOD_HEUR_TRI_DIAG_RATIO      1
01988 #   define LOD_HEUR_DIAG_RATIO          2
01989 #   define LOD_HEUR_TRI_DIAG            3
01990 #   define LOD_HEUR_DIAG                4
01991 #   define LOD_HEUR_TRI_VOL_RATIO       5
01992 #   define LOD_HEUR_VOL_RATIO           6
01993 #   define LOD_HEUR_TRI_VOL             7
01994 #   define LOD_HEUR_VOL                 8
01995 #   define LOD_HEUR_TSIZE               9
01996 
01997 #   define LOD_FALLBACK_NONE              0x01   /* draw nothing */
01998 #   define LOD_FALLBACK_BOUNDING          0x02   /* draw the bounding cuboid */
01999 #   define LOD_FALLBACK_COARSEST          0x04   /* draw the last lod in the list */
02000 #   define LOD_FALLBACK_COARSEST_NONE     0x08   /* coarsest if inexpensive, nothing otherwise */
02001 #   define LOD_FALLBACK_COARSEST_BOUNDING 0x10   /* coarsest if inexpensive, bounding otherwise */
02002 #   define LOD_FALLBACK_BOUNDING_NONE     0x20   /* bounding if off by only one level, nothing otherwise*/
02003 
02004 #   define LOD_ALGORITHM_FAST 0
02005 #   define LOD_ALGORITHM_NICE 1
02006 
02007         HT_LOD_Flags            mask,
02008                                 value;
02009         float                   ratio[LOD_MAX_LEVELS]; /* compression ratio */
02010         float                   threshold[LOD_MAX_LEVELS]; /* switch threshold */
02011         int                     min_triangle_count;
02012         int                     clamp;          /* clamp to level.  -1 if disabled */
02013         int                     num_levels;
02014         int                     max_degree;
02015         float                   tolerance;
02016         HT_Bounding             bounding;
02017         float                   cutoff[LOD_MAX_LEVELS]; /* calculation usefulness cutoff */
02018         int                     heuristic; /* usefulness heuristic (view independent) */
02019         int                     fallback; /* fallback in case we request a non-existent lod */
02020         int                     algorithm;
02021     } lod_options;
02022 
02023 
02024     struct {
02025 #define NURBS_Curve_VIEW_DEPENDENT      (HT_NURBS_Curve_Flags)0x00000001
02026 #define NURBS_Curve_BUDGET              (HT_NURBS_Curve_Flags)0x00000002
02027 #define NURBS_Curve_CONTINUED_BUDGET    (HT_NURBS_Curve_Flags)0x00000004
02028 #define NURBS_Curve_MAX_DEVIATION       (HT_NURBS_Curve_Flags)0x00000008
02029 #define NURBS_Curve_MAX_ANGLE           (HT_NURBS_Curve_Flags)0x00000010
02030 #define NURBS_Curve_MAX_LENGTH          (HT_NURBS_Curve_Flags)0x00000020
02031 
02032         HT_NURBS_Curve_Flags    mask,
02033                                 value;
02034         int                     budget;
02035         int                     continued_budget;
02036         float                   max_deviation;      /* object space */
02037         float                   max_angle;          /* degrees */
02038         float                   max_length;         /* normalized [0..1] parametric space */
02039     } nurbs_curve;
02040 
02041 
02042 #define NURBS_Surface_MAX_TRIM_CURVE_DEVIATION  (HT_NURBS_Surface_Flags)0x00000001
02043 #define NURBS_Surface_TRIM_CURVE_BUDGET         (HT_NURBS_Surface_Flags)0x00000002
02044 #define NURBS_Surface_MAX_FACET_DEVIATION       (HT_NURBS_Surface_Flags)0x00000004
02045 #define NURBS_Surface_MAX_FACET_ANGLE           (HT_NURBS_Surface_Flags)0x00000008
02046 #define NURBS_Surface_MAX_FACET_WIDTH           (HT_NURBS_Surface_Flags)0x00000010
02047 #define NURBS_Surface_BUDGET                    (HT_NURBS_Surface_Flags)0x00000020
02048     struct {
02049         HT_NURBS_Surface_Flags  mask,
02050                                 value;
02051         HT_NURBS_Surface_Tessellation_Configs configs;
02052     } nurbs_surface;
02053 
02054 #define Tessellation_CYLINDER           0x00000001
02055 #define Tessellation_SPHERE             0x00000002
02056 #define Tessellation_BASIC              (Tessellation_CYLINDER|Tessellation_SPHERE)
02057     struct {
02058         HT_Tessellation_Flags   mask;
02059         int                     cylinder[LOD_MAX_LEVELS];
02060         int                     sphere[LOD_MAX_LEVELS];
02061     } tessellation;
02062 
02063     struct {
02064         float                   hither,
02065                                 yon;
02066     }                   fog;
02067 
02068     float               stereo_separation;
02069     float               stereo_distance;
02070 
02071 #define Cut_Geometry_LEVEL              (HT_Cut_Geometry_Flags)0x00000001
02072 #define Cut_Geometry_TOLERANCE          (HT_Cut_Geometry_Flags)0x00000002
02073 #define Cut_Geometry_MATCH_COLOR        (HT_Cut_Geometry_Flags)0x00000004
02074 #define Cut_Geometry_TOL_PERCENT        (HT_Cut_Geometry_Flags)0x00000010
02075 #define Cut_Geometry_Level_SKIP         0       /* internal */
02076 #define Cut_Geometry_Level_ENTITY       1
02077 #define Cut_Geometry_Level_SEGMENT      2
02078 #define Cut_Geometry_Level_SEGMENT_TREE 3
02079 #define Cut_Geometry_Match_EXPLICIT     0
02080 #define Cut_Geometry_Match_CURRENT      1
02081 #define Cut_Geometry_Match_FIRST        2
02082 #define Cut_Geometry_Match_LAST         3
02083     struct {
02084         HT_Cut_Geometry_Flags   mask,
02085                                 value;
02086         int                     level;
02087         int                     match_color;
02088         float                   tolerance;
02089     } cut_geometry;
02090 
02091 #define Simple_Shadow_VISIBLE           (HT_Simple_Shadow_Flags)0x00000001
02092 #define Simple_Shadow_PLANE             (HT_Simple_Shadow_Flags)0x00000002
02093 #define Simple_Shadow_LIGHT             (HT_Simple_Shadow_Flags)0x00000004
02094 #define Simple_Shadow_COLOR             (HT_Simple_Shadow_Flags)0x00000008
02095 #define Simple_Shadow_OPACITY           (HT_Simple_Shadow_Flags)0x00000010
02096 #define Simple_Shadow_RESOLUTION        (HT_Simple_Shadow_Flags)0x00000020
02097 #define Simple_Shadow_SOFTNESS          (HT_Simple_Shadow_Flags)0x00000040
02098 
02099 #define Simple_Shadow_OFF               0
02100 #define Simple_Shadow_ON                1
02101 #define Simple_Shadow_AUTO              2
02102     struct {
02103         HT_Simple_Shadow_Flags  mask,
02104                                 value;
02105         HT_Plane                plane;
02106         HT_Vector               light;
02107         struct {
02108             HT_Name             name;
02109             HT_RGB              rgb;    /* g & b negative if r stores index */
02110         }                       color;
02111         float                   opacity;
02112 
02113         int                     visibility;
02114         int                     resolution;
02115         int                     blurring;
02116     } simple_shadow;
02117 
02118 #define Shadow_Map_VISIBLE          (HT_Shadow_Map_Flags)0x00000001
02119 #define Shadow_Map_JITTER           (HT_Shadow_Map_Flags)0x00000002
02120 #define Shadow_Map_RESOLUTION       (HT_Shadow_Map_Flags)0x00000004
02121 #define Shadow_Map_SAMPLES          (HT_Shadow_Map_Flags)0x00000008
02122 
02123     struct {
02124         HT_Shadow_Map_Flags     mask,
02125                                 value;
02126         int                     resolution;
02127         int                     samples;
02128     } shadow_map;
02129 
02130 #define Simple_Reflection_VISIBLE       (HT_Simple_Reflection_Flags)0x00000001
02131 #define Simple_Reflection_PLANE         (HT_Simple_Reflection_Flags)0x00000002
02132 #define Simple_Reflection_OPACITY       (HT_Simple_Reflection_Flags)0x00000004
02133 #define Simple_Reflection_FADING        (HT_Simple_Reflection_Flags)0x00000008
02134 #define Simple_Reflection_ATTENUATION   (HT_Simple_Reflection_Flags)0x00000010
02135 #define Simple_Reflection_SOFTNESS      (HT_Simple_Reflection_Flags)0x00000020
02136 
02137     struct {
02138         HT_Simple_Reflection_Flags  mask,
02139                                     value;
02140         HT_Plane                    plane;
02141         float                       opacity;
02142         float                       hither, yon;
02143         int                         blurring;
02144     } simple_reflection;
02145 
02146 
02147     float                       depth_range[2];
02148     HT_Rectangle                screen_range;
02149     float                       image_scale[2];
02150     HT_RGB                      image_tint_color;
02151 
02152 #define Matrix_Override_CAMERA_SCALE            0x01
02153 #define Matrix_Override_CAMERA_ROTATION         0x02
02154 #define Matrix_Override_CAMERA_TRANSLATION      0x04
02155 #define Matrix_Override_CAMERA_PERSPECTIVE      0x08
02156 #define Matrix_Override_MODEL_SCALE             0x10
02157 #define Matrix_Override_MODEL_ROTATION          0x20
02158 #define Matrix_Override_MODEL_TRANSLATION       0x40
02159 
02160 #define Matrix_Override_NONE                    0x00
02161 #define Matrix_Override_CAMERA                  0x0F
02162 #define Matrix_Override_MODEL                   0x70
02163 #define Matrix_Override_SCALE                   0x11
02164 #define Matrix_Override_ROTATION                0x22
02165 #define Matrix_Override_TRANSLATION             0x44
02166 #define Matrix_Override_PERSPECTIVE             0x08
02167 #define Matrix_Override_ALL                     0x7F
02168 
02169     int                         matrix_overrides;
02170     int                         matrix_overrides_mask;
02171 
02172 #define Geometry_Options_DIHEDRAL                   0x01
02173 #define Geometry_Options_REVERSE_CYLINDER_RADII     0x02
02174 #define Geometry_Options_REVERSE_CYLINDER_COLORS    0x04
02175 #define Geometry_Options_REVERSE_CYLINDERS          0x06
02176     struct {
02177         int                     mask;
02178         int                     value;
02179         float                   hard_edge_dihedral;
02180     }                           geometry_options;
02181 
02182     struct {
02183         HT_Radiosity_Flags      mask,
02184                                 value;
02185 #   define Radiosity_CONVERGENCE_GOAL           (HT_Radiosity_Flags)0x0001
02186 #   define Radiosity_INTERIM_DISPLAY            (HT_Radiosity_Flags)0x0002
02187 #   define Radiosity_SPECIAL_EVENTS             (HT_Radiosity_Flags)0x0004
02188 #   define Radiosity_INTERNAL_SUBDIVISION       (HT_Radiosity_Flags)0x0008
02189 #   define Radiosity_ACCURACY                   (HT_Radiosity_Flags)0x0010
02190 #   define Radiosity_BOUNDARY_CONTINUITY        (HT_Radiosity_Flags)0x0020
02191 #   define Radiosity_ENERGY_PRESERVATION        (HT_Radiosity_Flags)0x0040
02192 #   define Radiosity_BRIGHTNESS                 (HT_Radiosity_Flags)0x0080
02193 #   define Radiosity_CONTRAST                   (HT_Radiosity_Flags)0x0100
02194 #   define Radiosity_INTERFERENCE_DETECT        (HT_Radiosity_Flags)0x0200
02195 #   define Radiosity_AUTOSCALE                  (HT_Radiosity_Flags)0x0400
02196 
02197         float                   goal;
02198         int                     accuracy;
02199         float                   brightness;
02200         float                   contrast;
02201         struct {
02202             float       initial,
02203                         limit,
02204                         threshold;
02205         }                       subdivision;
02206     }                   radiosity_options;
02207 
02208     struct {
02209         HT_Ray_Trace_Flags      mask,
02210                                 value;
02211 #   define Ray_Trace_SPECIAL_EVENTS             (HT_Ray_Trace_Flags)0x0001
02212 #   define Ray_Trace_SCAN_LINE_METHOD           (HT_Ray_Trace_Flags)0x0002
02213 #   define Ray_Trace_ANTI_ALIASING              (HT_Ray_Trace_Flags)0x0004
02214 #   define Ray_Trace_BOUNCE_LIMIT               (HT_Ray_Trace_Flags)0x0008
02215 #   define Ray_Trace_REQUIRED_CONTRIBUTION      (HT_Ray_Trace_Flags)0x0010
02216 #   define Ray_Trace_DISPLAY_STYLE              (HT_Ray_Trace_Flags)0x0020
02217 #   define Ray_Trace_BLOCKING                   (HT_Ray_Trace_Flags)0x0040
02218 
02219         struct {
02220             HT_Ray_Trace_Flags  mask;
02221 #   define Ray_Strategy_SUPER_SAMPLE            (HT_Ray_Trace_Flags)0x01
02222             int                 super_sample;
02223         }               anti_aliasing;
02224         int             bounce_limit;
02225         int             blocking;
02226         float           required_contribution;
02227         HT_Ray_Trace_Flags      display_style;
02228 #   define Ray_Display_INTERLACED               (HT_Ray_Trace_Flags)0x00
02229 #   define Ray_Display_SEQUENTIAL               (HT_Ray_Trace_Flags)0x01
02230 #   define Ray_Display_GRID                     (HT_Ray_Trace_Flags)0x02
02231 #   define Ray_Display_RECURSIVE                (HT_Ray_Trace_Flags)0x03
02232 #   define Ray_Display_TYPES                    (HT_Ray_Trace_Flags)0x03
02233 #   define Ray_Display_FILL                     (HT_Ray_Trace_Flags)0x04
02234     }                   ray_trace_options;
02235 
02236     int                 join_cutoff_angle;
02237 
02238 #   define Display_List_NONE                    0
02239 #   define Display_List_GEOMETRY                1
02240 #   define Display_List_SEGMENT                 2
02241 #   define Display_List_SEGMENT_TREE            3
02242     int             display_list_mode;
02243 
02244 
02245     void *      set_clear_debug;
02246 };
02247 
02248 typedef HT_Integer32 HT_Font_Flags;
02249 
02250 #define FF_NAME                 (HT_Font_Flags)0x00000001
02251 #define FF_SIZE                 (HT_Font_Flags)0x00000002
02252 #define FF_SIZE_TOLERANCE       (HT_Font_Flags)0x00000004
02253 #define FF_TRANSFORM            (HT_Font_Flags)0x00000008
02254 #define FF_ROTATION             (HT_Font_Flags)0x00000010
02255 #define FF_WIDTH_SCALE          (HT_Font_Flags)0x00000020
02256 #define FF_EXTRA_SPACE          (HT_Font_Flags)0x00000040
02257 #define FF_SLANT                (HT_Font_Flags)0x00000080
02258 #define FF_GREEKING_LIMIT       (HT_Font_Flags)0x00000100
02259 #define FF_LINE_SPACING         (HT_Font_Flags)0x00000200
02260 #define FF_EVEN_SPACING         (HT_Font_Flags)0x00000400
02261 #define FF_OUTLINE              (HT_Font_Flags)0x00000800
02262 #define FF_UNDERLINE            (HT_Font_Flags)0x00001000
02263 #define FF_STRIKETHROUGH        (HT_Font_Flags)0x00002000
02264 #define FF_OVERLINE             (HT_Font_Flags)0x00004000
02265 #define FF_FOLLOW_PATH          (HT_Font_Flags)0x00008000
02266 #define FF_UNIFORM_SPACING      (HT_Font_Flags)0x00010000
02267 #define FF_FILL_EDGES           (HT_Font_Flags)0x00020000
02268 #define FF_BOLD                 (HT_Font_Flags)0x00040000
02269 #define FF_ITALIC               (HT_Font_Flags)0x00080000
02270 #define FF_RENDERER             (HT_Font_Flags)0x00100000
02271 #define FF_GREEKING_MODE        (HT_Font_Flags)0x00200000
02272 #define FF_PREFERENCE           (HT_Font_Flags)0x00400000
02273 
02274 typedef char    HT_Font_Renderer, HT_Font_Greeking_Mode, HT_Font_Preference;
02275 
02276 struct HT_Text_Font {
02277     HT_AHeader          h;
02278 
02279     HT_Font_Name        *names;
02280 
02281     float               size;
02282     float               size_tolerance;
02283     float               extra_space;
02284     float               greeking_limit;
02285     float               rotation;
02286     float               width_scale;
02287     float               line_spacing;
02288     float               slant;
02289     
02290     HT_Font_Flags       flags_mask, flags_value;
02291 
02292     float               renderer_cutoff;
02293     float               preference_cutoff;
02294 
02295     /* (put all the "char" items at the end of the structure) */
02296 
02297     HT_Font_Transform   transform;      /* choose one */
02298 
02299 #define FR_DEFAULT      (HT_Font_Renderer)0
02300 #define FR_DRIVER       (HT_Font_Renderer)1
02301 #define FR_TRUETYPE     (HT_Font_Renderer)2
02302 #define FR_DEFINED      (HT_Font_Renderer)3
02303     HT_Font_Renderer    renderers[2];
02304 
02305     HT_Font_Preference  preferences[2];
02306 
02307     HT_Font_Size_Units  size_units;
02308     HT_Font_Size_Units  size_tolerance_units;
02309     HT_Font_Size_Units  extra_space_units;
02310     HT_Font_Size_Units  greeking_limit_units;
02311     HT_Font_Size_Units  renderer_cutoff_units;
02312     HT_Font_Size_Units  preference_cutoff_units;
02313 
02314 #define FGM_NONE        (HT_Font_Greeking_Mode)0
02315 #define FGM_LINES       (HT_Font_Greeking_Mode)1
02316 #define FGM_BOX         (HT_Font_Greeking_Mode)2
02317     HT_Font_Greeking_Mode   greeking_mode;
02318 };
02319 
02320 
02321 
02322 
02323 #define Color_FINDEX            (HT_Type)0
02324 #define Color_NORMAL            (HT_Type)1
02325 #define Color_GENERAL           (HT_Type)2
02326 
02327 struct HT_Color_Header {
02328     HT_Color_List *next;
02329     void                *driver_data;
02330     HT_Color_Object     objects;
02331     HT_Type             type;
02332 };
02333 
02334 struct HT_Color_Findex {
02335     HT_Color_Header             h;
02336     HT_Color_Float_Index        value;
02337 };
02338 
02339 struct HT_Color_Normal {
02340     HT_Color_Header             h;
02341     HT_RGB                      rgb;
02342     HT_Name                     name;
02343 };
02344 
02345 struct HT_Color_General {
02346     HT_Color_Header             h;
02347     HT_Named_Material           material;
02348     HT_Name                     name;
02349 };
02350 
02351 union HT_Color_List {
02352     HT_Color_Header             h;
02353     HT_Color_Findex             findex;
02354     HT_Color_Normal             normal;
02355     HT_Color_General            general;
02356 };
02357 
02358 
02359 
02360 struct HT_Color {
02361     HT_AHeader          h;
02362     HT_Color_Object     objects,
02363                         changed;
02364     HT_Color_List       *colors;
02365 };
02366 
02367 
02368 
02369 
02370 struct HT_Color_Map {
02371     HT_AHeader                  h;
02372     int                         length;
02373     HT_Named_Material           *materials;
02374     void                        *driver_data;
02375 
02376     HT_Material_Components      component_summary;
02377 };
02378 
02379 
02380 struct HT_Text_Path {
02381     HT_AHeader          h;
02382     HT_Vector           value;
02383 };
02384 
02385 
02386 #define Camera_TRANSFORM_TESTED    DB_TYPE_SPECIFIC(1)
02387 
02388 struct HT_Camera {
02389     HT_AHeader          h;
02390     HT_Point            position,
02391                         target;         /* may be == position */
02392     HT_Vector           up_vector;      /* normalized */
02393     float               field_width,
02394                         field_height;           /* (may be zero) */
02395 
02396 #   define      Projection_PERSPECTIVE  0
02397 #   define      Projection_ORTHOGRAPHIC 1
02398 #   define      Projection_STRETCHED    2
02399     int                 projection;
02400     float               obliquity_around_y,
02401                         obliquity_around_x;
02402     float               local_near_limit;
02403     float const *       current_near_limit;
02404 
02405     /* derived info... */
02406     HT_Vector           eye,            /* target - position, normalized */
02407                         up_cross_eye;   /* normalized */
02408     float               eye_distance,   /* may be zero */
02409                         field_width_tangent, /* field / eye_distance; always good */
02410                         field_height_tangent;
02411     float               aspect;
02412     HT_Matrix           positioning_matrix,     /* filled in by Cam-to-Trans */
02413                         projection_matrix,      /* filled in by Cam-to-Trans */
02414                         complete_matrix;        /* filled in by Cam-to-Trans */
02415 };
02416 
02417 
02418 struct HT_Callback_List {
02419     HT_Callback_List        *next;
02420     /* Note: 0 is used for an error return by the parsing routines,
02421      * so start these numbers at 1. Also: The error-checking depends
02422      * on these values being contiguous.
02423      */
02424 #   define      CBT_FIRST               1
02425 #   define      CBT_DRAW_DC_MARKER              (HT_Callback_Type)CBT_FIRST
02426 #   define      CBT_DRAW_DC_EDGE                (HT_Callback_Type)3
02427 #   define      CBT_DRAW_DC_FACE                (HT_Callback_Type)4
02428 
02429 #   define      CBT_DRAW_DC_COLORIZED_MARKER    (HT_Callback_Type)5
02430 #   define      CBT_DRAW_DC_COLORIZED_FACE      (HT_Callback_Type)6
02431 
02432 #   define      CBT_DRAW_DC_LINE                (HT_Callback_Type)7
02433 #   define      CBT_DRAW_DC_COLORIZED_LINE      (HT_Callback_Type)8
02434 #   define      CBT_DRAW_DC_GOURAUD_LINE        (HT_Callback_Type)9
02435 #   define      CBT_DRAW_DC_RESHADED_LINE       (HT_Callback_Type)10
02436 #   define      CBT_DRAW_DC_TRIANGLE            (HT_Callback_Type)11
02437 #   define      CBT_DRAW_DC_COLORIZED_TRIANGLE  (HT_Callback_Type)12
02438 #   define      CBT_DRAW_DC_GOURAUD_TRIANGLE    (HT_Callback_Type)13
02439 #   define      CBT_DRAW_DC_RESHADED_TRIANGLE   (HT_Callback_Type)14
02440 
02441 #   define      CBT_DRAW_DC_TEXT_STROKES        (HT_Callback_Type)15
02442 #   define      CBT_DRAW_DC_TEXT_AREAS          (HT_Callback_Type)16
02443 
02444 #   define      CBT_DRAW_WINDOW                 (HT_Callback_Type)17
02445 #   define      CBT_DRAW_WINDOW_FRAME           (HT_Callback_Type)18
02446 
02447 #   define      CBT_DRAW_TEXT                   (HT_Callback_Type)19
02448 
02449 #   define      CBT_DRAW_3D_MARKER              (HT_Callback_Type)20
02450 #   define      CBT_DRAW_3D_POLYLINE            (HT_Callback_Type)21
02451 #   define      CBT_DRAW_3D_POLYGON             (HT_Callback_Type)22
02452 #   define      CBT_DRAW_3D_TEXT                (HT_Callback_Type)23
02453 #   define      CBT_DRAW_3D_POLYEDGE            (HT_Callback_Type)24
02454 #   define      CBT_DRAW_3D_POLYMARKER          (HT_Callback_Type)25
02455 #   define      CBT_DRAW_3D_TRISTRIP            (HT_Callback_Type)26
02456 #   define      CBT_DRAW_3D_GEOMETRY            (HT_Callback_Type)27
02457 
02458 #   define      CBT_DRAW_3D_TEXT_STROKES        (HT_Callback_Type)28
02459 #   define      CBT_DRAW_3D_TEXT_AREAS          (HT_Callback_Type)29
02460 
02461 #   define      CBT_DRAW_SEGMENT                (HT_Callback_Type)30
02462 #   define      CBT_DRAW_SEGMENT_TREE           (HT_Callback_Type)31
02463 
02464 #   define      CBT_SELECT_3D_MARKER            (HT_Callback_Type)32
02465 #   define      CBT_SELECT_3D_POLYLINE          (HT_Callback_Type)33
02466 #   define      CBT_SELECT_3D_POLYGON           (HT_Callback_Type)34
02467 #   define      CBT_SELECT_3D_TEXT              (HT_Callback_Type)35
02468 #   define      CBT_SELECT_3D_GEOMETRY          (HT_Callback_Type)36
02469 #   define      CBT_SELECT_TEXT                 (HT_Callback_Type)37
02470 
02471 #   define      CBT_SELECT_WINDOW               (HT_Callback_Type)38
02472 
02473 #   define      CBT_SELECT_SEGMENT              (HT_Callback_Type)39
02474 #   define      CBT_SELECT_SEGMENT_TREE         (HT_Callback_Type)40
02475 #   define      CBT_DRAW_3D_POLYHEDRON          (HT_Callback_Type)41
02476 
02477 #   define      CBT_DRIVER_STARTUP              (HT_Callback_Type)42
02478 #   define      CBT_DRIVER_SHUTDOWN             (HT_Callback_Type)43
02479 
02480 #   define      CBT_DRAW_DC_CUT_LINE            (HT_Callback_Type)44
02481 
02482 #   define      CBT_HLR_POLYLINE                (HT_Callback_Type)45
02483 #   define      CBT_HLR_MARKER                  (HT_Callback_Type)46
02484 #   define      CBT_HLR_HIDDEN_POLYLINE         (HT_Callback_Type)47
02485 #   define      CBT_HLR_HIDDEN_MARKER           (HT_Callback_Type)48
02486 #   define      CBT_FINISH_PICTURE              (HT_Callback_Type)49
02487 
02488 #   define      CBT_DRAW_3D_SPHERE              (HT_Callback_Type)50
02489 #   define      CBT_DRAW_3D_CYLINDER            (HT_Callback_Type)51
02490 #   define      CBT_DRAW_3D_POLYCYLINDER        (HT_Callback_Type)52
02491 #   define      CBT_DRAW_3D_CURVE               (HT_Callback_Type)53
02492 #   define      CBT_DRAW_3D_SURFACE             (HT_Callback_Type)54
02493 
02494 #   define      CBT_DRAW_DC_POLYTRIANGLE                (HT_Callback_Type)55
02495 #   define      CBT_DRAW_DC_COLORIZED_POLYTRIANGLE      (HT_Callback_Type)56
02496 #   define      CBT_DRAW_DC_GOURAUD_POLYTRIANGLE        (HT_Callback_Type)57
02497 #   define      CBT_DRAW_DC_PHONG_POLYTRIANGLE          (HT_Callback_Type)58
02498 #   define      CBT_DRAW_DC_TEXTURED_POLYTRIANGLE       (HT_Callback_Type)59
02499 #   define      CBT_DRAW_DC_POLYLINE                    (HT_Callback_Type)60
02500 #   define      CBT_DRAW_DC_COLORIZED_POLYLINE          (HT_Callback_Type)61
02501 #   define      CBT_DRAW_DC_GOURAUD_POLYLINE            (HT_Callback_Type)62
02502 #   define      CBT_DRAW_DC_PHONG_POLYLINE              (HT_Callback_Type)63
02503 #   define      CBT_DRAW_DC_TEXTURED_POLYLINE           (HT_Callback_Type)64
02504 #   define      CBT_DRAW_DC_POLYMARKER                  (HT_Callback_Type)65
02505 #   define      CBT_DRAW_DC_COLORIZED_POLYMARKER        (HT_Callback_Type)66
02506 #   define      CBT_DRAW_DC_POLYDOT                     (HT_Callback_Type)67
02507 
02508 #   define      CBT_SEGMENT_ACTIVITY_CHANGE             (HT_Callback_Type)68
02509 
02510 #   define      CBT_NO_REDRAW                           (HT_Callback_Type)69
02511 #   define      CBT_DRAW_3D_CONTOUR                     (HT_Callback_Type)70
02512 #   define      CBT_DRAW_3D_IMAGE                       (HT_Callback_Type)71
02513 #   define      CBT_DRAW_3D_GRID                        (HT_Callback_Type)72
02514 #   define      CBT_DRAW_3D_ELLIPSE                     (HT_Callback_Type)73
02515 #   define      CBT_DRAW_3D_ELLIPTICAL_ARC              (HT_Callback_Type)74
02516 #   define      CBT_DRAW_3D_ISOLINE                     (HT_Callback_Type)75
02517 #   define      CBT_DRAW_3D_INFINITE_LINE               (HT_Callback_Type)76
02518 
02519 #   define      CBT_CREATE_REGION                       (HT_Callback_Type)77
02520 #   define      CBT_SAVE_REGION                         (HT_Callback_Type)78
02521 #   define      CBT_RESTORE_REGION                      (HT_Callback_Type)79
02522 #   define      CBT_DESTROY_REGION                      (HT_Callback_Type)80
02523 
02524 #   define      CBT_LAST                                CBT_DESTROY_REGION
02525 
02526     HT_Callback_Type            type;
02527     HT_Callback_Name            *name;
02528     bool                        stealth;
02529     void const *                associated_data;
02530 };
02531 
02532 
02533 
02534 #define Font_BY_REFERENCE       DB_TYPE_SPECIFIC(1)
02535 
02536 struct HT_Font {
02537     struct {
02538         HT_Font                 *next,
02539                                 **backlink;
02540         HT_World                *owner;
02541         HT_Utility              utility;
02542         HT_Type                 type;
02543         HT_Database_Flags       dbflags;
02544     }                   h;
02545 
02546     int                 data_length;
02547     char const          *data;
02548     HT_Callback_Name    *lookup;
02549     HT_Name             name;
02550     HT_Text_Encoding    encoding;
02551     char                pad;
02552 
02553     char const          * const *stroke_defs;
02554     int                 num_stroke_defs;
02555     bool                system_font;
02556     float               aspect;
02557 };
02558 
02559 typedef void (HC_CDECL * HT_Font_Lookup_Routine)
02560                  (char const *name,char const *data,
02561                             HT_Karacter kar, char const * alter *defs);
02562 
02563 typedef void (HC_CDECL * HT_Texture_Lookup_Routine)
02564                             (int widht, 
02565                             int height,         
02566                             int current_row,
02567                             int *rwidth,
02568                             int *totalheight,
02569                             int  *rheight,
02570                             char  **defs,
02571                             int counter);
02572 
02573 
02574 #define CHAR_INDEX1(p)  UNSIGNED_CHARTOINT(*(p))
02575 #define CHAR_INDEX2(p)  ((UNSIGNED_CHARTOINT(*(p)) << 8) + \
02576                          UNSIGNED_CHARTOINT(*((p)+1)))
02577 
02578 
02579 struct HT_User_Value {
02580     HT_AHeader          h;
02581     POINTER_SIZED_INT   data;
02582 };
02583 
02584 struct HT_Metafile {
02585     HT_AHeader          h;
02586 #   define      META_READ                       (int)0x00000001
02587 #   define      META_WRITE                      (int)0x00000002
02588 #   define      META_NAME                       (int)0x00000004
02589 #   define      META_DIRECTORY                  (int)0x00000008
02590 #   define      META_COMMENT                    (int)0x00000010
02591 #   define      META_ORIGINAL_NAME              (int)0x00000020
02592 #   define      META_FOLLOW_CROSS_REFERENCES    (int)0x00000040
02593 #   define      META_OVERWRITE                  (int)0x00000080
02594 #   define      META_SAVE_STATE                 (int)0x00000100
02595 #   define      META_USE_COLOR_NAMES            (int)0x00000200
02596 #   define      META_RESTORE_STATE              (int)0x00000400
02597 #   define      META_EXTENSION_MODE             (int)0x00000800
02598 #   define      META_TRISTRIPS_MODE             (int)0x00001000
02599 #   define      META_SUPPRESS_LOD               (int)0x00002000
02600 #   define      META_SUPPRESS_CAMERA            (int)0x00004000
02601 #   define      META_RELATIVE_LIMIT             (int)0x00008000
02602 #   define      META_PREPEND_ROOT               (int)0x00010000
02603     int                 mask,
02604                         value;
02605 #   define      META_STATE_ALIASES              (int)0x0001
02606 #   define      META_STATE_COLOR_NAMES          (int)0x0002
02607 #   define      META_STATE_OPEN_ITEMS           (int)0x0004
02608 #   define      META_STATE_FONTS                (int)0x0008
02609 #   define      META_STATE_TEXTURES             (int)0x0010
02610 #   define      META_STATE_EVERYTHING           (int)0x001F
02611     int                 save_mask,
02612                         save_value,
02613                         restore_mask,
02614                         restore_value;
02615     unsigned int        relative_limit;
02616     HT_Name             name,
02617                         directory,
02618                         comment,
02619                         original_name,
02620                         metafile_root;
02621     HT_Metafile         *write_list,
02622                         **write_backlink;
02623 #   define      META_EXTMODE_AUTO               0
02624 #   define      META_EXTMODE_DISABLE            1
02625 #   define      META_EXTMODE_FORCE              2
02626     int                 filename_extension_mode;
02627 #   define      META_TRISTRIPS_AUTO             0
02628 #   define      META_TRISTRIPS_SUPPRESS         1
02629 #   define      META_TRISTRIPS_FORCE            2
02630     int                 tristrips_mode;
02631     bool            use_fresh_output_file;
02632 };
02633 
02634 typedef int             HT_Locater_Actions; /* defined further in "please.h" */
02635 typedef int             HT_Driver_Flags;         /* defined further in "please.h" */
02636 
02637 struct HT_String_List {
02638     HT_String_List      *next,
02639                         *prev;
02640     HT_KName            string;
02641 };
02642 
02643 struct HT_Driver {
02644     HT_AHeader          h;
02645     HT_Driver_Flags     dflags;
02646     HT_Driver   *driver_list,
02647                         **driver_list_backlink;
02648                         /* visible to user program */
02649     bool            (HC_CDECL * action)
02650                                 (HT_Driver *driver,
02651                                            int request);
02652     bool            (HC_CDECL * connected_action)
02653                                 (HT_Driver *driver,
02654                                            int request);
02655     void                *driver_data,
02656                         *driver_data2,  /* used only by Dynamic_Driver */
02657                         *please_parameter;  /* used only by Please_Select */
02658 
02659 #if 0
02660     HT_Instance         *instance_root; /* only if D_INSTANCE_TREE_NEEDED */
02661 #endif
02662 
02663     HT_Integer32        update_generation;
02664 
02665     struct HT_Driver_Enables {
02666         int             locater_up_enables,             /* from user calls */
02667                         locater_down_enables,
02668                         locater_still_up_enables,
02669                         locater_still_down_enables;
02670         HT_Driver       *target;                        /* from user calls */
02671         int             target_selection_enables,       /* from user calls */
02672                         cursor_target_enables;          /* from user calls */
02673         int             *button_enables;        /* array of 256 (or so)! */
02674         HT_Integer32    total_button_enables;
02675         int             string_enables;
02676         HT_String_Cursor        *string_cursor;
02677         int             string_cursor_enables;
02678         int             *valuator_enables;
02679         HT_Integer32    total_valuator_enables;
02680     }                   pending,
02681                         active;
02682 
02683     int                 string_offset;
02684     HT_KName            current_string;
02685     HT_String_List              *string_list,
02686                         *last_arrowed_string;
02687     int                 string_list_length;
02688 
02689     bool            keyboard_has_been_enabled,
02690                         valuators_have_been_enabled;
02691 
02692     HT_Locater_Actions  locatable,              /* net of the above */
02693                         selectable,             /* net of our own */
02694                         locater_has_been_enabled; /* locatable | target->selectable */
02695     struct {
02696         HT_Locater_Actions      action;
02697         float           x, y;
02698         int             status;
02699     }                   previous_location;
02700 
02701     bool            double_buffering;
02702 
02703     HT_Window           fake_window;    /* to hold redraw scope flags etc */
02704 
02705 
02706     /* for two-level drivers (SBX) */
02707     bool            (HC_CDECL * secondary_action)
02708                                 (HT_Driver alter *actor,
02709                                            int request);
02710 
02711     HT_Karacter         partial_karacter;
02712     char                karacter_parts;
02713 };
02714 
02715 
02716 struct HT_User_Options {
02717     HT_AHeader          h;
02718     HT_Option_Value     *option_list;
02719     HT_Option_Value     *koption_list;
02720     struct {
02721         HT_Indexed_User_Option  *values;
02722         HT_Integer32            count, allocated;
02723     }   by_index;
02724 };
02725 
02726 
02727 struct HT_Conditions {
02728     HT_AHeader          h;
02729     unsigned int *      masks;
02730     unsigned int *      values;
02731     int                 count;
02732 };
02733 
02734 
02735 struct HT_Glyph_Defs {
02736     HT_AHeader          h;
02737     HT_Glyph        **glyphs;
02738     HT_Integer32        *keys;
02739     int                 count;
02740 };
02741 
02742 typedef int HT_Glyph_Flags;
02743 #define GF_NONE         (HT_Glyph_Flags)0x00000000
02744 #define GF_FILL         (HT_Glyph_Flags)0x00000001
02745 #define GF_CONTRAST     (HT_Glyph_Flags)0x00000002
02746 #define GF_RGB          (HT_Glyph_Flags)0x00000004
02747 #define GF_INDEX        (HT_Glyph_Flags)0x00000008
02748 #define GF_DOT          (HT_Glyph_Flags)0x00000010
02749 #define GF_ORDERED      (HT_Glyph_Flags)0x00000020
02750 
02751 #define GF_COMPLEX_ANYBITS (GF_CONTRAST|GF_RGB|GF_INDEX)
02752 
02753 #define G_OP_DOT                1
02754 #define G_OP_TERMINATON         0
02755 #define G_OP_START_FILL         -1
02756 #define G_OP_RESTART_FILL       -2
02757 #define G_OP_END_FILL           -3
02758 #define G_OP_DRAW_ELLIPSE       -4
02759 #define G_OP_DRAW_ARC           -5
02760 #define G_OP_DRAW_INF_LINE      -6
02761 #define G_OP_DRAW_INF_RAY       -7
02762 #define G_OP_START_CONTRAST     -8 
02763 #define G_OP_START_NORMAL       -9 
02764 #define G_OP_START_RGB          -10 
02765 #define G_OP_START_INDEX        -11
02766 #define G_OP_ORDERED            -12
02767 
02768 
02769 #define GLYPH_RADIUS(glyph) (int)(glyph)->data[0]
02770 #define GLYPH_HOTSPOT_X(glyph) (int)(glyph)->data[1]
02771 #define GLYPH_HOTSPOT_Y(glyph) (int)(glyph)->data[2]
02772 #define GLYPH_OPS(glyph) (&((glyph)->data[3]))
02773 
02774 struct HT_Glyph {
02775     HT_Reference_Count  refcount;
02776     HT_Name             name;
02777     HT_Integer32        key;
02778     HT_Glyph_Flags      flags;
02779     char *              data;
02780     unsigned int        length;
02781     float               scale;
02782 };
02783 
02784 
02785 typedef int HT_Line_Style_Flags;
02786 #define LSF_NONE                (HT_Line_Style_Flags)0x00000000
02787 #define LSF_SOLID               (HT_Line_Style_Flags)0x00000001
02788 #define LSF_BITS16              (HT_Line_Style_Flags)0x00000002
02789 #define LSF_BITS32              (HT_Line_Style_Flags)0x00000004
02790 #define LSF_ABSOLUTE_LENGTH     (HT_Line_Style_Flags)0x00000008
02791 #define LSF_ABSOLUTE_WEIGHT     (HT_Line_Style_Flags)0x00000010
02792 #define LSF_PATTERN_ITEMS       (HT_Line_Style_Flags)0x00000020
02793 #define LSF_LONG_LENGTHS        (HT_Line_Style_Flags)0x00000040
02794 #define LSF_CONTRAST            (HT_Line_Style_Flags)0x00000080
02795 #define LSF_GLYPHS              (HT_Line_Style_Flags)0x00000100
02796 #define LSF_PARALLELS           (HT_Line_Style_Flags)0x00000200
02797 #define LSF_OFFSET              (HT_Line_Style_Flags)0x00000400
02798 #define LSF_MIDDLE_GLYPH        (HT_Line_Style_Flags)0x00000800
02799 #define LSF_START_GLYPH         (HT_Line_Style_Flags)0x00001000
02800 #define LSF_END_GLYPH           (HT_Line_Style_Flags)0x00002000
02801 #define LSF_FIXED_OFFSET        (HT_Line_Style_Flags)0x00004000
02802 #define LSF_WEIGHT              (HT_Line_Style_Flags)0x00008000
02803 #define LSF_FIXED_WEIGHT        (HT_Line_Style_Flags)0x00010000
02804 #define LSF_SEGMENTED           (HT_Line_Style_Flags)0x00020000
02805 #define LSF_PERCENT             (HT_Line_Style_Flags)0x00040000
02806 #define LSF_JOIN                (HT_Line_Style_Flags)0x00080000
02807 #define LSF_CAP                 (HT_Line_Style_Flags)0x00100000
02808 #define LSF_FIT_CENTER          (HT_Line_Style_Flags)0x00200000
02809 #define LSF_FIT_STRETCH         (HT_Line_Style_Flags)0x00400000
02810 #define LSF_BEVELED_OFFSET      (HT_Line_Style_Flags)0x00800000
02811 #define LSF_TRANSFORMED         (HT_Line_Style_Flags)0x01000000
02812 
02813 
02814 #define LSF_GLYPHD_ANYBITS (LSF_START_GLYPH|LSF_END_GLYPH|LSF_MIDDLE_GLYPH)
02815 
02816 #define LSF_COMPLEX_ANYBITS     (LSF_ABSOLUTE_LENGTH|LSF_ABSOLUTE_WEIGHT|LSF_GLYPHD_ANYBITS| \
02817     LSF_PATTERN_ITEMS|LSF_LONG_LENGTHS|LSF_CONTRAST|LSF_GLYPHS|LSF_WEIGHT| \
02818     LSF_PARALLELS|LSF_OFFSET|LSF_SEGMENTED|LSF_FIT_CENTER|LSF_FIT_STRETCH| \
02819     LSF_BEVELED_OFFSET|LSF_TRANSFORMED)
02820 
02821 struct HT_Line_Style_Defs {
02822     HT_AHeader                  h;
02823     HT_Line_Style       **line_styles;
02824     HT_Integer32                *keys;
02825     int                         count;
02826 };
02827 
02828 #define LSIF_NONE               (HT_Line_Style_Flags)0x00000000
02829 #define LSIF_GLYPH_INSET        (HT_Line_Style_Flags)0x00000001
02830 #define LSIF_GLYPH_FIXED        (HT_Line_Style_Flags)0x00000002
02831 #define LSIF_GLYPH_INLINE       (HT_Line_Style_Flags)0x00000004
02832 #define LSIF_GLYPH_MIRROR       (HT_Line_Style_Flags)0x00000010
02833 #define LSIF_GLYPH_ROTATION     (HT_Line_Style_Flags)0x00000020
02834 #define LSIF_STRETCH_FIXUPS     (HT_Line_Style_Flags)0x00000040
02835 #define LSIF_PERCENT_FIXUPS     (HT_Line_Style_Flags)0x00000080
02836 
02837 struct HT_Line_Style_Item {
02838     HT_Name             name;
02839     HT_Integer32        key;
02840     HT_Generic_Size     size;
02841     HT_Line_Style_Flags flags;
02842     float               rotation;
02843 };
02844 
02845 
02846 struct HT_Line_Style_Parallel {
02847 
02848     HT_Line_Style_Parallel      *next;
02849 
02850     HT_Line_Style_Flags         flags;
02851 
02852     HT_Generic_Size             offset;
02853     HT_Generic_Size             weight;
02854 
02855     HT_Line_Style_Item          *start_glyph;
02856     HT_Line_Style_Item          *middle_glyph;
02857     HT_Line_Style_Item          *end_glyph;
02858 
02859     HT_Line_Style_Item          *pattern_items;
02860     int                         *pattern;
02861 
02862     unsigned int                pattern_items_n; 
02863     unsigned int                pattern_n; 
02864 
02865 };
02866 
02867 #define LS_OP_DASH      (int)-1
02868 #define LS_OP_BLANK     (int)-2
02869 #define LS_OP_CONTRAST  (int)-3
02870 #define LS_OP_GLYPH     (int)-4
02871 
02872 struct HT_Line_Style {
02873     HT_Reference_Count          refcount;
02874     HT_Name                     name;
02875     HT_Integer32                key;
02876     HT_Line_Style_Flags         flags;
02877     HT_Name                     definition;
02878 
02879     HT_Line_Style_Parallel      *parallels;
02880     unsigned int                parallels_n; 
02881 
02882     int                         scale32;
02883     int                         scale16;
02884     unsigned HT_Integer32       bits32;
02885     unsigned short              bits16;
02886 
02887 };
02888 
02889 
02890 
02891 struct HT_Generic_Onefloat {
02892     HT_AHeader                  h;
02893     float                       value;
02894     HT_Generic_Size_Units       units;
02895 };
02896 
02897 typedef HT_Generic_Onefloat     HT_Line_Weight,
02898                                 HT_Edge_Weight,
02899                                 HT_Marker_Size,
02900                                 HT_Text_Spacing; 
02901 
02902 
02903 struct HT_Generic_Onebyte {
02904     HT_AHeader          h;
02905     short               value;
02906     short               extra;
02907 };
02908 
02909 typedef HT_Generic_Onebyte      HT_Face_Pattern,
02910                                 HT_Window_Pattern,
02911                                 HT_Text_Alignment;
02912 
02913 struct HT_Generic_Onename {
02914     HT_AHeader          h;
02915     HT_Name             name;
02916     HT_Integer32        key;
02917     short               extra;
02918 };
02919 
02920 typedef HT_Generic_Onename      HT_Marker_Symbol,
02921                                 HT_Edge_Pattern,
02922                                 HT_Line_Pattern;
02923 
02924 
02925 union HT_Attribute {
02926     HT_AHeader                  h;
02927 
02928     HT_Style                    style;
02929 
02930     HT_Generic_Onebyte          generic_onebyte;
02931     HT_Generic_Onefloat         generic_onefloat;
02932     HT_Generic_Onename          generic_onename;
02933 
02934     HT_Callback                 callback;
02935     HT_Camera                   camera;
02936     HT_Clip_Region              clip_region;
02937     HT_Color                    color;
02938     HT_Color_Map                color_map;
02939     HT_Conditions               conditions;
02940     HT_Driver                   driver;
02941     HT_Driver_Options           driver_options;
02942     HT_Edge_Pattern             edge_pattern;
02943     HT_Edge_Weight              edge_weight;
02944     HT_Face_Pattern             face_pattern;
02945     HT_Glyph_Defs               glyph_defs;
02946     HT_Handedness               handedness;
02947     HT_Heuristics               heuristics;
02948     HT_Line_Pattern             line_pattern;
02949     HT_Line_Style_Defs          line_style_defs;
02950     HT_Line_Weight              line_weight;
02951     HT_Marker_Size              marker_size;
02952     HT_Marker_Symbol            marker_symbol;
02953     HT_Metafile                 metafile;
02954     HT_Modelling_Matrix         modelling_matrix;
02955     HT_Texture_Matrix           texture_matrix;
02956     HT_Texture_Defs             texture_defs;
02957     HT_Rendering_Options        rendering_options;
02958     HT_Selectability            selectability;
02959     HT_Streaming_Mode           streaming_mode;
02960     HT_Text_Alignment           text_alignment;
02961     HT_Text_Font                text_font;
02962     HT_Text_Path                text_path;
02963     HT_Text_Spacing             text_spacing;
02964     HT_User_Options             user_options;
02965     HT_User_Value               user_value;
02966     HT_Visibility               visibility;
02967     HT_Window                   window;
02968     HT_Window_Frame             window_frame;
02969     HT_Window_Pattern           window_pattern;
02970 };
02971 
02972 
02973 
02974 #define Net_NONE                    0x00
02975 #define Net_MASK_TRANSFORM          0x01
02976 #define Net_PARTIAL_ACCUMULATION    0x02
02977 #define Net_TRACK_COLOR_MAP         0x04
02978 
02979 struct HT_Net_Attribute_Control {
02980     HT_Camera const *       camera;
02981     HT_Color_Map const *    color_map;
02982     HT_Attribute_Lock *     locks;
02983     float                   window_aspect;
02984     int                     flags;
02985 };
02986 
02987 
02988 struct HT_Color_Name {
02989     HT_Color_Name       *next;
02990     HT_Color_Def        *def;
02991     HT_Color_Name       *hash_next,
02992                         **hash_backlink;
02993     HT_Name             name;
02994     int                 degree;
02995 };
02996 
02997 struct HT_Color_Def {
02998     struct {
02999         HT_Color_Def            *next,
03000                                 **backlink;
03001         HT_World                *owner;
03002         HT_Utility              utility;
03003         HT_Type                 type;
03004         HT_Database_Flags       dbflags;
03005     }   h;
03006 
03007     HT_Color_Name               *cnames;
03008     HT_Named_Material           material;
03009     HT_Name                     definition;
03010 };
03011 
03012 struct HT_Alias {
03013     struct {
03014         HT_Alias                *next,
03015                                 **backlink;
03016         HT_World                *owner;
03017         HT_Utility              utility;
03018         HT_Type                 type;
03019 #       define                  Alias_PARENS_ADDED      DB_TYPE_SPECIFIC(1)
03020         HT_Database_Flags       dbflags;
03021     }                   h;
03022 
03023     HT_Path_Token       *def;
03024     HT_Name             name;
03025 };
03026 
03027 /* the "units" below are derived from the "suboption" table for the option */
03028 
03029 struct HT_Float_With_Units {
03030     float               value;
03031     long                units;
03032 };
03033 
03034 struct HT_Option_Value {
03035 
03036     HT_Option_Value             *next;
03037     HT_Option_Type              *type;
03038     union {
03039         bool                    *_boolean;
03040         float                   *_float;
03041         int                     *_int;
03042         HT_Name                 *_name;
03043         HT_KName                *_kname;
03044         long                    *_long;
03045         void                    *_void;
03046         POINTER_SIZED_INT       *_ptr;
03047         HT_Option_Value         *option_list; /* for recursive parsing */
03048         HT_Float_With_Units     *_float_with_units;
03049     }                   value;
03050     bool                negated;
03051     int                 actual_value_count;
03052     int                 actual_type;
03053 };
03054 
03055 /* Parse_Options types */
03056 #define OValue_NONE             0
03057 #define OValue_BOOLEAN          1
03058 #define OValue_FLOAT            2
03059 #define OValue_INT              3
03060 #define OValue_NAME             4
03061 #define OValue_STRING           5   /* same as HT_Name, except not canonical */
03062 #define OValue_LONG             6
03063 #define OValue_USER_OPTION      7
03064 #define OValue_SUBOPTIONS       8   /* recursive parse */
03065 #define OValue_FLOAT_WITH_UNITS 9
03066 #define OValue_PTR              10
03067 #define OValue_USER_KOPTION     11
03068 #define OValue_KNAME            12
03069 #define OValue_KSTRING          13
03070 #define OValue_CONDITION        14
03071 #define OValue_INT_OR_SUBOPTIONS    15  /* single int or recursive suboptions */
03072 #define OValue_FLOAT_OR_SUBOPTIONS  16  /* single float or recursive suboptions */
03073 
03074 #define OT_DONT_FREE_NAME       DB_TYPE_SPECIFIC(1)
03075 #define OT_DONT_FREE_SUBOPTIONS DB_TYPE_SPECIFIC(2)
03076 
03077 struct HT_Option_Type {
03078     struct {
03079         HT_Option_Type          *next,
03080                                 **backlink;
03081         HT_Anything             *owner; /* HT_World or HT_Option_Type */
03082         HT_Utility              utility;
03083         HT_Type                 type;
03084         HT_Database_Flags       dbflags;
03085     }                   h;
03086 
03087     long                id;
03088     HT_Name             name;
03089     int                 value_type;
03090     int                 value_count;    /* -1 if variable */
03091     bool                negatable;
03092     HT_Option_Hash_Table    *suboptions;
03093 };
03094 
03095 struct HT_Constant_Option_Type {
03096     HT_Integer32        id;
03097     HT_Name_Const       name;
03098     short               value_type;
03099     short               value_count;    /* -1 if variable */
03100     bool                negatable;
03101     const HT_Constant_Option_Table_Info *suboption_table;
03102 };
03103 
03104 /* (a c_o_t_i exists just to save having to put 'count' into the above) */
03105 struct HT_Constant_Option_Table_Info {
03106     int                                 count;
03107     const HT_Constant_Option_Type       *options;
03108 };
03109 
03110 
03111 struct HT_KOption_Type {
03112     struct {
03113         HT_KOption_Type         *next,
03114                                 **backlink;
03115         HT_Anything             *owner; /* HT_World or HT_Option_Type */
03116         HT_Utility              utility;
03117         HT_Type                 type;
03118         HT_Database_Flags       dbflags;
03119     }                   h;
03120 
03121     long                id;
03122     HT_KName            kname;
03123     int                 value_type;
03124     int                 value_count;    /* -1 if variable */
03125     bool                negatable;
03126     HT_Option_Hash_Table    *suboptions;
03127 };
03128 
03129 
03130 EXTERNAL void HC_CDECL HI_Define_Constant_Options (
03131             HT_Constant_Option_Type const *constant_table,
03132             int constant_table_size,
03133             HT_Option_Hash_Table *hash_table);
03134 
03135 #define INITIALIZE_OPTION_TABLE(_index_, _choices_)                         \
03136         do {                                                                \
03137             H_LOCK_MUTEX_LOW (OUR (hash_mutex));                            \
03138             if (OPTIONS_HASH (_index_)->table == null)                      \
03139                 HI_Define_Constant_Options (_choices_, countof (_choices_), \
03140                                             OPTIONS_HASH (_index_));        \
03141             H_UNLOCK_MUTEX_LOW (OUR (hash_mutex));                          \
03142         } while (0)
03143 
03144 #define Option_Parse_NORMAL         0x00
03145 #define Option_Parse_OPTIONS_ONLY   0x01
03146 #define Option_Parse_SINGLE         0x02
03147 #define Option_Parse_RECURSING      0x04
03148 
03149 EXTERNAL {
03150 typedef void (HC_CDECL * HT_Exit_Handler_Routine) (void);
03151 
03152 typedef void (HC_CDECL * HT_Error_Handler_Routine)
03153     (int category, int specific, int severity,
03154                int msgc, char const * const *msgv,
03155                int routinec, char const * const *routinev);
03156 
03157 } // EXTERNAL
03158 
03159 struct HT_Exit_Handler {
03160     struct {
03161         HT_Exit_Handler         *next,
03162                                 **backlink;
03163         HT_World                *owner;
03164         HT_Utility              utility;
03165         HT_Type                 type;
03166         HT_Database_Flags       dbflags;
03167     } h;
03168 
03169     HT_Exit_Handler_Routine     routine;
03170 };
03171 
03172 
03173 
03174 struct HT_Error_Handler {
03175     struct {
03176         HT_Error_Handler        *next,
03177                                 **backlink;
03178         HT_World                *owner;
03179         HT_Utility              utility;
03180         HT_Type                 type;
03181         HT_Database_Flags       dbflags;
03182     } h;
03183 
03184     HT_Error_Handler_Routine    routine;
03185 };
03186 
03187 struct HT_Wakeup {
03188     struct {
03189         HT_Wakeup               *next,
03190                                 **backlink;
03191         HT_World                *owner;
03192         HT_Utility              utility;
03193         HT_Type                 type;
03194         HT_Database_Flags       dbflags;
03195     } h;
03196 
03197     int                 enables;
03198     float               interval;
03199     HT_Time             ticks,
03200                         next_expiration;
03201     int                 events_pending;
03202 };
03203 
03204 #define EF_ALREADY_PAUSED       DB_TYPE_SPECIFIC(1)
03205 
03206 struct HT_EHeader {
03207     HT_Event        *next,
03208                         **backlink;
03209     HT_World            *owner;
03210     HT_Utility          utility;
03211     HT_Type             type;
03212     HT_Database_Flags   dbflags;
03213     HT_Time             timestamp;
03214 };
03215 
03216 struct HT_Wakeup_Event {
03217     HT_EHeader          h;
03218     HT_Wakeup           *wakeup;
03219 };
03220 
03221 struct HT_Button_Event {
03222     HT_EHeader          h;
03223     HT_Driver           *source;
03224     HT_Button           button;
03225     HT_Integer32        status;
03226         /* in case a string event generated by the same button press */
03227     HT_String_Event     *string_event;
03228 };
03229 
03230 struct HT_String_Event {
03231     HT_EHeader          h;
03232     HT_Driver           *source;
03233     HT_KName            string;
03234     HT_Text_Encoding    encoding;
03235 };
03236 
03237 struct HT_Special_Event {
03238     HT_EHeader          h;
03239     HT_Name             type,
03240                         value;
03241 };
03242 
03243 struct HT_Location_Event {
03244     HT_EHeader          h;
03245     HT_Driver           *source;
03246     float               x, y;
03247     HT_Integer32        status;
03248     HT_Locater_Actions  action;
03249         /* and if a selection is generated by the same mouse action */
03250     HT_Selection_Event  *selection_event;
03251 };
03252 
03253 
03254 struct HT_Include_Chain {
03255     HT_Include_Chain        *prev;
03256     HT_Include const            *include;
03257 };
03258 
03259 struct HT_Selection_Extras {
03260     HT_Selection_Extras         *next;
03261     int                         offsets[3];
03262     float                       prox;
03263     float                       tiebreaker;
03264 };
03265 
03266 struct HT_Selection_Item {
03267     HT_Selection_Item *         next;
03268     HT_Anything const * item;
03269     HT_Include_Chain *          include_chain;
03270     HT_Locater_Actions          item_action;
03271     int                         offset1, offset2, offset3;
03272     float                       xw, yw, zw;
03273     float                       xc, yc, zc;
03274 
03275     HT_Selection_Extras *       extras;
03276 
03277     /* these are for driver convenience */
03278     float                       screen_z;
03279     float                       proximity;
03280     HT_Net_Rendition *          net_rendition;
03281 };
03282 
03283 
03284 typedef int HT_SIH_Flags;
03285 #define SIH_SORT_DEFERRED (HT_SIH_Flags)0x0001
03286 
03287 struct HT_Selection_Item_Heap {
03288     HT_SIH_Flags        flags;
03289     HT_Selection_Item   **si_array;
03290     bool                (*compare)(HT_Selection_Item *, HT_Selection_Item*);
03291     int                 allocated;
03292     int                 used;
03293     HT_Selection_Item * zsort_list;
03294     int                 zsort_list_length;
03295 };
03296 
03297 
03298 
03299 typedef int     HT_SE_Flags;
03300 #define SE_COMPUTE              (HT_SE_Flags)0x0001
03301 #define SE_COMPUTE_BY_VOLUME    (HT_SE_Flags)0x0002
03302 #define SE_COMPUTE_WORLD_SPACE  (HT_SE_Flags)0x0004
03303 #define SE_COMPUTE_BY_POLYGON   (HT_SE_Flags)0x0008
03304 #define SE_COMPUTE_VISUAL       (HT_SE_Flags)0x0010
03305 
03306 struct HT_Selection_Event {
03307     HT_EHeader                  h;
03308     HT_Driver *                 source;
03309     HT_Driver *                 target;
03310     HT_Locater_Actions          locater_action;
03311     HT_Integer32                status;
03312     HT_Volume                   locater_volume;
03313     HT_Segment *                start_segment;
03314     HT_Selection_Item_Heap *    item_heap;
03315     HT_Selection_Item *         item_list;
03316     HT_Point *                  poly;
03317     int                         count;
03318     HT_SE_Flags                 flags;
03319 };
03320 
03321 union HT_Event {
03322     HT_EHeader          h;
03323 
03324     HT_Wakeup_Event     wakeup_event;
03325     HT_Button_Event     button_event;
03326     HT_Special_Event    special_event;
03327     HT_String_Event     string_event;
03328     HT_Location_Event   location_event;
03329     HT_Selection_Event  selection_event;
03330 };
03331 
03332 
03333 union HT_Segstuff {
03334     HT_StuffHeader      h;
03335     HT_Subsegment       subsegment;
03336     HT_Attribute        attribute;
03337     HT_Geometry         geometry;
03338 };
03339 
03340 union HT_Anything {
03341     HT_Header           h;
03342 
03343     HT_Segstuff         segstuff;
03344     HT_Subsegment       subsegment;
03345     HT_Attribute        attribute;
03346     HT_Geometry         geometry;
03347     HT_Event            event;
03348     HT_Open_Item        open_list;
03349     HT_Instance         instance;
03350     HT_Color_Def        color_def;
03351     HT_Option_Type      option_type;
03352     HT_Alias            alias;
03353     HT_Callback_Name    callback_name;
03354     HT_Font             font;
03355     HT_Texture          texture;
03356     HT_Wakeup           wakeup;
03357     HT_Error_Handler    error_handler;
03358     HT_Exit_Handler     exit_handler;
03359 
03360     /* HT_World being in here causes a complaint from OSF C++ - not sure why. */
03361     /* HT_World         world; */
03362 };
03363 
03364 struct HT_Key_List {
03365     HT_Key_List         *next;
03366     HT_Anything *item;
03367 };
03368 
03369 struct HT_Pending_Special {
03370     HT_Pending_Special  *next;
03371     HT_Name                     type,
03372                                 value;
03373 };
03374 
03375 struct HT_Pending_Redraw {
03376     HT_Pending_Redraw           *next;
03377     HT_Subsegment           *subseg;
03378     HT_Activity                 subseg_activity;
03379     HT_Geometry         *geometry;
03380     HT_Activity                 geom_activity;
03381 };
03382 
03383 
03384 /* recordable info types */
03385 
03386 /*** MUST MATCH TABLE IN SHOW_KEY_TYPE! ***/
03387 
03388 /* (the / * * /'s are flags for editor tricks) */
03389 
03390 #define HK_FIRST_TYPE           (int)0
03391 
03392 #define HK_STYLE                (HT_Type)HK_FIRST_TYPE
03393 
03394 #define HK_FIRST_ATTRIBUTE      (int)1
03395 
03396 /* put a few more-than-commonly-interesting attributes early, for Select... */
03397         /* rendering_options first since it can "lock out" others */
03398 #define HK_RENDERING_OPTIONS    (HT_Type)HK_FIRST_ATTRIBUTE
03399 
03400 #define HK_SELECTABILITY        (HT_Type)2
03401 #define HK_VISIBILITY           (HT_Type)3
03402 
03403 /* color map must be before other colors */
03404 #define HK_COLOR_MAP            (HT_Type)4
03405 #define HK_COLOR                (HT_Type)5
03406 #define HK_WINDOW_FRAME         (HT_Type)6 /* must be before HK_WINDOW */
03407 #define HK_WINDOW_PATTERN       (HT_Type)7
03408 #define HK_WINDOW               (HT_Type)8
03409 #define HK_CALLBACK             (HT_Type)9
03410 #define HK_CAMERA               (HT_Type)10
03411 #define HK_CLIP_REGION          (HT_Type)11
03412 #define HK_DRIVER               (HT_Type)12
03413 #define HK_DRIVER_OPTIONS       (HT_Type)13
03414 #define HK_EDGE_PATTERN         (HT_Type)14
03415 #define HK_EDGE_WEIGHT          (HT_Type)15
03416 #define HK_FACE_PATTERN         (HT_Type)16
03417 #define HK_HANDEDNESS           (HT_Type)17
03418 #define HK_HEURISTICS           (HT_Type)18
03419 #define HK_LINE_PATTERN         (HT_Type)19
03420 #define HK_LINE_WEIGHT          (HT_Type)20
03421 #define HK_MARKER_SIZE          (HT_Type)21
03422 #define HK_MARKER_SYMBOL        (HT_Type)22
03423 #define HK_METAFILE             (HT_Type)23
03424 #define HK_MODELLING_MATRIX     (HT_Type)24
03425 #define HK_TEXT_ALIGNMENT       (HT_Type)25
03426 #define HK_TEXT_FONT            (HT_Type)26
03427 #define HK_TEXT_PATH            (HT_Type)27
03428 #define HK_TEXT_SPACING         (HT_Type)28
03429 #define HK_USER_OPTIONS         (HT_Type)29
03430 #define HK_USER_VALUE           (HT_Type)30
03431 #define HK_TEXTURE_MATRIX       (HT_Type)31 
03432 /* for attribute locks, everything here and above must be <= 31.  (e.g. see set_rendering_options.c)
03433  * everything here and below can't be locked */
03434 #define HK_TEXTURE_DEFS         (HT_Type)32
03435 #define HK_GLYPH_DEFS           (HT_Type)33
03436 #define HK_LINE_STYLE_DEFS      (HT_Type)34
03437 #define HK_CONDITIONS           (HT_Type)35
03438 #define HK_STREAMING_MODE       (HT_Type)36
03439 #define HK_LAST_ATTRIBUTE       (int)HK_STREAMING_MODE
03440 
03441 
03442 #define HK_FIRST_GEOMETRY       (int)(HK_LAST_ATTRIBUTE+1)
03443 /* (cutting planes first to make Downwind-C-P and Gen-Del real easy) */
03444 #define HK_CUTTING_PLANE        (HT_Type)37
03445 #define HK_LIGHT                (HT_Type)38
03446 /* complex surface types */
03447 #define HK_SHELL                (HT_Type)39
03448 #define HK_MESH                 (HT_Type)40
03449 #define HK_GRID                 (HT_Type)41
03450 #define HK_NURBS_SURFACE        (HT_Type)42
03451 #define HK_CYLINDER             (HT_Type)43
03452 #define HK_POLYCYLINDER         (HT_Type)44
03453 #define HK_SPHERE               (HT_Type)45
03454 /* simple polygonal types */
03455 #define HK_POLYGON              (HT_Type)46
03456 #define HK_CIRCLE               (HT_Type)47
03457 #define HK_CIRCULAR_CHORD       (HT_Type)48
03458 #define HK_CIRCULAR_WEDGE       (HT_Type)49
03459 #define HK_ELLIPSE              (HT_Type)50
03460 /* simple polyline types */
03461 #define HK_LINE                 (HT_Type)51
03462 #define HK_POLYLINE             (HT_Type)52
03463 #define HK_NURBS_CURVE          (HT_Type)53
03464 #define HK_CIRCULAR_ARC         (HT_Type)54
03465 #define HK_ELLIPTICAL_ARC       (HT_Type)55
03466 #define HK_INFINITE_LINE        (HT_Type)56
03467 /* miscellaneous */
03468 #define HK_IMAGE                (HT_Type)57
03469 #define HK_MARKER               (HT_Type)58
03470 #define HK_TEXT                 (HT_Type)59
03471 #define HK_STRING_CURSOR        (HT_Type)60
03472 #define HK_GEOMETRY_REFERENCE   (HT_Type)61
03473 /* placeholder in case of "memory purge" */
03474 #define HK_MISSING_GEOMETRY     (HT_Type)62/* must be last geom */
03475 #define HK_LAST_GEOMETRY        (int)HK_MISSING_GEOMETRY
03476 
03477 #define HK_FIRST_SUBSEG         (int)(HK_LAST_GEOMETRY+1)
03478 #define HK_INCLUDE              (HT_Type)HK_FIRST_SUBSEG
03479 #define HK_SEGMENT              (HT_Type)(HK_FIRST_SUBSEG+1) /* must be last */
03480 #define HK_LAST_SUBSEG          (int)HK_SEGMENT
03481 
03482 /* the rest of these can be in any order... */
03483 #define HK_FIRST_MISC           (int)(HK_LAST_SUBSEG+1)
03484 #define HK_LOD_NODE             (HT_Type)HK_FIRST_MISC
03485 #define HK_OPEN_ITEM            (HT_Type)(HK_FIRST_MISC + 1)
03486 #define HK_WORLD                (HT_Type)(HK_FIRST_MISC + 2)
03487 #define HK_INSTANCE             (HT_Type)(HK_FIRST_MISC + 3)
03488 #define HK_ALIAS                (HT_Type)(HK_FIRST_MISC + 4)
03489 #define HK_CALLBACK_NAME        (HT_Type)(HK_FIRST_MISC + 5)
03490 #define HK_COLOR_DEF            (HT_Type)(HK_FIRST_MISC + 6)
03491 #define HK_ERROR_HANDLER        (HT_Type)(HK_FIRST_MISC + 7)
03492 #define HK_EXIT_HANDLER         (HT_Type)(HK_FIRST_MISC + 8)
03493 #define HK_FONT                 (HT_Type)(HK_FIRST_MISC + 9)
03494 #define HK_TEXTURE              (HT_Type)(HK_FIRST_MISC + 10)
03495 #define HK_WAKEUP               (HT_Type)(HK_FIRST_MISC + 11)
03496 #define HK_OPTION_TYPE          (HT_Type)(HK_FIRST_MISC + 12)
03497 #define HK_UV_TRIM_POLY         (HT_Type)(HK_FIRST_MISC + 13)
03498 #define HK_UV_TRIM_CURVE        (HT_Type)(HK_FIRST_MISC + 14)
03499 #define HK_UV_TRIM_COLLECTION   (HT_Type)(HK_FIRST_MISC + 15)
03500 #define HK_DISPLAY_LIST         (HT_Type)(HK_FIRST_MISC + 16)
03501 #define HK_CONTOUR              (HT_Type)(HK_FIRST_MISC + 17)
03502 #define HK_STATIC_MODEL         (HT_Type)(HK_FIRST_MISC + 18)
03503 #define HK_LAST_MISC            (int)HK_STATIC_MODEL
03504 
03505 #define HK_FIRST_EVENT          (int)(HK_LAST_MISC + 1)
03506 #define HK_BUTTON_EVENT         (HT_Type)HK_FIRST_EVENT
03507 #define HK_LOCATION_EVENT       (HT_Type)(HK_FIRST_EVENT + 1)
03508 #define HK_SELECTION_EVENT      (HT_Type)(HK_FIRST_EVENT + 2)
03509 #define HK_SPECIAL_EVENT        (HT_Type)(HK_FIRST_EVENT + 3)
03510 #define HK_STRING_EVENT         (HT_Type)(HK_FIRST_EVENT + 4)
03511 #define HK_WAKEUP_EVENT         (HT_Type)(HK_FIRST_EVENT + 5)
03512 #define HK_LAST_EVENT           (int)HK_WAKEUP_EVENT
03513 
03514 #define HK_LAST_TYPE            HK_LAST_EVENT
03515 #define HK_BAD_TYPE             (HT_Type)(HK_LAST_TYPE + 1)
03516 
03517 
03518 /* these are for the geometry table (the extra +1 is for out of order geometry) */
03519 #define GEOMETRY_TABLE_LENGTH   (HK_LAST_GEOMETRY - HK_FIRST_GEOMETRY + 1 + 1)
03520 #define GEOMETRY_TABLE_SIZE     (GEOMETRY_TABLE_LENGTH * sizeof(HT_Geometry *))
03521 
03522 #define GT_REF(x)       (int)(((x)->h.type)-HK_FIRST_GEOMETRY)
03523 #define GT_REF_TYPE(x)  (int)((x)-HK_FIRST_GEOMETRY)
03524 /* Out of Order geometry table index */
03525 #define GT_OO           (HK_LAST_GEOMETRY-HK_FIRST_GEOMETRY+1)
03526 
03527 
03528 
03529 
03530 union Hashable{
03531         void    *pointer;
03532         HT_Key  key;
03533         struct {
03534 #if (LONG_SIZE == 64)
03535 #   if HOOPS_BIGENDIAN
03536         short   three, four;
03537         short   one, two;
03538 #   else
03539         short   one, two;
03540         short   three, four;
03541 #   endif
03542 #else
03543         short   one, two;
03544 #endif
03545         } words;
03546 };
03547 
03548 
03549 #define BASE_COLOR              0
03550 #define FIRST_DEGREE_COLOR      1
03551 #define SECOND_DEGREE_COLOR     2
03552 #define BLEND_COLOR             3
03553 
03554 #define DATABASE_DEFINED
03555 #endif
Main Index
HOOPS/3dGS I.M. Interface

     << Back      Full Index      Forward >>