topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-QD3DSet.h / h



  /*
       File:       QD3DSet.h
   
       Contains:   Q3Set types and routines
   
       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 __QD3DSET__
  define __QD3DSET__
  
  ifndef __QD3D__
  include <QD3D.h>
  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 __QD3DSET__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 __QD3DSET__RESTORE_PACKED_ENUMS
          #pragma options(!pack_enums)
      #endif
  endif
  
  
**************************************************************************** * ** * Set Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3SetObject )
  Q3Set_New                       (void);
  
  EXTERN_API_C( TQ3ObjectType )
  Q3Set_GetType                   (TQ3SetObject           theSet);
  
  EXTERN_API_C( TQ3Status )
  Q3Set_Add                       (TQ3SetObject           theSet,
                                   TQ3ElementType         theType,
                                   const void *           data);
  
  EXTERN_API_C( TQ3Status )
  Q3Set_Get                       (TQ3SetObject           theSet,
                                   TQ3ElementType         theType,
                                   void *                 data);
  
  EXTERN_API_C( TQ3Boolean )
  Q3Set_Contains                  (TQ3SetObject           theSet,
                                   TQ3ElementType         theType);
  
  EXTERN_API_C( TQ3Status )
  Q3Set_Clear                     (TQ3SetObject           theSet,
                                   TQ3ElementType         theType);
  
  EXTERN_API_C( TQ3Status )
  Q3Set_Empty                     (TQ3SetObject           target);
  
  /*
   *  Iterating through all elements in a set
   *
   *  Pass in kQ3ElementTypeNone to get first type
   *  kQ3ElementTypeNone is returned when end of list is reached
   */
  EXTERN_API_C( TQ3Status )
  Q3Set_GetNextElementType        (TQ3SetObject           theSet,
                                   TQ3ElementType *       theType);
  
  
**************************************************************************** * ** * Attribute Types ** * ** ***************************************************************************

  
  /* 
   *  For the data types listed below, pass in a pointer to it in the _Add 
   *  and _Get calls.
   *
   *  For surface shader attributes, reference counts are incremented on 
   *  the _Add and _Get 
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  enum TQ3AttributeTypes {
                                                                  /* Data Type          */
      kQ3AttributeTypeNone        = 0,                            /* ---------          */
      kQ3AttributeTypeSurfaceUV   = 1,                            /* TQ3Param2D          */
      kQ3AttributeTypeShadingUV   = 2,                            /* TQ3Param2D           */
      kQ3AttributeTypeNormal      = 3,                            /* TQ3Vector3D           */
      kQ3AttributeTypeAmbientCoefficient = 4,                     /* float            */
      kQ3AttributeTypeDiffuseColor = 5,                           /* TQ3ColorRGB          */
      kQ3AttributeTypeSpecularColor = 6,                          /* TQ3ColorRGB          */
      kQ3AttributeTypeSpecularControl = 7,                        /* float            */
      kQ3AttributeTypeTransparencyColor = 8,                      /* TQ3ColorRGB          */
      kQ3AttributeTypeSurfaceTangent = 9,                         /* TQ3Tangent2D          */
      kQ3AttributeTypeHighlightState = 10,                        /* TQ3Switch           */
      kQ3AttributeTypeSurfaceShader = 11,                         /* TQ3SurfaceShaderObject */
      kQ3AttributeTypeNumTypes    = 12
  };
  typedef enum TQ3AttributeTypes TQ3AttributeTypes;
  
  typedef TQ3ElementType                  TQ3AttributeType;
  
**************************************************************************** * ** * Attribute Drawing ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3Status )
  Q3Attribute_Submit              (TQ3AttributeType       attributeType,
                                   const void *           data,
                                   TQ3ViewObject          view);
  
  
**************************************************************************** * ** * AttributeSet Routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3AttributeSet )
  Q3AttributeSet_New              (void);
  
  EXTERN_API_C( TQ3Status )
  Q3AttributeSet_Add              (TQ3AttributeSet        attributeSet,
                                   TQ3AttributeType       theType,
                                   const void *           data);
  
  EXTERN_API_C( TQ3Boolean )
  Q3AttributeSet_Contains         (TQ3AttributeSet        attributeSet,
                                   TQ3AttributeType       attributeType);
  
  EXTERN_API_C( TQ3Status )
  Q3AttributeSet_Get              (TQ3AttributeSet        attributeSet,
                                   TQ3AttributeType       theType,
                                   void *                 data);
  
  EXTERN_API_C( TQ3Status )
  Q3AttributeSet_Clear            (TQ3AttributeSet        attributeSet,
                                   TQ3AttributeType       theType);
  
  EXTERN_API_C( TQ3Status )
  Q3AttributeSet_Empty            (TQ3AttributeSet        target);
  
  /*
   * Q3AttributeSet_GetNextAttributeType
   *
   * Pass in kQ3AttributeTypeNone to get first type
   * kQ3AttributeTypeNone is returned when end of list is reached
   */
  EXTERN_API_C( TQ3Status )
  Q3AttributeSet_GetNextAttributeType (TQ3AttributeSet    source,
                                   TQ3AttributeType *     theType);
  
  EXTERN_API_C( TQ3Status )
  Q3AttributeSet_Submit           (TQ3AttributeSet        attributeSet,
                                   TQ3ViewObject          view);
  
  /*
   * Inherit from parent->child into result
   *  Result attributes are:
   *      all child attributes + all parent attributes NOT in the child
   */
  EXTERN_API_C( TQ3Status )
  Q3AttributeSet_Inherit          (TQ3AttributeSet        parent,
                                   TQ3AttributeSet        child,
                                   TQ3AttributeSet        result);
  
  
**************************************************************************** * ** * Custom Element Registration ** * ** ***************************************************************************

  
  /*
   * Element Methods - 
   *
   *      When you create a custom element, you control what structures are 
   *      passed around the API. For example, you may allow the Q3Set_Add call 
   *      take one type of argument, store your element internally in some 
   *      abstract data type, and have the Q3Set_Get call take a different 
   *      argument.
   *
   *      For example:
   *          
   *      There are four calls which at some point will copy an element:
   *
   *      Q3Set_Add (copied from Application memory to QuickDraw3D memory)
   *      Q3Set_Get (copied from QuickDraw3D memory to Application memory)
   *      Q3Object_Duplicate (all elements are copied internally)
   *      Q3AttributeSet_Inherit (all elements are copied internally)
   *
   *      Either CopyAdd or CopyReplace is called during the "_Add" call.
   *          - CopyAdd is destructive and should assume "toElement" is garbage
   *          - CopyReplace is replacing an existing element.
   *
   *      CopyGet is called during the "_Get" call.
   *
   *      CopyDuplicate is called to duplicate an element's internal structure.
   *
   * Attributes Methods - 
   *
   *      For copying data while Inheriting. Element methods are used
   *      at all other times.
   *  
   *      CopyInherit is called to duplicate an element's internal structure 
   *          during inheritance. You should make this as fast as possible.
   *          (for example, if your custom element contains objects, you
   *           should do a Q3Shared_GetReference instead of a Q3Object_Duplicate)
   *          
   *      The ElementDelete method will be called for all of your elements 
   *      copied around via CopyAdd, CopyReplace, CopyDuplicate, and 
   *      CopyInherit.
   *      If CopyGet allocates any memory in it's destination, it is up to the 
   *      application to delete it on its side.
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  define kQ3XMethodTypeElementCopyAdd            Q3_METHOD_TYPE('e','c','p','a')
  define kQ3XMethodTypeElementCopyReplace        Q3_METHOD_TYPE('e','c','p','r')
  define kQ3XMethodTypeElementCopyGet            Q3_METHOD_TYPE('e','c','p','g')
  define kQ3XMethodTypeElementCopyDuplicate      Q3_METHOD_TYPE('e','c','p','d')
  define kQ3XMethodTypeElementDelete             Q3_METHOD_TYPE('e','d','e','l')
  typedef CALLBACK_API_C( TQ3Status , TQ3XElementCopyAddMethod )(const void *fromAPIElement, void *toInternalElement);
  typedef CALLBACK_API_C( TQ3Status , TQ3XElementCopyReplaceMethod )(const void *fromAPIElement, void *ontoInternalElement);
  typedef CALLBACK_API_C( TQ3Status , TQ3XElementCopyGetMethod )(const void *fromInternalElement, void *toAPIElement);
  typedef CALLBACK_API_C( TQ3Status , TQ3XElementCopyDuplicateMethod )(const void *fromInternalElement, void *toInternalElement);
  typedef CALLBACK_API_C( TQ3Status , TQ3XElementDeleteMethod )(void *internalElement);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3XObjectClass )
  Q3XElementClass_Register        (TQ3ElementType *       elementType,
                                   const char *           name,
                                   unsigned long          sizeOfElement,
                                   TQ3XMetaHandler        metaHandler);
  
  EXTERN_API_C( TQ3Status )
  Q3XElementType_GetElementSize   (TQ3ElementType         elementType,
                                   unsigned long *        sizeOfElement);
  
  
**************************************************************************** * ** * Custom Attribute Registration ** * ** ***************************************************************************

  
  define kQ3XMethodTypeAttributeInherit      Q3_METHOD_TYPE('i','n','h','t')
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef TQ3Boolean                      TQ3XAttributeInheritMethod;
  /* return kQ3True or kQ3False in your metahandler */
  define kQ3XMethodTypeAttributeCopyInherit  Q3_METHOD_TYPE('a','c','p','i')
  typedef CALLBACK_API_C( TQ3Status , TQ3XAttributeCopyInheritMethod )(const void *fromInternalAttribute, void *toInternalAttribute);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3XObjectClass )
  Q3XAttributeClass_Register      (TQ3AttributeType *     attributeType,
                                   const char *           creatorName,
                                   unsigned long          sizeOfElement,
                                   TQ3XMetaHandler        metaHandler);
  
  /*
   *  Version 1.5
   */
  define kQ3XMethodTypeAttributeDefault      Q3_METHOD_TYPE('a','s','d','f')
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( TQ3Status , TQ3XAttributeDefaultMethod )(void *internalElement);
  define kQ3XMethodTypeAttributeIsDefault        Q3_METHOD_TYPE('a','i','d','f')
  typedef CALLBACK_API_C( TQ3Boolean , TQ3XAttributeIsDefaultMethod )(void *internalElement);
  
  if PRAGMA_ENUM_ALWAYSINT
      #pragma enumsalwaysint reset
      #ifdef __QD3DSET__RESTORE_TWOBYTEINTS
          #pragma fourbyteints off
      #endif
  #elif PRAGMA_ENUM_OPTIONS
      #pragma option enum=reset
  #elif defined(__QD3DSET__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 /* __QD3DSET__ */
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.