|
|
/*
File: QD3DRenderer.h Contains: Q3Renderer types and routines Version: Technology: Quickdraw 3D 1.6 Release: QuickTime 7.3 Copyright: (c) 2007 (c) 1995-1999 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 __QD3DRENDERER__
#define __QD3DRENDERER__
#ifndef __QD3D__
#include <QD3D.h>
#endif
#ifndef __QD3DSET__
#include <QD3DSet.h>
#endif
#ifndef __QD3DVIEW__
#include <QD3DView.h>
#endif
#ifndef __RAVE__
#include <RAVE.h>
#endif
#if TARGET_OS_MAC
#ifndef __EVENTS__
#include <Events.h>
#endif
#endif /* TARGET_OS_MAC */
#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 __QD3DRENDERER__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 __QD3DRENDERER__RESTORE_PACKED_ENUMS
#pragma options(!pack_enums)
#endif
#endif
/******************************************************************************
** ** ** User Interface Things ** ** ** *****************************************************************************/ #if TARGET_OS_MAC
/*
* A callback to an application's event handling code. This is needed to * support movable modal dialogs. The dialog's event filter calls this * callback with events it does not handle. * If an application handles the event it should return kQ3True. * If the application does not handle the event it must return kQ3False and * the dialog's event filter will pass the event to the system unhandled. */ typedef CALLBACK_API_C( TQ3Boolean , TQ3MacOSDialogEventHandler )(const EventRecord * event); struct TQ3DialogAnchor { TQ3MacOSDialogEventHandler clientEventHandler; }; typedef struct TQ3DialogAnchor TQ3DialogAnchor; #endif /* TARGET_OS_MAC */
#if TARGET_OS_WIN32
struct TQ3DialogAnchor { HWND ownerWindow; }; typedef struct TQ3DialogAnchor TQ3DialogAnchor; #endif /* TARGET_OS_WIN32 */
#if TARGET_OS_UNIX
struct TQ3DialogAnchor { void * notUsed; /* place holder */ }; typedef struct TQ3DialogAnchor TQ3DialogAnchor; #endif /* TARGET_OS_UNIX */
/******************************************************************************
** ** ** Renderer Functions ** ** ** *****************************************************************************/ #if CALL_NOT_IN_CARBON
/*
* Q3Renderer_NewFromType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3RendererObject ) Q3Renderer_NewFromType(TQ3ObjectType rendererObjectType);
/*
* Q3Renderer_GetType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3ObjectType ) Q3Renderer_GetType(TQ3RendererObject renderer);
/* Q3Renderer_Flush has been replaced by Q3View_Flush */ /* Q3Renderer_Sync has been replaced by Q3View_Sync */ #endif /* CALL_NOT_IN_CARBON */
/*
* Q3Renderer_IsInteractive * Determine if this renderer is intended to be used interactively. */ #if CALL_NOT_IN_CARBON
/*
* Q3Renderer_IsInteractive() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Boolean ) Q3Renderer_IsInteractive(TQ3RendererObject renderer);
/*
* Q3Renderer_HasModalConfigure * Determine if this renderer has a modal settings dialog. * * Q3Renderer_ModalConfigure * Have the renderer pop up a modal dialog box to configure its settings. * dialogAnchor - is platform specific data passed by the client to support * movable modal dialogs. * MacOS: this is a callback to the calling application's event handler. * The renderer calls this function with events not handled by the * settings dialog. This is necessary in order to support movable modal * dialogs. An application's event handler must return kQ3True if it * handles the event passed to the callback or kQ3False if not. * An application which doesn't want to support a movable modal configure * dialog should pass NULL for the clientEventHandler of TQ3DialogAnchor. * Win32: this is the HWND of the owning window (typically an application's * main window). * canceled - returns a boolean inditacating that the user canceled the * dialog. * */ /*
* Q3Renderer_HasModalConfigure() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Boolean ) Q3Renderer_HasModalConfigure(TQ3RendererObject renderer);
/*
* Q3Renderer_ModalConfigure() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Renderer_ModalConfigure( TQ3RendererObject renderer, TQ3DialogAnchor dialogAnchor, TQ3Boolean * canceled);
/*
* Q3RendererClass_GetNickNameString * Allows an application to get a renderers name string, the * renderer is responsible for storing this in a localizable format * for example as a resource. This string can then be used to provide * a selection mechanism for an application (for example in a menu). * * If this call returns nil in the supplied string, then the App may * choose to use the class name for the renderer. You should always * try to get the name string before using the class name, since the * class name is not localizable. */ /*
* Q3RendererClass_GetNickNameString() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3RendererClass_GetNickNameString( TQ3ObjectType rendererClassType, TQ3ObjectClassNameString rendererClassString);
/*
* Q3Renderer_GetConfigurationData * Allows an application to collect private renderer configuration data * which it will then save. For example in a preference file or in a * style template. An application should tag this data with the * Renderer's object name. * * if dataBuffer is NULL actualDataSize returns the required size in * bytes of a data buffer large enough to store private data. * * bufferSize is the actual size of the memory block pointed to by * dataBuffer * * actualDataSize - on return the actual number of bytes written to the * buffer or if dataBuffer is NULL the required size of dataBuffer * */ /*
* Q3Renderer_GetConfigurationData() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Renderer_GetConfigurationData( TQ3RendererObject renderer, unsigned char * dataBuffer, unsigned long bufferSize, unsigned long * actualDataSize);
/*
* Q3Renderer_SetConfigurationData() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Renderer_SetConfigurationData( TQ3RendererObject renderer, unsigned char * dataBuffer, unsigned long bufferSize);
/******************************************************************************
** ** ** Interactive Renderer Specific Functions ** ** ** *****************************************************************************/ /* CSG IDs attribute */ #define kQ3AttributeTypeConstructiveSolidGeometryID Q3_OBJECT_TYPE('c','s','g','i')
/* Object IDs, to be applied as attributes on geometries */ #endif /* CALL_NOT_IN_CARBON */
#define kQ3SolidGeometryObjNone (-1)
#define kQ3SolidGeometryObjA 0
#define kQ3SolidGeometryObjB 1
#define kQ3SolidGeometryObjC 2
#define kQ3SolidGeometryObjD 3
#define kQ3SolidGeometryObjE 4
/* Possible CSG equations */ enum TQ3CSGEquation { kQ3CSGEquationAandB = (long)0x88888888, kQ3CSGEquationAandnotB = 0x22222222, kQ3CSGEquationAanBonCad = 0x2F222F22, kQ3CSGEquationnotAandB = 0x44444444, kQ3CSGEquationnAaBorCanB = 0x74747474 }; typedef enum TQ3CSGEquation TQ3CSGEquation;
#if CALL_NOT_IN_CARBON
/*
* Q3InteractiveRenderer_SetCSGEquation() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_SetCSGEquation( TQ3RendererObject renderer, TQ3CSGEquation equation);
/*
* Q3InteractiveRenderer_GetCSGEquation() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_GetCSGEquation( TQ3RendererObject renderer, TQ3CSGEquation * equation);
/*
* Q3InteractiveRenderer_SetPreferences() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_SetPreferences( TQ3RendererObject renderer, long vendorID, long engineID);
/*
* Q3InteractiveRenderer_GetPreferences() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_GetPreferences( TQ3RendererObject renderer, long * vendorID, long * engineID);
/*
* Q3InteractiveRenderer_SetDoubleBufferBypass() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_SetDoubleBufferBypass( TQ3RendererObject renderer, TQ3Boolean bypass);
/*
* Q3InteractiveRenderer_GetDoubleBufferBypass() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_GetDoubleBufferBypass( TQ3RendererObject renderer, TQ3Boolean * bypass);
/*
* Q3InteractiveRenderer_SetRAVEContextHints() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_SetRAVEContextHints( TQ3RendererObject renderer, unsigned long RAVEContextHints);
/*
* Q3InteractiveRenderer_GetRAVEContextHints() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_GetRAVEContextHints( TQ3RendererObject renderer, unsigned long * RAVEContextHints);
/*
* Q3InteractiveRenderer_SetRAVETextureFilter() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_SetRAVETextureFilter( TQ3RendererObject renderer, unsigned long RAVEtextureFilterValue);
/*
* Q3InteractiveRenderer_GetRAVETextureFilter() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_GetRAVETextureFilter( TQ3RendererObject renderer, unsigned long * RAVEtextureFilterValue);
/*
* Q3InteractiveRenderer_CountRAVEDrawContexts() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_CountRAVEDrawContexts( TQ3RendererObject renderer, unsigned long * numRAVEContexts);
#endif /* CALL_NOT_IN_CARBON */
typedef CALLBACK_API_C( void , TQ3RaveDestroyCallback )(TQ3RendererObject renderer); #if CALL_NOT_IN_CARBON
/*
* Q3InteractiveRenderer_GetRAVEDrawContexts() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3InteractiveRenderer_GetRAVEDrawContexts( TQ3RendererObject renderer, TQADrawContext ** raveDrawContextList, TQAEngine ** raveDrawingEnginesList, unsigned long * numRAVEContexts, TQ3RaveDestroyCallback raveDestroyCallback);
/******************************************************************************
** ** ** Renderer View Tools ** ** ** ** You may only call these methods from a plug-in ** ** ** *****************************************************************************/ /*
* Call by a renderer to call the user "idle" method, with progress * information. * * Pass in (view, 0, n) on first call * Pass in (view, 1..n-1, n) during rendering * Pass in (view, n, n) upon completion * * Note: The user must have supplied an idleProgress method with * Q3XView_SetIdleProgressMethod. Otherwise, the generic idle method is * called with no progress data. e.g. the Q3View_SetIdleMethod method * is called instead. (current and final are ignored, essentially.) * * Returns kQ3Failure if rendering is cancelled. */ /*
* Q3XView_IdleProgress() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XView_IdleProgress( TQ3ViewObject view, unsigned long current, unsigned long completed);
/*
* Called by an asynchronous renderer when it completes a frame. */ /*
* Q3XView_EndFrame() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XView_EndFrame(TQ3ViewObject view);
/******************************************************************************
** ** ** Renderer AttributeSet Tools ** ** ** ** You may only call these methods from a plug-in ** ** ** *****************************************************************************/ /*
* Faster access to geometry attribute sets. * * Returns pointer to INTERNAL data structure for elements and attributes * in an attributeSet, or NULL if no attribute exists. * * For attributes of type kQ3AttributeType..., the internal data structure * is identical to the data structure used in Q3AttributeSet_Add. */ /*
* Q3XAttributeSet_GetPointer() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void * ) Q3XAttributeSet_GetPointer( TQ3AttributeSet attributeSet, TQ3AttributeType attributeType);
#endif /* CALL_NOT_IN_CARBON */
enum { kQ3XAttributeMaskNone = 0L, kQ3XAttributeMaskSurfaceUV = 1 << (kQ3AttributeTypeSurfaceUV - 1), kQ3XAttributeMaskShadingUV = 1 << (kQ3AttributeTypeShadingUV - 1), kQ3XAttributeMaskNormal = 1 << (kQ3AttributeTypeNormal - 1), kQ3XAttributeMaskAmbientCoefficient = 1 << (kQ3AttributeTypeAmbientCoefficient - 1), kQ3XAttributeMaskDiffuseColor = 1 << (kQ3AttributeTypeDiffuseColor - 1), kQ3XAttributeMaskSpecularColor = 1 << (kQ3AttributeTypeSpecularColor - 1), kQ3XAttributeMaskSpecularControl = 1 << (kQ3AttributeTypeSpecularControl - 1), kQ3XAttributeMaskTransparencyColor = 1 << (kQ3AttributeTypeTransparencyColor - 1), kQ3XAttributeMaskSurfaceTangent = 1 << (kQ3AttributeTypeSurfaceTangent - 1), kQ3XAttributeMaskHighlightState = 1 << (kQ3AttributeTypeHighlightState - 1), kQ3XAttributeMaskSurfaceShader = 1 << (kQ3AttributeTypeSurfaceShader - 1), kQ3XAttributeMaskCustomAttribute = (long)0x80000000, kQ3XAttributeMaskAll = 0x800007FF, kQ3XAttributeMaskInherited = 0x03FF, kQ3XAttributeMaskInterpolated = kQ3XAttributeMaskSurfaceUV | kQ3XAttributeMaskShadingUV | kQ3XAttributeMaskNormal | kQ3XAttributeMaskAmbientCoefficient | kQ3XAttributeMaskDiffuseColor | kQ3XAttributeMaskSpecularColor | kQ3XAttributeMaskSpecularControl | kQ3XAttributeMaskTransparencyColor | kQ3XAttributeMaskSurfaceTangent };
typedef unsigned long TQ3XAttributeMask; #if CALL_NOT_IN_CARBON
/*
* Q3XAttributeSet_GetMask() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3XAttributeMask ) Q3XAttributeSet_GetMask(TQ3AttributeSet attributeSet);
/******************************************************************************
** ** ** Renderer Draw Context Tools ** ** ** *****************************************************************************/ #endif /* CALL_NOT_IN_CARBON */
typedef struct OpaqueTQ3XDrawRegion* TQ3XDrawRegion; #if CALL_NOT_IN_CARBON
/*
* Q3XDrawContext_GetDrawRegion() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawContext_GetDrawRegion( TQ3DrawContextObject drawContext, TQ3XDrawRegion * drawRegion);
#endif /* CALL_NOT_IN_CARBON */
enum TQ3XDrawContextValidationMasks { kQ3XDrawContextValidationClearFlags = 0x00000000, kQ3XDrawContextValidationDoubleBuffer = 1 << 0, kQ3XDrawContextValidationShader = 1 << 1, kQ3XDrawContextValidationClearFunction = 1 << 2, kQ3XDrawContextValidationActiveBuffer = 1 << 3, kQ3XDrawContextValidationInternalOffScreen = 1 << 4, kQ3XDrawContextValidationPane = 1 << 5, kQ3XDrawContextValidationMask = 1 << 6, kQ3XDrawContextValidationDevice = 1 << 7, kQ3XDrawContextValidationWindow = 1 << 8, kQ3XDrawContextValidationWindowSize = 1 << 9, kQ3XDrawContextValidationWindowClip = 1 << 10, kQ3XDrawContextValidationWindowPosition = 1 << 11, kQ3XDrawContextValidationPlatformAttributes = 1 << 12, kQ3XDrawContextValidationForegroundShader = 1 << 13, kQ3XDrawContextValidationBackgroundShader = 1 << 14, kQ3XDrawContextValidationColorPalette = 1 << 15, kQ3XDrawContextValidationAll = (long)0xFFFFFFFF }; typedef enum TQ3XDrawContextValidationMasks TQ3XDrawContextValidationMasks;
typedef unsigned long TQ3XDrawContextValidation; #if CALL_NOT_IN_CARBON
/*
* Q3XDrawContext_ClearValidationFlags() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawContext_ClearValidationFlags(TQ3DrawContextObject drawContext);
/*
* Q3XDrawContext_GetValidationFlags() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawContext_GetValidationFlags( TQ3DrawContextObject drawContext, TQ3XDrawContextValidation * validationFlags);
/******************************************************************************
** ** ** Renderer Draw Region Tools ** ** ** *****************************************************************************/ #endif /* CALL_NOT_IN_CARBON */
enum TQ3XDevicePixelType { /* These do not indicate byte ordering */ kQ3XDevicePixelTypeInvalid = 0, /* Unknown, un-initialized type */ kQ3XDevicePixelTypeRGB32 = 1, /* Alpha:8 (ignored), R:8, G:8, B:8 */ kQ3XDevicePixelTypeARGB32 = 2, /* Alpha:8, R:8, G:8, B:8 */ kQ3XDevicePixelTypeRGB24 = 3, /* 24 bits/pixel, R:8, G:8, B:8 */ kQ3XDevicePixelTypeRGB16 = 4, /* Alpha:1 (ignored), R:5, G:5, B:5 */ kQ3XDevicePixelTypeARGB16 = 5, /* Alpha:1, R:5, G:5, B:5 */ kQ3XDevicePixelTypeRGB16_565 = 6, /* 16 bits/pixel, R:5, G:6, B:5 */ kQ3XDevicePixelTypeIndexed8 = 7, /* 8-bit color table index */ kQ3XDevicePixelTypeIndexed4 = 8, /* 4-bit color table index */ kQ3XDevicePixelTypeIndexed2 = 9, /* 2-bit color table index */ kQ3XDevicePixelTypeIndexed1 = 10 /* 1-bit color table index */ }; typedef enum TQ3XDevicePixelType TQ3XDevicePixelType;
enum TQ3XClipMaskState { kQ3XClipMaskFullyExposed = 0, kQ3XClipMaskPartiallyExposed = 1, kQ3XClipMaskNotExposed = 2 }; typedef enum TQ3XClipMaskState TQ3XClipMaskState;
struct TQ3XColorDescriptor { unsigned long redShift; unsigned long redMask; unsigned long greenShift; unsigned long greenMask; unsigned long blueShift; unsigned long blueMask; unsigned long alphaShift; unsigned long alphaMask; }; typedef struct TQ3XColorDescriptor TQ3XColorDescriptor; struct TQ3XDrawRegionDescriptor { unsigned long width; unsigned long height; unsigned long rowBytes; unsigned long pixelSize; TQ3XDevicePixelType pixelType; TQ3XColorDescriptor colorDescriptor; TQ3Endian bitOrder; TQ3Endian byteOrder; TQ3Bitmap * clipMask; }; typedef struct TQ3XDrawRegionDescriptor TQ3XDrawRegionDescriptor; enum TQ3XDrawRegionServicesMasks { kQ3XDrawRegionServicesNoneFlag = 0L, kQ3XDrawRegionServicesClearFlag = 1 << 0, kQ3XDrawRegionServicesDontLockDDSurfaceFlag = 1 << 1 }; typedef enum TQ3XDrawRegionServicesMasks TQ3XDrawRegionServicesMasks;
typedef unsigned long TQ3XDrawRegionServices; typedef CALLBACK_API_C( void , TQ3XDrawRegionRendererPrivateDeleteMethod )(void * rendererPrivate); #if CALL_NOT_IN_CARBON
/*
* Q3XDrawRegion_GetDeviceScaleX() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetDeviceScaleX( TQ3XDrawRegion drawRegion, float * deviceScaleX);
/*
* Q3XDrawRegion_GetDeviceScaleY() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetDeviceScaleY( TQ3XDrawRegion drawRegion, float * deviceScaleY);
/*
* Q3XDrawRegion_GetDeviceOffsetX() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetDeviceOffsetX( TQ3XDrawRegion drawRegion, float * deviceOffsetX);
/*
* Q3XDrawRegion_GetDeviceOffsetY() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetDeviceOffsetY( TQ3XDrawRegion drawRegion, float * deviceOffsetX);
/*
* Q3XDrawRegion_GetWindowScaleX() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetWindowScaleX( TQ3XDrawRegion drawRegion, float * windowScaleX);
/*
* Q3XDrawRegion_GetWindowScaleY() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetWindowScaleY( TQ3XDrawRegion drawRegion, float * windowScaleY);
/*
* Q3XDrawRegion_GetWindowOffsetX() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetWindowOffsetX( TQ3XDrawRegion drawRegion, float * windowOffsetX);
/*
* Q3XDrawRegion_GetWindowOffsetY() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetWindowOffsetY( TQ3XDrawRegion drawRegion, float * windowOffsetY);
/*
* Q3XDrawRegion_IsActive() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_IsActive( TQ3XDrawRegion drawRegion, TQ3Boolean * isActive);
/*
* Q3XDrawRegion_GetNextRegion() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetNextRegion( TQ3XDrawRegion drawRegion, TQ3XDrawRegion * nextDrawRegion);
/*
* One of the next two functions must be called before using a draw region */ /*
* Use this Start function if double buffering/image access services from the * Draw Context are not needed, you may still request clear for example */ /*
* Q3XDrawRegion_Start() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_Start( TQ3XDrawRegion drawRegion, TQ3XDrawRegionServices services, TQ3XDrawRegionDescriptor ** descriptor);
/*
* Use this Start function if double buffering or image access services from * the Draw Context are needed. */ /*
* Q3XDrawRegion_StartAccessToImageBuffer() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_StartAccessToImageBuffer( TQ3XDrawRegion drawRegion, TQ3XDrawRegionServices services, TQ3XDrawRegionDescriptor ** descriptor, void ** image);
/*
* This function is used to indicate that access to a DrawRegion is ended. */ /*
* Q3XDrawRegion_End() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_End(TQ3XDrawRegion drawRegion);
/*
* Q3XDrawRegion_GetDeviceTransform() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetDeviceTransform( TQ3XDrawRegion drawRegion, TQ3Matrix4x4 ** deviceTransform);
/*
* Q3XDrawRegion_GetClipFlags() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetClipFlags( TQ3XDrawRegion drawRegion, TQ3XClipMaskState * clipMaskState);
/*
* Q3XDrawRegion_GetClipMask() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetClipMask( TQ3XDrawRegion drawRegion, TQ3Bitmap ** clipMask);
#endif /* CALL_NOT_IN_CARBON */
#if TARGET_OS_MAC
#if CALL_NOT_IN_CARBON
/*
* Q3XDrawRegion_GetClipRegion() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetClipRegion( TQ3XDrawRegion drawRegion, RgnHandle * rgnHandle);
/*
* Q3XDrawRegion_GetGDHandle() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetGDHandle( TQ3XDrawRegion drawRegion, GDHandle * gdHandle);
#endif /* CALL_NOT_IN_CARBON */
#endif /* TARGET_OS_MAC */
#if CALL_NOT_IN_CARBON
/*
* Q3XDrawRegion_GetRendererPrivate() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetRendererPrivate( TQ3XDrawRegion drawRegion, void ** rendererPrivate);
/*
* Q3XDrawRegion_SetRendererPrivate() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_SetRendererPrivate( TQ3XDrawRegion drawRegion, const void * rendererPrivate, TQ3XDrawRegionRendererPrivateDeleteMethod deleteMethod);
/*
* Q3XDrawRegion_SetUseDefaultRendererFlag() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_SetUseDefaultRendererFlag( TQ3XDrawRegion drawRegion, TQ3Boolean flag);
/*
* Q3XDrawRegion_GetUseDefaultRendererFlag() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XDrawRegion_GetUseDefaultRendererFlag( TQ3XDrawRegion drawRegion, TQ3Boolean * useDefaultRenderingFlag);
/******************************************************************************
** ** ** Renderer Class Methods ** ** ** *****************************************************************************/ /*
* Methods from Object * kQ3XMethodTypeObjectClassRegister * kQ3XMethodTypeObjectClassUnregister * kQ3XMethodTypeObjectNew * kQ3XMethodTypeObjectDelete * kQ3XMethodTypeObjectRead * kQ3XMethodTypeObjectTraverse * kQ3XMethodTypeObjectWrite * * Methods from Shared * kQ3MethodTypeSharedEdited * * Renderer Methods * * The renderer methods should be implemented according to the type * of renderer being written. * * For the purposes of documentation, there are two basic types of * renderers: * * Interactive * Interactive Renderer * WireFrame Renderer * * Deferred * a ray-tracer * painter's algorithm renderer (cached in a BSP triangle tree) * an artistic renderer (simulates a pencil drawing, etc.) * * The main difference is how each renderer handles incoming state and * geometry. * * An interactive renderer immediately transforms, culls, and shades * incoming geometry and performs rasterization. For example, in a * single-buffered WireFrame renderer, you will see a new triangle * immediately after Q3Triangle_Draw (if it's visible, of course). * * A deferred renderer caches the view state and each geometry, * converting into any internal queue of drawing commands. Rasterization * is not actually performed until all data has been submitted. * * For example, a ray-tracer may not rasterize anything until the * end of the rendering loop, or until an EndFrame call is made. */
/******************************************************************************
** ** ** Renderer User Interface Methods ** ** ** *****************************************************************************/ /*
* kQ3XMethodTypeRendererIsInteractive * * There is no actual method with this - the metahandler simply returns * "(TQ3XFunctionPointer)kQ3True" for this "method" if the renderer is * intended to be used in interactive settings, and * "(TQ3XFunctionPointer)kQ3False" otherwise. * * If neither value is specified in the metahandler, the renderer * is *assumed to be non-interactive*!!! * * OPTIONAL */ #endif /* CALL_NOT_IN_CARBON */
enum { kQ3XMethodTypeRendererIsInteractive = FOUR_CHAR_CODE('isin') };
/*
* TQ3XRendererModalConfigureMethod * * This method should pop up a modal dialog to edit the renderer settings * found in the renderer private. * * dialogAnchor - is platform specific data passed by the client to support * movable modal dialogs. * MacOS: this is a callback to the calling application's event handler. * The renderer calls this function with events not handled by the * settings dialog. This is necessary in order to support movable modal * dialogs. An application's event handler must return kQ3True if it * handles the event passed to the callback or kQ3False if not. * An application which doesn't want to support a movable modal configure * dialog should pass NULL for the clientEventHandler of TQ3DialogAnchor. * A renderer should implement a non-movable style dialog in that case. * Win32: this is the HWND of the owning window (typically an application's * main window). (Win32 application modal dialogs are always movable.) * canceled - returns a boolean inditacating that the user canceled the * dialog. * * OPTIONAL */ enum { kQ3XMethodTypeRendererModalConfigure = FOUR_CHAR_CODE('rdmc') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererModalConfigureMethod )(TQ3RendererObject renderer, TQ3DialogAnchor dialogAnchor, TQ3Boolean *canceled, void *rendererPrivate); /*
* kQ3XMethodTypeRendererGetNickNameString * * Allows an application to collect the name of the renderer for * display in a user interface item such as a menu. * * If dataBuffer is NULL actualDataSize returns the required size in * bytes of a data buffer large enough to store the renderer name. * * bufferSize is the actual size of the memory block pointed to by * dataBuffer * * actualDataSize - on return the actual number of bytes written to the * buffer or if dataBuffer is NULL the required size of dataBuffer * * OPTIONAL */ enum { kQ3XMethodTypeRendererGetNickNameString = FOUR_CHAR_CODE('rdns') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererGetNickNameStringMethod )(unsigned char *dataBuffer, unsigned long bufferSize, unsigned long *actualDataSize); /*
* kQ3XMethodTypeRendererGetConfigurationData * * Allows an application to collect private configuration data from the * renderer which it will then save. For example in a preference file, * a registry key (on Windows) or in a style template. An application * should tag this data with the renderer's object name. * * If dataBuffer is NULL actualDataSize returns the required size in * bytes of a data buffer large enough to store private data. * * bufferSize is the actual size of the memory block pointed to by * dataBuffer * * actualDataSize - on return the actual number of bytes written to the * buffer or if dataBuffer is NULL the required size of dataBuffer * * OPTIONAL */ enum { kQ3XMethodTypeRendererGetConfigurationData = FOUR_CHAR_CODE('rdgp') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererGetConfigurationDataMethod )(TQ3RendererObject renderer, unsigned char *dataBuffer, unsigned long bufferSize, unsigned long *actualDataSize, void *rendererPrivate); /*
* TQ3XRendererSetConfigurationDataMethod * * Allows an application to pass private configuration data which has * previously been obtained from a renderer via * Q3Renderer_GetConfigurationData. For example in a preference file or * in a style template. An application should tag this data with the * renderer's object name. * * bufferSize is the actual size of the memory block pointed to by * dataBuffer * * OPTIONAL */ enum { kQ3XMethodTypeRendererSetConfigurationData = FOUR_CHAR_CODE('rdsp') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererSetConfigurationDataMethod )(TQ3RendererObject renderer, unsigned char *dataBuffer, unsigned long bufferSize, void *rendererPrivate); /******************************************************************************
** ** ** Renderer Drawing State Methods ** ** ** *****************************************************************************/ /*
* TQ3RendererStartFrame * * The StartFrame method is called first at Q3View_StartRendering * and should: * - initialize any renderer state to defaults * - extract any and all useful data from the drawContext * * If your renderer passed in kQ3RendererFlagClearBuffer at * registration, then it should also: * - clear the drawContext * * When clearing, your renderer may opt to: * - NOT clear anything (if you touch every pixel, for example) * - to clear with your own routine, or * - to use the draw context default clear method by calling * Q3DrawContext_Clear. Q3DrawContext_Clear takes advantage of * any available hardware in the system for clearing. * * This call also signals the start of all default submit commands from * the view. The renderer will receive updates for the default view * state via its Update methods before StartPass is called. * * REQUIRED */ enum { kQ3XMethodTypeRendererStartFrame = FOUR_CHAR_CODE('rdcl') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererStartFrameMethod )(TQ3ViewObject view, void *rendererPrivate, TQ3DrawContextObject drawContext); /*
* kQ3XMethodTypeRendererStartPass * TQ3XRendererStartPassMethod * * The StartPass method is called during Q3View_StartRendering but after * the StartFrame command. It should: * - collect camera and light information * * If your renderer supports deferred camera transformation, camera is the * main camera which will be submitted in the hierarchy somewhere. It * is never NULL. * * If your renderer does not support deferred camera transformation, camera * is the transformed camera. * * If your renderer supports deferred light transformation, lights will be * NULL, and will be submitted to your light draw methods instead. * * This call signals the end of the default update state, and the start of * submit commands from the user to the view. * * REQUIRED */ enum { kQ3XMethodTypeRendererStartPass = FOUR_CHAR_CODE('rdst') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererStartPassMethod )(TQ3ViewObject view, void *rendererPrivate, TQ3CameraObject camera, TQ3GroupObject lightGroup); /*
* kQ3XMethodTypeRendererFlushFrame * TQ3XRendererFlushFrameMethod * * This call is only implemented by asynchronous renderers. * * The FlushFrame method is called between the StartPass and EndPass * methods and is called when the user wishes to flush any asynchronous * drawing tasks (which draw to the drawcontext), but does not want * to block. * * The result of this call is that an image should "eventually" appear * asynchronously. * * For asynchronous rendering, this call is non-blocking. * * An interactive renderer should ensure that all received * geometries are drawn in the image. * * An interactive renderer that talks to hardware should force * the hardware to generate an image. * * A deferred renderer should exhibit a similar behaviour, * though it is not required. A deferred renderer should spawn * a process that generates a partial image from the currently * accumulated drawing state. * * However, for renderers such as ray-tracers which generally are * quite compute-intensive, FlushFrame is not required and is a no-op. * * OPTIONAL */ enum { kQ3XMethodTypeRendererFlushFrame = FOUR_CHAR_CODE('rdfl') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererFlushFrameMethod )(TQ3ViewObject view, void *rendererPrivate, TQ3DrawContextObject drawContext); /*
* kQ3XMethodTypeRendererEndPass * TQ3XRendererEndPassMethod * * The EndPass method is called at Q3View_EndRendering and signals * the end of submit commands to the view. * * If an error occurs, the renderer should call Q3XError_Post and * return kQ3ViewStatusError. * * If a renderer requires another pass on the renderering data, * it should return kQ3ViewStatusRetraverse. * * If rendering was cancelled, this function will not be called * and the view will handle returning kQ3ViewStatusCancelled; * * Otherwise, your renderer should begin completing the process of * generating the image in the drawcontext. If you have buffered * any drawing data, flush it. RendererEnd should have a similar * effect as RendererFlushFrame. * * If the renderer is synchronous: * - complete rendering of the entire frame * if the renderer supports kQ3RendererClassSupportDoubleBuffer * - Update the front buffer * else * - DrawContext will update the front buffer after returning * * If the renderer is asynchronous * - spawn rendering thread for entire frame * if the renderer supports kQ3RendererClassSupportDoubleBuffer, * - you must eventually update the front buffer asynchronously * else * - you must eventually update the back buffer asynchronously * * REQUIRED */ enum { kQ3XMethodTypeRendererEndPass = FOUR_CHAR_CODE('rded') };
typedef CALLBACK_API_C( TQ3ViewStatus , TQ3XRendererEndPassMethod )(TQ3ViewObject view, void *rendererPrivate); /*
* kQ3XMethodTypeRendererEndFrame * TQ3XRendererEndFrame * * This call is only implemented by asynchronous renderers. * * The EndFrame method is called from Q3View_Sync, which is * called after Q3View_EndRendering and signals that the user * wishes to see the completed image and is willing to block. * * If your renderer supports kQ3RendererFlagDoubleBuffer * - update the front buffer completely * else * - update the back buffer completely * * This call is equivalent in functionality to RendererFlushFrame * but blocks until the image is completed. * * If no method is supplied, the default is a no-op. * * NOTE: Registering a method of this type indicates that your renderer will * be rendering after Q3View_EndRendering has been called. * * OPTIONAL */ enum { kQ3XMethodTypeRendererEndFrame = FOUR_CHAR_CODE('rdsy') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererEndFrameMethod )(TQ3ViewObject view, void *rendererPrivate, TQ3DrawContextObject drawContext); /*
* The RendererCancel method is called after Q3View_StartRendering * and signals the termination of all rendering operations. * * A renderer should clean up any cached data, and cancel all * rendering operations. * * If called before Q3View_EndRendering, the RendererEnd method * is NOT called. * * If called after Q3View_EndRendering, the renderer should kill * any threads and terminate any further rendering. * * REQUIRED */ enum { kQ3XMethodTypeRendererCancel = FOUR_CHAR_CODE('rdab') };
typedef CALLBACK_API_C( void , TQ3XRendererCancelMethod )(TQ3ViewObject view, void *rendererPrivate); /******************************************************************************
** ** ** Renderer DrawContext Methods ** ** ** *****************************************************************************/ /*
* kQ3XMethodTypeRendererPush * TQ3XRendererPushMethod * * kQ3XMethodTypeRendererPop * TQ3XRendererPopMethod * * These methods are called whenever the graphics state in the view * is pushed or popped. The user may isolate state by calling: * * Q3Attribute_Submit(kQ3AttributeTypeDiffuseColor, &red, view); * Q3Attribute_Submit(kQ3AttributeTypeTransparencyColor, &blue, view); * Q3Attribute_Submit(kQ3AttributeTypeSpecularColor, &white, view); * Q3Box_Submit(&unitBox, view); * Q3TranslateTransform_Submit(&unitVector, view); * Q3Push_Submit(view); * Q3Attribute_Submit(kQ3AttributeTypeDiffuseColor, &blue, view); * Q3Attribute_Submit(kQ3AttributeTypeTransparencyColor, &green, view); * Q3Box_Submit(&unitBox, view); * Q3Pop_Submit(view); * Q3TranslateTransform_Submit(&unitVector, view); * Q3Box_Submit(&unitBox, view); * * or by submitting a display group which pushes and pops. * * If you support RendererPush and RendererPop in your renderer: * - you must maintain your drawing state as a stack, as well. * - you will not be updated with the popped state after * RendererPop is called. * * If you do not support Push and Pop in your renderer: * - you may maintain a single copy of the drawing state. * - you will be updated with changed fields after the view stack is * popped. * * A renderer that supports Push and Pop gets called in the following * sequence (from example above): * * RendererUpdateAttributeDiffuseColor(&red,...) * RendererUpdateAttributeTransparencyColor(&blue,...) * RendererUpdateAttributeSpecularColor(&white,...) * RendererUpdateMatrixLocalToWorld(...) * RendererSubmitGeometryBox(...) * RendererPush(...) * RendererUpdateAttributeDiffuseColor(&blue,...) * RendererUpdateAttributeTransparencyColor(&green,...) * RendererSubmitGeometryBox(...) * RendererPop(...) * RendererUpdateMatrixLocalToWorld(...) * RendererSubmitGeometryBox(...) * * A renderer that does not supports Push and Pop gets called in the * following sequence: * * RendererUpdateAttributeDiffuseColor(&red,...) * RendererUpdateAttributeTransparencyColor(&blue,...) * RendererUpdateAttributeSpecularColor(&white,...) * RendererUpdateMatrixLocalToWorld(...) * RendererSubmitGeometryBox(...) * RendererUpdateAttributeDiffuseColor(&blue,...) * RendererUpdateAttributeTransparencyColor(&green,...) * RendererSubmitGeometryBox(...) * RendererUpdateAttributeDiffuseColor(&red,...) * RendererUpdateAttributeTransparencyColor(&blue,...) * RendererUpdateMatrixLocalToWorld(...) * RendererSubmitGeometryBox(...) * */ enum { kQ3XMethodTypeRendererPush = FOUR_CHAR_CODE('rdps') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererPushMethod )(TQ3ViewObject view, void *rendererPrivate); enum { kQ3XMethodTypeRendererPop = FOUR_CHAR_CODE('rdpo') };
typedef CALLBACK_API_C( TQ3Status , TQ3XRendererPopMethod )(TQ3ViewObject view, void *rendererPrivate); /******************************************************************************
** ** ** Renderer Cull Methods ** ** ** *****************************************************************************/ /*
* kQ3XMethodTypeRendererIsBoundingBoxVisible * TQ3XRendererIsBoundingBoxVisibleMethod * * This method is called to cull complex groups and geometries * given their bounding box in local space. * * It should transform the local-space bounding box coordinates to * frustum space and return a TQ3Boolean return value indicating * whether the box appears within the viewing frustum. * * If no method is supplied, the default behavior is to return * kQ3True. * */ enum { kQ3XMethodTypeRendererIsBoundingBoxVisible = FOUR_CHAR_CODE('rdbx') };
typedef CALLBACK_API_C( TQ3Boolean , TQ3XRendererIsBoundingBoxVisibleMethod )(TQ3ViewObject view, void *rendererPrivate, const TQ3BoundingBox *bBox);
/******************************************************************************
** ** ** Renderer Object Support Methods ** ** ** *****************************************************************************/ /*
* Drawing methods (Geometry, Camera, Lights) * */ /*
* Geometry MetaHandler * * This metaHandler is required to support * * kQ3GeometryTypeTriangle * kQ3GeometryTypeLine * kQ3GeometryTypePoint * kQ3GeometryTypeMarker * kQ3GeometryTypePixmapMarker * * REQUIRED */ enum { kQ3XMethodTypeRendererSubmitGeometryMetaHandler = FOUR_CHAR_CODE('rdgm') };
typedef CALLBACK_API_C( TQ3XFunctionPointer , TQ3XRendererSubmitGeometryMetaHandlerMethod )(TQ3ObjectType geometryType); /*
* The TQ3XRendererSubmitGeometryMetaHandlerMethod switches on geometryType * of kQ3GeometryTypeFoo and returns methods of type: */ typedef CALLBACK_API_C( TQ3Status , TQ3XRendererSubmitGeometryMethod )(TQ3ViewObject view, void *rendererPrivate, TQ3GeometryObject geometry, const void *publicData); /*
* Camera MetaHandler * * This metaHandler, if supplied, indicates that your renderer * handles deferred transformation of the main camera within a scene. * * If not supplied, or an unsupported camera is used, the view will do * the transformation for the renderer and pass in a camera in the * StartPass method. * * OPTIONAL */ enum { kQ3XMethodTypeRendererSubmitCameraMetaHandler = FOUR_CHAR_CODE('rdcm') };
typedef CALLBACK_API_C( TQ3XFunctionPointer , TQ3XRendererSubmitCameraMetaHandlerMethod )(TQ3ObjectType cameraType); /*
* The TQ3XRendererSubmitCameraMetaHandlerMethod switches on cameraType * of kQ3CameraTypeFoo and returns methods of type: */ typedef CALLBACK_API_C( TQ3Status , TQ3XRendererSubmitCameraMethod )(TQ3ViewObject view, void *rendererPrivate, TQ3CameraObject camera, const void *publicData); /*
* Light MetaHandler * * This metaHandler, if supplied, indicates that your renderer * handles deferred transformation of lights within a scene. * * If an unsupported light is encountered, it is ignored. * * OPTIONAL */ enum { kQ3XMethodTypeRendererSubmitLightMetaHandler = FOUR_CHAR_CODE('rdlg') };
typedef CALLBACK_API_C( TQ3XFunctionPointer , TQ3XRendererSubmitLightMetaHandlerMethod )(TQ3ObjectType lightType); /*
* The TQ3XRendererSubmitLightMetaHandlerMethod switches on lightType * of kQ3LightTypeFoo and returns methods of type: */ typedef CALLBACK_API_C( TQ3Status , TQ3XRendererSubmitLightMethod )(TQ3ViewObject view, void *rendererPrivate, TQ3LightObject light, const void *publicData); /*
* * Update methods * * They are called whenever the state has changed. If the renderer supports * the RendererPush and RendererPop methods, it must maintain its own state * stack. Updates are not called for changed data when the view stack is * popped. * * See the comments for the RendererPush and RendererPop methods above * for an example of how data is updated. * */ /*
* Style */ enum { kQ3XMethodTypeRendererUpdateStyleMetaHandler = FOUR_CHAR_CODE('rdyu') };
typedef CALLBACK_API_C( TQ3XFunctionPointer , TQ3XRendererUpdateStyleMetaHandlerMethod )(TQ3ObjectType styleType); /*
* The TQ3XRendererUpdateStyleMetaHandlerMethod switches on styleType * of kQ3StyleTypeFoo and returns methods of type: */ typedef CALLBACK_API_C( TQ3Status , TQ3XRendererUpdateStyleMethod )(TQ3ViewObject view, void *rendererPrivate, const void *publicData); /*
* Attributes */ enum { kQ3XMethodTypeRendererUpdateAttributeMetaHandler = FOUR_CHAR_CODE('rdau') };
typedef CALLBACK_API_C( TQ3XFunctionPointer , TQ3XRendererUpdateAttributeMetaHandlerMethod )(TQ3AttributeType attributeType); /*
* The TQ3XRendererUpdateStyleMetaHandlerMethod switches on attributeType * of kQ3AttributeTypeFoo and returns methods of type: */ typedef CALLBACK_API_C( TQ3Status , TQ3XRendererUpdateAttributeMethod )(TQ3ViewObject view, void *rendererPrivate, const void *publicData); /*
* Shaders */ enum { kQ3XMethodTypeRendererUpdateShaderMetaHandler = FOUR_CHAR_CODE('rdsu') };
typedef CALLBACK_API_C( TQ3XFunctionPointer , TQ3XRendererUpdateShaderMetaHandlerMethod )(TQ3ObjectType shaderType); /*
* The TQ3XRendererUpdateShaderMetaHandlerMethod switches on shaderType * of kQ3ShaderTypeFoo and returns methods of type: */ typedef CALLBACK_API_C( TQ3Status , TQ3XRendererUpdateShaderMethod )(TQ3ViewObject view, void *rendererPrivate, TQ3Object *shaderObject); /*
* Matrices */ enum { kQ3XMethodTypeRendererUpdateMatrixMetaHandler = FOUR_CHAR_CODE('rdxu') };
typedef TQ3XMetaHandler TQ3XRendererUpdateMatrixMetaHandlerMethod; /*
* The TQ3XRendererUpdateShaderMetaHandlerMethod switches on methods * of the form kQ3MethodTypeRendererUpdateMatrixFoo: */ enum { kQ3XMethodTypeRendererUpdateMatrixLocalToWorld = FOUR_CHAR_CODE('ulwx') };
enum { kQ3XMethodTypeRendererUpdateMatrixLocalToWorldInverse = FOUR_CHAR_CODE('ulwi') };
enum { kQ3XMethodTypeRendererUpdateMatrixLocalToWorldInverseTranspose = FOUR_CHAR_CODE('ulwt') };
enum { kQ3XMethodTypeRendererUpdateMatrixLocalToCamera = FOUR_CHAR_CODE('ulcx') };
enum { kQ3XMethodTypeRendererUpdateMatrixLocalToFrustum = FOUR_CHAR_CODE('ulfx') };
enum { kQ3XMethodTypeRendererUpdateMatrixWorldToFrustum = FOUR_CHAR_CODE('uwfx') };
/*
* and returns methods of type: */ typedef CALLBACK_API_C( TQ3Status , TQ3XRendererUpdateMatrixMethod )(TQ3ViewObject view, void *rendererPrivate, const TQ3Matrix4x4 *matrix);
#if PRAGMA_ENUM_ALWAYSINT
#pragma enumsalwaysint reset
#ifdef __QD3DRENDERER__RESTORE_TWOBYTEINTS
#pragma fourbyteints off
#endif
#elif PRAGMA_ENUM_OPTIONS
#pragma option enum=reset
#elif defined(__QD3DRENDERER__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 /* __QD3DRENDERER__ */
|