mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 14:46:53 +00:00
531 lines
15 KiB
C
531 lines
15 KiB
C
|
/*
|
||
|
File: QD3DSet.h
|
||
|
|
||
|
Contains: Q3Set 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 __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_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
|
||
|
/*
|
||
|
* Q3Set_New()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3SetObject )
|
||
|
Q3Set_New(void);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3Set_GetType()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3ObjectType )
|
||
|
Q3Set_GetType(TQ3SetObject theSet);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3Set_Add()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Status )
|
||
|
Q3Set_Add(
|
||
|
TQ3SetObject theSet,
|
||
|
TQ3ElementType theType,
|
||
|
const void * data);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3Set_Get()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Status )
|
||
|
Q3Set_Get(
|
||
|
TQ3SetObject theSet,
|
||
|
TQ3ElementType theType,
|
||
|
void * data);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3Set_Contains()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Boolean )
|
||
|
Q3Set_Contains(
|
||
|
TQ3SetObject theSet,
|
||
|
TQ3ElementType theType);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3Set_Clear()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Status )
|
||
|
Q3Set_Clear(
|
||
|
TQ3SetObject theSet,
|
||
|
TQ3ElementType theType);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3Set_Empty()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
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
|
||
|
*/
|
||
|
/*
|
||
|
* Q3Set_GetNextElementType()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
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
|
||
|
/*
|
||
|
* Q3Attribute_Submit()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Status )
|
||
|
Q3Attribute_Submit(
|
||
|
TQ3AttributeType attributeType,
|
||
|
const void * data,
|
||
|
TQ3ViewObject view);
|
||
|
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
** **
|
||
|
** AttributeSet Routines **
|
||
|
** **
|
||
|
*****************************************************************************/
|
||
|
/*
|
||
|
* Q3AttributeSet_New()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3AttributeSet )
|
||
|
Q3AttributeSet_New(void);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3AttributeSet_Add()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Status )
|
||
|
Q3AttributeSet_Add(
|
||
|
TQ3AttributeSet attributeSet,
|
||
|
TQ3AttributeType theType,
|
||
|
const void * data);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3AttributeSet_Contains()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Boolean )
|
||
|
Q3AttributeSet_Contains(
|
||
|
TQ3AttributeSet attributeSet,
|
||
|
TQ3AttributeType attributeType);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3AttributeSet_Get()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Status )
|
||
|
Q3AttributeSet_Get(
|
||
|
TQ3AttributeSet attributeSet,
|
||
|
TQ3AttributeType theType,
|
||
|
void * data);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3AttributeSet_Clear()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Status )
|
||
|
Q3AttributeSet_Clear(
|
||
|
TQ3AttributeSet attributeSet,
|
||
|
TQ3AttributeType theType);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3AttributeSet_Empty()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
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
|
||
|
*/
|
||
|
/*
|
||
|
* Q3AttributeSet_GetNextAttributeType()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3Status )
|
||
|
Q3AttributeSet_GetNextAttributeType(
|
||
|
TQ3AttributeSet source,
|
||
|
TQ3AttributeType * theType);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3AttributeSet_Submit()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
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
|
||
|
*/
|
||
|
/*
|
||
|
* Q3AttributeSet_Inherit()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
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
|
||
|
/*
|
||
|
* Q3XElementClass_Register()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
EXTERN_API_C( TQ3XObjectClass )
|
||
|
Q3XElementClass_Register(
|
||
|
TQ3ElementType * elementType,
|
||
|
const char * name,
|
||
|
unsigned long sizeOfElement,
|
||
|
TQ3XMetaHandler metaHandler);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Q3XElementType_GetElementSize()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
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
|
||
|
/*
|
||
|
* Q3XAttributeClass_Register()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: not available
|
||
|
* CarbonLib: not available
|
||
|
* Mac OS X: not available
|
||
|
*/
|
||
|
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
|
||
|
|
||
|
#ifdef PRAGMA_IMPORT_OFF
|
||
|
#pragma import off
|
||
|
#elif PRAGMA_IMPORT
|
||
|
#pragma import reset
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* __QD3DSET__ */
|
||
|
|