/* File: QD3DIO.h Contains: QuickDraw 3D IO API Version: Technology: Quickdraw 3D 1.6 Release: QuickTime 6.0.2 Copyright: (c) 1995-2001 by Apple Computer, Inc., all rights reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __QD3DIO__ #define __QD3DIO__ #ifndef __QD3D__ #include #endif #ifndef __QD3DDRAWCONTEXT__ #include #endif #ifndef __QD3DVIEW__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=power #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif #if PRAGMA_ENUM_ALWAYSINT #if defined(__fourbyteints__) && !__fourbyteints__ #define __QD3DIO__RESTORE_TWOBYTEINTS #pragma fourbyteints on #endif #pragma enumsalwaysint on #elif PRAGMA_ENUM_OPTIONS #pragma option enum=int #elif PRAGMA_ENUM_PACK #if __option(pack_enums) #define __QD3DIO__RESTORE_PACKED_ENUMS #pragma options(!pack_enums) #endif #endif /****************************************************************************** ** ** ** Basic Types ** ** ** *****************************************************************************/ typedef unsigned char TQ3Uns8; typedef signed char TQ3Int8; typedef unsigned short TQ3Uns16; typedef signed short TQ3Int16; typedef unsigned long TQ3Uns32; typedef signed long TQ3Int32; #if TARGET_RT_BIG_ENDIAN struct TQ3Uns64 { unsigned long hi; unsigned long lo; }; typedef struct TQ3Uns64 TQ3Uns64; struct TQ3Int64 { signed long hi; unsigned long lo; }; typedef struct TQ3Int64 TQ3Int64; #else struct TQ3Uns64 { unsigned long lo; unsigned long hi; }; typedef struct TQ3Uns64 TQ3Uns64; struct TQ3Int64 { unsigned long lo; signed long hi; }; typedef struct TQ3Int64 TQ3Int64; #endif /* TARGET_RT_BIG_ENDIAN */ typedef float TQ3Float32; typedef double TQ3Float64; typedef TQ3Uns32 TQ3Size; /****************************************************************************** ** ** ** File Types ** ** ** *****************************************************************************/ enum TQ3FileModeMasks { kQ3FileModeNormal = 0, kQ3FileModeStream = 1 << 0, kQ3FileModeDatabase = 1 << 1, kQ3FileModeText = 1 << 2 }; typedef enum TQ3FileModeMasks TQ3FileModeMasks; typedef unsigned long TQ3FileMode; /****************************************************************************** ** ** ** Method Types ** ** ** *****************************************************************************/ /* * IO Methods * * The IO system treats all objects as groups of typed information. * When you register your element or attribute, the "elementType" is the * binary type of your object, the "elementName" the ascii type. * * All objects in the metafile are made up of a "root" or parent object which * defines the instantiated object type. You may define the format of your * data any way you wish as long as you use the primitives types above and the * routines below. * * Root Objects are often appended with additional child objects, called * subobjects. You may append your object with other QuickDraw 3D objects. * * Writing is straightforward: an object traverses itself any other objects * that make it up, then writes its own data. Writing uses two methods: * TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod. * * The TQ3XObjectTraverseMethod method should: * + First, Determine if the data should be written * - if you don't want to write out your object after examining your * data, return kQ3Success in your Traverse method without calling * any other submit calls. * + Next, calculate the size of your object on disk * + Gather whatever state from the view you need to preserve * - you may access the view state NOW, as the state of the * view duing your TQ3XObjectWriteMethod will not be valid. You may * pass a temporary buffer to your write method. * + Submit your view write data using Q3View_SubmitWriteData * - note that you MUST call this before any other "_Submit" call. * - you may pass in a "deleteMethod" for your data. This method * will be called whether or not your write method succeeds or fails. * + Submit your subobjects to the view * * The TQ3XObjectWriteMethod method should: * + Write your data format to the file using the primitives routines below. * - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that * method will be called upon exit of your write method. * * Reading is less straightforward because your root object and * any subobjects must be read inside of your TQ3XObjectReadDataMethod. There * is an implicit state contained in the file while reading, which you must * be aware of. When you first enter the read method, you must physically * read in your data format using the primitives routines until * * Q3File_IsEndOfData(file) == kQ3True * * Generally, your data format should be self-descriptive such that you do not * need to call Q3File_IsEndOfData to determine if you are done reading. * However, this call is useful for determining zero-sized object or * determining the end of an object's data. * * Once you have read in all the data, you may collect subobjects. A metafile * object ONLY has subobjects if it is in a container. The call * * Q3File_IsEndOfContainer(file) * * returns kQ3False if subobjects exist, and kQ3True if subobjects do not * exist. * * At this point, you may use * * Q3File_GetNextObjectType * Q3File_IsNextObjectOfType * Q3File_ReadObject * Q3File_SkipObject * * to iterate through the subobjects until Q3File_IsEndOfContainer(file) * is kQ3True. * */ /* * IO Methods */ enum { kQ3XMethodTypeObjectFileVersion = FOUR_CHAR_CODE('vers'), /* version */ kQ3XMethodTypeObjectTraverse = FOUR_CHAR_CODE('trvs'), /* byte count */ kQ3XMethodTypeObjectTraverseData = FOUR_CHAR_CODE('trvd'), /* byte count */ kQ3XMethodTypeObjectWrite = FOUR_CHAR_CODE('writ'), /* Dump info to file */ kQ3XMethodTypeObjectReadData = FOUR_CHAR_CODE('rddt'), /* Read info from file into buffer or, attach read data to parent */ kQ3XMethodTypeObjectRead = FOUR_CHAR_CODE('read'), kQ3XMethodTypeObjectAttach = FOUR_CHAR_CODE('attc') }; /* * TQ3XObjectTraverseMethod * * For "elements" (meaning "attributes, too), you will be passed NULL for * object. Sorry, custom objects will be available in the next major revision. * * The "data" is a pointer to your internal element data. * * The view is the current traversal view. */ typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseMethod )(TQ3Object object, void *data, TQ3ViewObject view); /* * TQ3XObjectTraverseDataMethod */ typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseDataMethod )(TQ3Object object, void *data, TQ3ViewObject view); /* * TQ3XObjectWriteMethod */ typedef CALLBACK_API_C( TQ3Status , TQ3XObjectWriteMethod )(const void *object, TQ3FileObject theFile); /* * Custom object writing */ typedef CALLBACK_API_C( void , TQ3XDataDeleteMethod )(void *data); #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3Status ) Q3XView_SubmitWriteData (TQ3ViewObject view, TQ3Size size, void * data, TQ3XDataDeleteMethod deleteData); EXTERN_API_C( TQ3Status ) Q3XView_SubmitSubObjectData (TQ3ViewObject view, TQ3XObjectClass objectClass, unsigned long size, void * data, TQ3XDataDeleteMethod deleteData); /* * TQ3XObjectReadMethod */ #endif /* CALL_NOT_IN_CARBON */ typedef CALLBACK_API_C( TQ3Object , TQ3XObjectReadMethod )(TQ3FileObject theFile); /* * TQ3XObjectReadDataMethod * * For "elements" (meaning "attributes", too), you must allocate stack space * and call Q3Set_Add on "parentObject", which is an TQ3SetObject. * * Otherwise, parentObject is whatever object your element is a subobject of... */ typedef CALLBACK_API_C( TQ3Status , TQ3XObjectReadDataMethod )(TQ3Object parentObject, TQ3FileObject theFile); /* * TQ3XObjectAttachMethod */ typedef CALLBACK_API_C( TQ3Status , TQ3XObjectAttachMethod )(TQ3Object childObject, TQ3Object parentObject); /****************************************************************************** ** ** ** Versioning ** ** ** *****************************************************************************/ #define Q3FileVersion(majorVersion, minorVersion) (TQ3FileVersion) \ ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) | ((TQ3Uns32) minorVersion & 0xFFFF)) typedef unsigned long TQ3FileVersion; #define kQ3FileVersionCurrent Q3FileVersion(1,6) /****************************************************************************** ** ** ** File Routines ** ** ** *****************************************************************************/ /* * Creation and accessors */ #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3FileObject ) Q3File_New (void); EXTERN_API_C( TQ3Status ) Q3File_GetStorage (TQ3FileObject theFile, TQ3StorageObject * storage); EXTERN_API_C( TQ3Status ) Q3File_SetStorage (TQ3FileObject theFile, TQ3StorageObject storage); /* * Opening, and accessing "open" state, closing/cancelling */ EXTERN_API_C( TQ3Status ) Q3File_OpenRead (TQ3FileObject theFile, TQ3FileMode * mode); EXTERN_API_C( TQ3Status ) Q3File_OpenWrite (TQ3FileObject theFile, TQ3FileMode mode); EXTERN_API_C( TQ3Status ) Q3File_IsOpen (TQ3FileObject theFile, TQ3Boolean * isOpen); EXTERN_API_C( TQ3Status ) Q3File_GetMode (TQ3FileObject theFile, TQ3FileMode * mode); EXTERN_API_C( TQ3Status ) Q3File_GetVersion (TQ3FileObject theFile, TQ3FileVersion * version); EXTERN_API_C( TQ3Status ) Q3File_Close (TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3File_Cancel (TQ3FileObject theFile); /* * Writing (Application) */ EXTERN_API_C( TQ3Status ) Q3View_StartWriting (TQ3ViewObject view, TQ3FileObject theFile); EXTERN_API_C( TQ3ViewStatus ) Q3View_EndWriting (TQ3ViewObject view); /* * Reading (Application) */ EXTERN_API_C( TQ3ObjectType ) Q3File_GetNextObjectType (TQ3FileObject theFile); EXTERN_API_C( TQ3Boolean ) Q3File_IsNextObjectOfType (TQ3FileObject theFile, TQ3ObjectType ofType); EXTERN_API_C( TQ3Object ) Q3File_ReadObject (TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3File_SkipObject (TQ3FileObject theFile); EXTERN_API_C( TQ3Boolean ) Q3File_IsEndOfData (TQ3FileObject theFile); EXTERN_API_C( TQ3Boolean ) Q3File_IsEndOfContainer (TQ3FileObject theFile, TQ3Object rootObject); EXTERN_API_C( TQ3Boolean ) Q3File_IsEndOfFile (TQ3FileObject theFile); /* * External file references */ EXTERN_API_C( TQ3Status ) Q3File_MarkAsExternalReference (TQ3FileObject theFile, TQ3SharedObject sharedObject); EXTERN_API_C( TQ3GroupObject ) Q3File_GetExternalReferences (TQ3FileObject theFile); /* * Tracking editing in read-in objects with custom elements */ EXTERN_API_C( TQ3Status ) Q3Shared_ClearEditTracking (TQ3SharedObject sharedObject); EXTERN_API_C( TQ3Boolean ) Q3Shared_GetEditTrackingState (TQ3SharedObject sharedObject); /* * Reading objects inside a group one-by-one */ #endif /* CALL_NOT_IN_CARBON */ enum TQ3FileReadGroupStateMasks { kQ3FileReadWholeGroup = 0, kQ3FileReadObjectsInGroup = 1 << 0, kQ3FileCurrentlyInsideGroup = 1 << 1 }; typedef enum TQ3FileReadGroupStateMasks TQ3FileReadGroupStateMasks; typedef unsigned long TQ3FileReadGroupState; #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3Status ) Q3File_SetReadInGroup (TQ3FileObject theFile, TQ3FileReadGroupState readGroupState); EXTERN_API_C( TQ3Status ) Q3File_GetReadInGroup (TQ3FileObject theFile, TQ3FileReadGroupState * readGroupState); /* * Idling */ #endif /* CALL_NOT_IN_CARBON */ typedef CALLBACK_API_C( TQ3Status , TQ3FileIdleMethod )(TQ3FileObject theFile, const void *idlerData); #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3Status ) Q3File_SetIdleMethod (TQ3FileObject theFile, TQ3FileIdleMethod idle, const void * idleData); /****************************************************************************** ** ** ** Primitives Routines ** ** ** *****************************************************************************/ EXTERN_API_C( TQ3Status ) Q3NewLine_Write (TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Uns8_Read (TQ3Uns8 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Uns8_Write (TQ3Uns8 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Uns16_Read (TQ3Uns16 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Uns16_Write (TQ3Uns16 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Uns32_Read (TQ3Uns32 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Uns32_Write (TQ3Uns32 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Int8_Read (TQ3Int8 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Int8_Write (TQ3Int8 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Int16_Read (TQ3Int16 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Int16_Write (TQ3Int16 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Int32_Read (TQ3Int32 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Int32_Write (TQ3Int32 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Uns64_Read (TQ3Uns64 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Uns64_Write (TQ3Uns64 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Int64_Read (TQ3Int64 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Int64_Write (TQ3Int64 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Float32_Read (TQ3Float32 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Float32_Write (TQ3Float32 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Float64_Read (TQ3Float64 * data, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Float64_Write (TQ3Float64 data, TQ3FileObject theFile); EXTERN_API_C( TQ3Size ) Q3Size_Pad (TQ3Size size); /* * Pass a pointer to a buffer of kQ3StringMaximumLength bytes */ EXTERN_API_C( TQ3Status ) Q3String_Read (char * data, unsigned long * length, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3String_Write (const char * data, TQ3FileObject theFile); /* * This call will read Q3Size_Pad(size) bytes, * but only place size bytes into data. */ EXTERN_API_C( TQ3Status ) Q3RawData_Read (unsigned char * data, unsigned long size, TQ3FileObject theFile); /* * This call will write Q3Size_Pad(size) bytes, * adding 0's to pad to the nearest 4 byte boundary. */ EXTERN_API_C( TQ3Status ) Q3RawData_Write (const unsigned char * data, unsigned long size, TQ3FileObject theFile); /****************************************************************************** ** ** ** Convenient Primitives Routines ** ** ** *****************************************************************************/ EXTERN_API_C( TQ3Status ) Q3Point2D_Read (TQ3Point2D * point2D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Point2D_Write (const TQ3Point2D * point2D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Point3D_Read (TQ3Point3D * point3D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Point3D_Write (const TQ3Point3D * point3D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3RationalPoint3D_Read (TQ3RationalPoint3D * point3D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3RationalPoint3D_Write (const TQ3RationalPoint3D * point3D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3RationalPoint4D_Read (TQ3RationalPoint4D * point4D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3RationalPoint4D_Write (const TQ3RationalPoint4D * point4D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Vector2D_Read (TQ3Vector2D * vector2D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Vector2D_Write (const TQ3Vector2D * vector2D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Vector3D_Read (TQ3Vector3D * vector3D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Vector3D_Write (const TQ3Vector3D * vector3D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Matrix4x4_Read (TQ3Matrix4x4 * matrix4x4, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Matrix4x4_Write (const TQ3Matrix4x4 * matrix4x4, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Tangent2D_Read (TQ3Tangent2D * tangent2D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Tangent2D_Write (const TQ3Tangent2D * tangent2D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Tangent3D_Read (TQ3Tangent3D * tangent3D, TQ3FileObject theFile); EXTERN_API_C( TQ3Status ) Q3Tangent3D_Write (const TQ3Tangent3D * tangent3D, TQ3FileObject theFile); /* This call affects only text Files - it is a no-op in binary files */ EXTERN_API_C( TQ3Status ) Q3Comment_Write (char * comment, TQ3FileObject theFile); /****************************************************************************** ** ** ** Unknown Object ** ** ** ** Unknown objects are generated when reading files which contain ** ** custom data which has not been registered in the current ** ** instantiation of QuickDraw 3D. ** ** ** *****************************************************************************/ EXTERN_API_C( TQ3ObjectType ) Q3Unknown_GetType (TQ3UnknownObject unknownObject); EXTERN_API_C( TQ3Status ) Q3Unknown_GetDirtyState (TQ3UnknownObject unknownObject, TQ3Boolean * isDirty); EXTERN_API_C( TQ3Status ) Q3Unknown_SetDirtyState (TQ3UnknownObject unknownObject, TQ3Boolean isDirty); /****************************************************************************** ** ** ** Unknown Text Routines ** ** ** *****************************************************************************/ #endif /* CALL_NOT_IN_CARBON */ struct TQ3UnknownTextData { char * objectName; /* '\0' terminated */ char * contents; /* '\0' terminated */ }; typedef struct TQ3UnknownTextData TQ3UnknownTextData; #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3Status ) Q3UnknownText_GetData (TQ3UnknownObject unknownObject, TQ3UnknownTextData * unknownTextData); EXTERN_API_C( TQ3Status ) Q3UnknownText_EmptyData (TQ3UnknownTextData * unknownTextData); /****************************************************************************** ** ** ** Unknown Binary Routines ** ** ** *****************************************************************************/ #endif /* CALL_NOT_IN_CARBON */ struct TQ3UnknownBinaryData { TQ3ObjectType objectType; unsigned long size; TQ3Endian byteOrder; char * contents; }; typedef struct TQ3UnknownBinaryData TQ3UnknownBinaryData; #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3Status ) Q3UnknownBinary_GetData (TQ3UnknownObject unknownObject, TQ3UnknownBinaryData * unknownBinaryData); EXTERN_API_C( TQ3Status ) Q3UnknownBinary_EmptyData (TQ3UnknownBinaryData * unknownBinaryData); #endif /* CALL_NOT_IN_CARBON */ #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3Status ) Q3UnknownBinary_GetTypeString (TQ3UnknownObject unknownObject, char ** typeString); EXTERN_API_C( TQ3Status ) Q3UnknownBinary_EmptyTypeString (char ** typeString); #endif /* CALL_NOT_IN_CARBON */ /****************************************************************************** ** ** ** ViewHints routines ** ** ** ** ViewHints are an object in a metafile to give you some hints on how ** ** to render a scene. You may create a view with any of the objects ** ** retrieved from it, or you can just throw it away. ** ** ** ** To write a view hints to a file, create a view hints object from a ** ** view and write the view hints. ** ** ** *****************************************************************************/ #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3ViewHintsObject ) Q3ViewHints_New (TQ3ViewObject view); EXTERN_API_C( TQ3Status ) Q3ViewHints_SetRenderer (TQ3ViewHintsObject viewHints, TQ3RendererObject renderer); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetRenderer (TQ3ViewHintsObject viewHints, TQ3RendererObject * renderer); EXTERN_API_C( TQ3Status ) Q3ViewHints_SetCamera (TQ3ViewHintsObject viewHints, TQ3CameraObject camera); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetCamera (TQ3ViewHintsObject viewHints, TQ3CameraObject * camera); EXTERN_API_C( TQ3Status ) Q3ViewHints_SetLightGroup (TQ3ViewHintsObject viewHints, TQ3GroupObject lightGroup); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetLightGroup (TQ3ViewHintsObject viewHints, TQ3GroupObject * lightGroup); EXTERN_API_C( TQ3Status ) Q3ViewHints_SetAttributeSet (TQ3ViewHintsObject viewHints, TQ3AttributeSet attributeSet); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetAttributeSet (TQ3ViewHintsObject viewHints, TQ3AttributeSet * attributeSet); EXTERN_API_C( TQ3Status ) Q3ViewHints_SetDimensionsState (TQ3ViewHintsObject viewHints, TQ3Boolean isValid); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetDimensionsState (TQ3ViewHintsObject viewHints, TQ3Boolean * isValid); EXTERN_API_C( TQ3Status ) Q3ViewHints_SetDimensions (TQ3ViewHintsObject viewHints, unsigned long width, unsigned long height); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetDimensions (TQ3ViewHintsObject viewHints, unsigned long * width, unsigned long * height); EXTERN_API_C( TQ3Status ) Q3ViewHints_SetMaskState (TQ3ViewHintsObject viewHints, TQ3Boolean isValid); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetMaskState (TQ3ViewHintsObject viewHints, TQ3Boolean * isValid); EXTERN_API_C( TQ3Status ) Q3ViewHints_SetMask (TQ3ViewHintsObject viewHints, const TQ3Bitmap * mask); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetMask (TQ3ViewHintsObject viewHints, TQ3Bitmap * mask); /* Call Q3Bitmap_Empty when done with the mask */ EXTERN_API_C( TQ3Status ) Q3ViewHints_SetClearImageMethod (TQ3ViewHintsObject viewHints, TQ3DrawContextClearImageMethod clearMethod); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetClearImageMethod (TQ3ViewHintsObject viewHints, TQ3DrawContextClearImageMethod * clearMethod); EXTERN_API_C( TQ3Status ) Q3ViewHints_SetClearImageColor (TQ3ViewHintsObject viewHints, const TQ3ColorARGB * color); EXTERN_API_C( TQ3Status ) Q3ViewHints_GetClearImageColor (TQ3ViewHintsObject viewHints, TQ3ColorARGB * color); #endif /* CALL_NOT_IN_CARBON */ #if PRAGMA_ENUM_ALWAYSINT #pragma enumsalwaysint reset #ifdef __QD3DIO__RESTORE_TWOBYTEINTS #pragma fourbyteints off #endif #elif PRAGMA_ENUM_OPTIONS #pragma option enum=reset #elif defined(__QD3DIO__RESTORE_PACKED_ENUMS) #pragma options(pack_enums) #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __QD3DIO__ */