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