topical media & game development

talk show tell print

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



  /*
       File:       QD3DView.h
   
       Contains:   View 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 __QD3DVIEW__
  define __QD3DVIEW__
  
  ifndef __QD3D__
  include <QD3D.h>
  endif
  
  ifndef __QD3DSTYLE__
  include <QD3DStyle.h>
  endif
  
  ifndef __QD3DSET__
  include <QD3DSet.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 __QD3DVIEW__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 __QD3DVIEW__RESTORE_PACKED_ENUMS
          #pragma options(!pack_enums)
      #endif
  endif
  
  
**************************************************************************** * ** * View Type Definitions ** * ** ***************************************************************************

  
  
  enum TQ3ViewStatus {
      kQ3ViewStatusDone           = 0,
      kQ3ViewStatusRetraverse     = 1,
      kQ3ViewStatusError          = 2,
      kQ3ViewStatusCancelled      = 3
  };
  typedef enum TQ3ViewStatus TQ3ViewStatus;
  
  
**************************************************************************** * ** * Default Attribute Set ** * ** ***************************************************************************

  
  define kQ3ViewDefaultAmbientCoefficient    1.0
  define kQ3ViewDefaultDiffuseColor          1.0, 1.0, 1.0
  define kQ3ViewDefaultSpecularColor         0.5, 0.5, 0.5
  define kQ3ViewDefaultSpecularControl       4.0
  define kQ3ViewDefaultTransparency          1.0, 1.0, 1.0
  define kQ3ViewDefaultHighlightState        kQ3Off
  define kQ3ViewDefaultHighlightColor        1.0, 0.0, 0.0
  define kQ3ViewDefaultSubdivisionMethod     kQ3SubdivisionMethodScreenSpace
  define kQ3ViewDefaultSubdivisionC1         20.0
  define kQ3ViewDefaultSubdivisionC2         20.0
  
  
**************************************************************************** * ** * View Routines ** * ** ***************************************************************************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3ViewObject )
  Q3View_New                      (void);
  
  EXTERN_API_C( TQ3Status )
  Q3View_Cancel                   (TQ3ViewObject          view);
  
  
**************************************************************************** * ** * View Rendering routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3View_SetRendererByType        (TQ3ViewObject          view,
                                   TQ3ObjectType          theType);
  
  EXTERN_API_C( TQ3Status )
  Q3View_SetRenderer              (TQ3ViewObject          view,
                                   TQ3RendererObject      renderer);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetRenderer              (TQ3ViewObject          view,
                                   TQ3RendererObject *    renderer);
  
  EXTERN_API_C( TQ3Status )
  Q3View_StartRendering           (TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3ViewStatus )
  Q3View_EndRendering             (TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3View_Flush                    (TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3View_Sync                     (TQ3ViewObject          view);
  
  
**************************************************************************** * ** * View/Bounds/Pick routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3View_StartBoundingBox         (TQ3ViewObject          view,
                                   TQ3ComputeBounds       computeBounds);
  
  EXTERN_API_C( TQ3ViewStatus )
  Q3View_EndBoundingBox           (TQ3ViewObject          view,
                                   TQ3BoundingBox *       result);
  
  EXTERN_API_C( TQ3Status )
  Q3View_StartBoundingSphere      (TQ3ViewObject          view,
                                   TQ3ComputeBounds       computeBounds);
  
  EXTERN_API_C( TQ3ViewStatus )
  Q3View_EndBoundingSphere        (TQ3ViewObject          view,
                                   TQ3BoundingSphere *    result);
  
  EXTERN_API_C( TQ3Status )
  Q3View_StartPicking             (TQ3ViewObject          view,
                                   TQ3PickObject          pick);
  
  EXTERN_API_C( TQ3ViewStatus )
  Q3View_EndPicking               (TQ3ViewObject          view);
  
  
**************************************************************************** * ** * View/Camera routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3View_GetCamera                (TQ3ViewObject          view,
                                   TQ3CameraObject *      camera);
  
  EXTERN_API_C( TQ3Status )
  Q3View_SetCamera                (TQ3ViewObject          view,
                                   TQ3CameraObject        camera);
  
  
**************************************************************************** * ** * View/Lights routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3View_SetLightGroup            (TQ3ViewObject          view,
                                   TQ3GroupObject         lightGroup);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetLightGroup            (TQ3ViewObject          view,
                                   TQ3GroupObject *       lightGroup);
  
  
**************************************************************************** * ** * Idle Method ** * ** ***************************************************************************

  
  /*
   *  The idle methods allow the application to register callback routines 
   *  which will be called by the view during especially long operations.
   *
   *  The idle methods may also be used to interrupt long renderings or
   *  traversals.  Inside the idler callback the application can check for
   *  Command-Period, Control-C or clicking a "Cancel" button or whatever else
   *  may be used to let the user interrupt rendering.    
   *
   *  It is NOT LEGAL to call QD3D routines inside an idler callback.
   *
   *  Return kQ3Failure to cancel rendering, kQ3Success to continue. Don't
   *  bother posting an error.
   *
   *  Q3View_SetIdleMethod registers a callback that can be called
   *  by the system during rendering.  Unfortunately there is no way yet
   *  to set timer intervals when you want to be called.  Basically, it is
   *  up to the application's idler callback to check clocks to see if you
   *  were called back only a millisecond ago or an hour ago!
   *
   *  Q3View_SetIdleProgressMethod registers a callback that also gives
   *  progress information. This information is supplied by the renderer, and
   *  may or may not be based on real time.
   *
   *  If a renderer doesn't support the progress method, your method will be
   *  called with current == 0 and completed == 0.
   *  
   *  Otherwise, you are GUARANTEED to get called at least 2 or more times:
   *  
   *  ONCE            idleMethod(view, 0, n)      -> Initialize, Show Dialog
   *  zero or more    idleMethod(view, 1..n-1, n) -> Update progress
   *  ONCE            idleMethod(view, n, n)      -> Exit, Hide Dialog
   *  
   *  "current" is guaranteed to be less than or equal to "completed"
   *  "completed" may change values, but current/complete always indicates
   *  the degree of completion.
   *
   *  The calling conventions aid in managing any data associated with a 
   *  progress user interface indicator.
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( TQ3Status , TQ3ViewIdleMethod )(TQ3ViewObject view, const void *idlerData);
  typedef CALLBACK_API_C( TQ3Status , TQ3ViewIdleProgressMethod )(TQ3ViewObject view, const void *idlerData, unsigned long current, unsigned long completed);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3Status )
  Q3View_SetIdleMethod            (TQ3ViewObject          view,
                                   TQ3ViewIdleMethod      idleMethod,
                                   const void *           idleData);
  
  EXTERN_API_C( TQ3Status )
  Q3View_SetIdleProgressMethod    (TQ3ViewObject          view,
                                   TQ3ViewIdleProgressMethod  idleMethod,
                                   const void *           idleData);
  
  
**************************************************************************** * ** * EndFrame Method ** * ** ***************************************************************************

  
  /*
   *  The end frame method is an alternate way of determining when an
   *  asynchronous renderer has completed rendering a frame. It differs from
   *  Q3View_Sync in that notification of the frame completion is the opposite
   *  direction. 
   *  
   *  With Q3View_Sync the application asks a renderer to finish rendering
   *  a frame, and blocks until the frame is complete.
   *  
   *  With the EndFrame method, the renderer tells the application that is has
   *  completed a frame.
   *
   *  If "Q3View_Sync" is called BEFORE this method has been called, this
   *  method will NOT be called ever.
   *  
   *  If "Q3View_Sync" is called AFTER this method has been called, the
   *  call will return immediately (as the frame has already been completed).
   */
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( void , TQ3ViewEndFrameMethod )(TQ3ViewObject view, void *endFrameData);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( TQ3Status )
  Q3View_SetEndFrameMethod        (TQ3ViewObject          view,
                                   TQ3ViewEndFrameMethod  endFrame,
                                   void *                 endFrameData);
  
  
**************************************************************************** * ** * Push/Pop routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3Push_Submit                   (TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3Status )
  Q3Pop_Submit                    (TQ3ViewObject          view);
  
  EXTERN_API_C( TQ3StateOperatorObject )
  Q3Push_New                      (void);
  
  EXTERN_API_C( TQ3StateOperatorObject )
  Q3Pop_New                       (void);
  
  EXTERN_API_C( TQ3Status )
  Q3StateOperator_Submit          (TQ3StateOperatorObject  stateOperator,
                                   TQ3ViewObject          view);
  
  
**************************************************************************** * ** * Check if bounding box is visible in the viewing frustum. Transforms ** * the bbox by the current local_to_world transformation matrix and ** * does a clip test to see if it lies in the viewing frustum. ** * This can be used by applications to cull out large chunks of scenes ** * that are not going to be visible. ** * ** * The default implementation is to always return kQ3True. Renderers ** * may override this routine however to do the checking. ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Boolean )
  Q3View_IsBoundingBoxVisible     (TQ3ViewObject          view,
                                   const TQ3BoundingBox * bbox);
  
  
**************************************************************************** * ** * Allows display groups to be culled if they are assigned bounding ** * boxes. ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3View_AllowAllGroupCulling     (TQ3ViewObject          view,
                                   TQ3Boolean             allowCulling);
  
  
**************************************************************************** * ** * DrawContext routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3View_SetDrawContext           (TQ3ViewObject          view,
                                   TQ3DrawContextObject   drawContext);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetDrawContext           (TQ3ViewObject          view,
                                   TQ3DrawContextObject * drawContext);
  
  
**************************************************************************** * ** * Graphics State routines ** * ** * The graphics state routines can only be called while rendering (ie. in ** * between calls to start and end rendering calls). If they are called ** * outside of a rendering loop, they will return with error. ** * ** ***************************************************************************

  
  
**************************************************************************** * ** * Transform routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3View_GetLocalToWorldMatrixState (TQ3ViewObject        view,
                                   TQ3Matrix4x4 *         matrix);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetWorldToFrustumMatrixState (TQ3ViewObject      view,
                                   TQ3Matrix4x4 *         matrix);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetFrustumToWindowMatrixState (TQ3ViewObject     view,
                                   TQ3Matrix4x4 *         matrix);
  
  
**************************************************************************** * ** * Style state routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3View_GetBackfacingStyleState  (TQ3ViewObject          view,
                                   TQ3BackfacingStyle *   backfacingStyle);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetInterpolationStyleState (TQ3ViewObject        view,
                                   TQ3InterpolationStyle * interpolationType);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetFillStyleState        (TQ3ViewObject          view,
                                   TQ3FillStyle *         fillStyle);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetHighlightStyleState   (TQ3ViewObject          view,
                                   TQ3AttributeSet *      highlightStyle);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetSubdivisionStyleState (TQ3ViewObject          view,
                                   TQ3SubdivisionStyleData * subdivisionStyle);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetOrientationStyleState (TQ3ViewObject          view,
                                   TQ3OrientationStyle *  fontFacingDirectionStyle);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetReceiveShadowsStyleState (TQ3ViewObject       view,
                                   TQ3Boolean *           receives);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetPickIDStyleState      (TQ3ViewObject          view,
                                   unsigned long *        pickIDStyle);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetPickPartsStyleState   (TQ3ViewObject          view,
                                   TQ3PickParts *         pickPartsStyle);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetAntiAliasStyleState   (TQ3ViewObject          view,
                                   TQ3AntiAliasStyleData * antiAliasData);
  
  
**************************************************************************** * ** * Attribute state routines ** * ** ***************************************************************************

  
  EXTERN_API_C( TQ3Status )
  Q3View_GetDefaultAttributeSet   (TQ3ViewObject          view,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3View_SetDefaultAttributeSet   (TQ3ViewObject          view,
                                   TQ3AttributeSet        attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetAttributeSetState     (TQ3ViewObject          view,
                                   TQ3AttributeSet *      attributeSet);
  
  EXTERN_API_C( TQ3Status )
  Q3View_GetAttributeState        (TQ3ViewObject          view,
                                   TQ3AttributeType       attributeType,
                                   void *                 data);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if PRAGMA_ENUM_ALWAYSINT
      #pragma enumsalwaysint reset
      #ifdef __QD3DVIEW__RESTORE_TWOBYTEINTS
          #pragma fourbyteints off
      #endif
  #elif PRAGMA_ENUM_OPTIONS
      #pragma option enum=reset
  #elif defined(__QD3DVIEW__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 /* __QD3DVIEW__ */
  
  


(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.