topical media & game development
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.