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

多媒体编程

开发平台:

Visual C++

  1. /*
  2.      File:       QD3DExtension.h
  3.  
  4.      Contains:   QuickDraw 3D Plug-in Architecture  Interface File.
  5.  
  6.      Version:    Technology: Quickdraw 3D 1.6
  7.                  Release:    QuickTime 6.0.2
  8.  
  9.      Copyright:  (c) 1995-2001 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:      For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __QD3DEXTENSION__
  18. #define __QD3DEXTENSION__
  19. #ifndef __QD3D__
  20. #include "QD3D.h"
  21. #endif
  22. #ifndef __QD3DERRORS__
  23. #include "QD3DErrors.h"
  24. #endif
  25. #if PRAGMA_ONCE
  26. #pragma once
  27. #endif
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31. #if PRAGMA_IMPORT
  32. #pragma import on
  33. #endif
  34. #if PRAGMA_STRUCT_ALIGN
  35.     #pragma options align=power
  36. #elif PRAGMA_STRUCT_PACKPUSH
  37.     #pragma pack(push, 2)
  38. #elif PRAGMA_STRUCT_PACK
  39.     #pragma pack(2)
  40. #endif
  41. #if PRAGMA_ENUM_ALWAYSINT
  42.     #if defined(__fourbyteints__) && !__fourbyteints__ 
  43.         #define __QD3DEXTENSION__RESTORE_TWOBYTEINTS
  44.         #pragma fourbyteints on
  45.     #endif
  46.     #pragma enumsalwaysint on
  47. #elif PRAGMA_ENUM_OPTIONS
  48.     #pragma option enum=int
  49. #elif PRAGMA_ENUM_PACK
  50.     #if __option(pack_enums)
  51.         #define __QD3DEXTENSION__RESTORE_PACKED_ENUMS
  52.         #pragma options(!pack_enums)
  53.     #endif
  54. #endif
  55. /******************************************************************************
  56.  **                                                                          **
  57.  **                             Constants                                    **
  58.  **                                                                          **
  59.  *****************************************************************************/
  60. #if TARGET_OS_MAC
  61. enum {
  62.     kQ3XExtensionMacCreatorType = FOUR_CHAR_CODE('Q3XT'),
  63.     kQ3XExtensionMacFileType    = FOUR_CHAR_CODE('shlb')
  64. };
  65. #endif  /* TARGET_OS_MAC */
  66. /******************************************************************************
  67.  **                                                                             **
  68.  **                                 Macros                                   **
  69.  **                                                                          **
  70.  *****************************************************************************/
  71. /*
  72.  * Use this Macro to pack the version number for your class.  This would most
  73.  * likely get used in the  kQ3XMethodTypeObjectClassVersion to return the 
  74.  * version for your class.  This method is set up in your meta handler.
  75.  */
  76. #define Q3_OBJECT_CLASS_VERSION(major, minor)         
  77.   (unsigned long) (((major) << 16) | (minor))
  78. /*
  79.  * Convenience macros to unpack a version number, accessing the major and the
  80.  * minor version numbers
  81.  */
  82. #define Q3_OBJECT_CLASS_GET_MAJOR_VERSION(version)       
  83.   (unsigned long) ((version) >> 16)
  84. #define Q3_OBJECT_CLASS_GET_MINOR_VERSION(version)       
  85.   (unsigned long) ((version) & 0x0000ffff)
  86. /******************************************************************************
  87.  **                                                                          **
  88.  **                             Object Method types                          **
  89.  **                                                                          **
  90.  *****************************************************************************/
  91. enum {
  92.     kQ3XMethodTypeObjectClassVersion = FOUR_CHAR_CODE('vrsn')
  93. };
  94. typedef unsigned long                   TQ3XObjectClassVersion;
  95. enum {
  96.     kQ3XMethodTypeObjectClassRegister = FOUR_CHAR_CODE('rgst')
  97. };
  98. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectClassRegisterMethod )(TQ3XObjectClass objectClass, void *classPrivate);
  99. enum {
  100.     kQ3XMethodTypeObjectClassReplace = FOUR_CHAR_CODE('rgrp')
  101. };
  102. typedef CALLBACK_API_C( void , TQ3XObjectClassReplaceMethod )(TQ3XObjectClass oldObjectClass, void *oldClassPrivate, TQ3XObjectClass newObjectClass, void *newClassPrivate);
  103. enum {
  104.     kQ3XMethodTypeObjectClassUnregister = FOUR_CHAR_CODE('unrg')
  105. };
  106. typedef CALLBACK_API_C( void , TQ3XObjectClassUnregisterMethod )(TQ3XObjectClass objectClass, void *classPrivate);
  107. enum {
  108.     kQ3XMethodTypeObjectNew     = FOUR_CHAR_CODE('newo')
  109. };
  110. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectNewMethod )(TQ3Object object, void *privateData, void *parameters);
  111. enum {
  112.     kQ3XMethodTypeObjectDelete  = FOUR_CHAR_CODE('dlte')
  113. };
  114. typedef CALLBACK_API_C( void , TQ3XObjectDeleteMethod )(TQ3Object object, void *privateData);
  115. enum {
  116.     kQ3XMethodTypeObjectDuplicate = FOUR_CHAR_CODE('dupl')
  117. };
  118. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectDuplicateMethod )(TQ3Object fromObject, const void *fromPrivateData, TQ3Object toObject, const void *toPrivateData);
  119. typedef CALLBACK_API_C( TQ3Status , TQ3XSharedLibraryRegister )(void );
  120. /******************************************************************************
  121.  **                                                                          **
  122.  **                         Object Hierarchy Registration                    **
  123.  **                                                                          **
  124.  *****************************************************************************/
  125. /*
  126.  *  Q3XObjectHierarchy_RegisterClass
  127.  *  
  128.  *  Register an object class in the QuickDraw 3D hierarchy.
  129.  *  
  130.  *  parentType          - an existing type in the hierarchy, or 0 to subclass
  131.  *                          TQ3Object
  132.  *  objectType          - the new object class type, used in the binary 
  133.  *                        metafile.  This is assigned at run time and returned
  134.  *                        to you.
  135.  *  objectName          - the new object name, used in the text metafile
  136.  *  metaHandler         - a TQ3XMetaHandler (may be NULL for some classes) 
  137.  *                        which returns non-virtual methods
  138.  *  virtualMetaHandler  - a TQ3XMetaHandler (may be NULL as well) which returns
  139.  *                          virtual methods a child would inherit
  140.  *  methodsSize         - the size of the class data needed (see 
  141.  *                          GetClassPrivate calls below)
  142.  *  instanceSize        - the size of the object instance data needed (see 
  143.  *                          GetPrivate calls below)
  144.  */
  145. #if CALL_NOT_IN_CARBON
  146. EXTERN_API_C( TQ3XObjectClass )
  147. Q3XObjectHierarchy_RegisterClass (TQ3ObjectType         parentType,
  148.                                  TQ3ObjectType *        objectType,
  149.                                  char *                 objectName,
  150.                                  TQ3XMetaHandler        metaHandler,
  151.                                  TQ3XMetaHandler        virtualMetaHandler,
  152.                                  unsigned long          methodsSize,
  153.                                  unsigned long          instanceSize);
  154. /*
  155.  *  Q3XObjectHierarchy_UnregisterClass
  156.  *  
  157.  *  Returns kQ3Failure if the objectClass still has objects 
  158.  * around; the class remains registered.
  159.  */
  160. EXTERN_API_C( TQ3Status )
  161. Q3XObjectHierarchy_UnregisterClass (TQ3XObjectClass     objectClass);
  162. /*
  163.  *  Q3XObjectHierarchy_GetMethod
  164.  *  
  165.  *  For use in TQ3XObjectClassRegisterMethod call
  166.  */
  167. EXTERN_API_C( TQ3XFunctionPointer )
  168. Q3XObjectClass_GetMethod        (TQ3XObjectClass        objectClass,
  169.                                  TQ3XMethodType         methodType);
  170. /*
  171.  *  Q3XObjectHierarchy_NewObject
  172.  *  
  173.  *  To create a new object. Parameters is passed into the 
  174.  *  TQ3XObjectNewMethod as the "parameters" parameter.
  175.  */
  176. EXTERN_API_C( TQ3Object )
  177. Q3XObjectHierarchy_NewObject    (TQ3XObjectClass        objectClass,
  178.                                  void *                 parameters);
  179. /*
  180.  *  Q3XObjectClass_GetLeafType
  181.  *  
  182.  *  Return the leaf type of a class.
  183.  */
  184. EXTERN_API_C( TQ3ObjectType )
  185. Q3XObjectClass_GetLeafType      (TQ3XObjectClass        objectClass);
  186. /*
  187.  *  Q3XObjectClass_GetVersion
  188.  *  This routine obtains the the version of a class, referenced by an
  189.  *  object class type.  Functions for getting the type are in QD3D.h,
  190.  *  if you have the class name.
  191.  */
  192. EXTERN_API_C( TQ3Status )
  193. Q3XObjectHierarchy_GetClassVersion (TQ3ObjectType       objectClassType,
  194.                                  TQ3XObjectClassVersion * version);
  195. /*
  196.  *  Q3XObjectClass_GetType 
  197.  *
  198.  *  This can be used to get the type, given a reference 
  199.  *  to a class.  This is most useful in the instance where you register a 
  200.  *  an element/attribute and need to get the type.  When you register an
  201.  *  element, QD3D will take the type you pass in and modify it (to avoid
  202.  *  namespace clashes).  Many object system calls require an object type
  203.  *  so this API call allows you to get the type from the class referernce
  204.  *  that you will ordinarily store when you register the class.
  205.  */
  206. EXTERN_API_C( TQ3Status )
  207. Q3XObjectClass_GetType          (TQ3XObjectClass        objectClass,
  208.                                  TQ3ObjectType *        theType);
  209. EXTERN_API_C( TQ3XObjectClass )
  210. Q3XObjectHierarchy_FindClassByType (TQ3ObjectType       theType);
  211. /*
  212.  *  Q3XObjectClass_GetPrivate
  213.  *  
  214.  *  Return a pointer to private instance data, a block of instanceSize bytes, 
  215.  *  from the Q3XObjectHierarchy_RegisterClass call.
  216.  *  
  217.  *  If instanceSize was zero, NULL is always returned.
  218.  */
  219. EXTERN_API_C( void *)
  220. Q3XObjectClass_GetPrivate       (TQ3XObjectClass        objectClass,
  221.                                  TQ3Object              targetObject);
  222. /*
  223.  * Return the "TQ3XObjectClass" of an object
  224.  */
  225. EXTERN_API_C( TQ3XObjectClass )
  226. Q3XObject_GetClass              (TQ3Object              object);
  227. /******************************************************************************
  228.  **                                                                          **
  229.  **                 Shared Library Registration Entry Point                  **
  230.  **                                                                          **
  231.  *****************************************************************************/
  232. #endif  /* CALL_NOT_IN_CARBON */
  233. struct TQ3XSharedLibraryInfo {
  234.     TQ3XSharedLibraryRegister       registerFunction;
  235.     unsigned long                   sharedLibrary;
  236. };
  237. typedef struct TQ3XSharedLibraryInfo    TQ3XSharedLibraryInfo;
  238. #if CALL_NOT_IN_CARBON
  239. EXTERN_API_C( TQ3Status )
  240. Q3XSharedLibrary_Register       (TQ3XSharedLibraryInfo * sharedLibraryInfo);
  241. EXTERN_API_C( TQ3Status )
  242. Q3XSharedLibrary_Unregister     (unsigned long          sharedLibrary);
  243. /******************************************************************************
  244.  **                                                                          **
  245.  **                             Posting Errors                               **
  246.  **                                                                          **
  247.  **         You may only call these functions from within an extension       **
  248.  **                                                                          **
  249.  *****************************************************************************/
  250. /*
  251.  *  Q3XError_Post
  252.  *  
  253.  *  Post a QuickDraw 3D Error from an extension.
  254.  */
  255. EXTERN_API_C( void )
  256. Q3XError_Post                   (TQ3Error               error);
  257. /*
  258.  *  Q3XWarning_Post
  259.  *  
  260.  *  Post a QuickDraw 3D Warning, from an extension.  Note the warning code you
  261.  *  pass into this routine must already be defined in the table above.
  262.  */
  263. EXTERN_API_C( void )
  264. Q3XWarning_Post                 (TQ3Warning             warning);
  265. /*
  266.  *  Q3XNotice_Post
  267.  *  
  268.  *  Post a QuickDraw 3D Notice, from an extension.  Note the notice code you
  269.  *  pass into this routine must already be defined in the table above.
  270.  */
  271. EXTERN_API_C( void )
  272. Q3XNotice_Post                  (TQ3Notice              notice);
  273. #endif  /* CALL_NOT_IN_CARBON */
  274. #if TARGET_OS_MAC
  275. /*
  276.  *  Q3XMacintoshError_Post
  277.  *  
  278.  *  Post the QuickDraw 3D Error, kQ3ErrorMacintoshError, and the Macintosh
  279.  *  OSErr macOSErr. (Retrieved with Q3MacintoshError_Get)
  280.  */
  281. #if CALL_NOT_IN_CARBON
  282. EXTERN_API_C( void )
  283. Q3XMacintoshError_Post          (OSErr                  macOSErr);
  284. #endif  /* CALL_NOT_IN_CARBON */
  285. #endif  /* TARGET_OS_MAC */
  286. #if PRAGMA_ENUM_ALWAYSINT
  287.     #pragma enumsalwaysint reset
  288.     #ifdef __QD3DEXTENSION__RESTORE_TWOBYTEINTS
  289.         #pragma fourbyteints off
  290.     #endif
  291. #elif PRAGMA_ENUM_OPTIONS
  292.     #pragma option enum=reset
  293. #elif defined(__QD3DEXTENSION__RESTORE_PACKED_ENUMS)
  294.     #pragma options(pack_enums)
  295. #endif
  296. #if PRAGMA_STRUCT_ALIGN
  297.     #pragma options align=reset
  298. #elif PRAGMA_STRUCT_PACKPUSH
  299.     #pragma pack(pop)
  300. #elif PRAGMA_STRUCT_PACK
  301.     #pragma pack()
  302. #endif
  303. #ifdef PRAGMA_IMPORT_OFF
  304. #pragma import off
  305. #elif PRAGMA_IMPORT
  306. #pragma import reset
  307. #endif
  308. #ifdef __cplusplus
  309. }
  310. #endif
  311. #endif /* __QD3DEXTENSION__ */