You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
744 lines
17 KiB
744 lines
17 KiB
/* |
|
File: GXMath.h |
|
|
|
Contains: QuickDraw GX math routine interfaces. |
|
|
|
Version: Technology: Quickdraw GX 1.1 |
|
Release: QuickTime 7.3 |
|
|
|
Copyright: (c) 2007 (c) 1994-2006 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 __GXMATH__ |
|
#define __GXMATH__ |
|
|
|
#ifndef __CONDITIONALMACROS__ |
|
#include <ConditionalMacros.h> |
|
#endif |
|
|
|
#ifndef __MACTYPES__ |
|
#include <MacTypes.h> |
|
#endif |
|
|
|
#ifndef __FIXMATH__ |
|
#include <FixMath.h> |
|
#endif |
|
|
|
#ifndef __IMAGECODEC__ |
|
#include <ImageCodec.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=mac68k |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(push, 2) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack(2) |
|
#endif |
|
|
|
#if defined(__MWERKS__) && TARGET_CPU_68K |
|
#pragma push |
|
#pragma pointers_in_D0 |
|
#endif |
|
|
|
/* Now defined in ImageCodec.i*/ |
|
#if 0 |
|
struct gxPoint { |
|
Fixed x; |
|
Fixed y; |
|
}; |
|
typedef struct gxPoint gxPoint; |
|
#endif /* 0 */ |
|
|
|
|
|
typedef unsigned short gxColorValue; |
|
struct gxPolar { |
|
Fixed radius; |
|
Fixed angle; |
|
}; |
|
typedef struct gxPolar gxPolar; |
|
struct gxMapping { |
|
Fixed map[3][3]; |
|
}; |
|
typedef struct gxMapping gxMapping; |
|
#define gxColorValue1 ((gxColorValue) 0x0000FFFF) |
|
#define gxPositiveInfinity ((long) 0x7FFFFFFFL) |
|
#define gxNegativeInfinity ((long) 0x80000000L) |
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* CopyToMapping() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
CopyToMapping( |
|
gxMapping * target, |
|
const gxMapping * source) THREEWORDINLINE(0x303C, 0x0031, 0xA832); |
|
|
|
|
|
/* |
|
* InvertMapping() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
InvertMapping( |
|
gxMapping * target, |
|
const gxMapping * source) THREEWORDINLINE(0x303C, 0x0032, 0xA832); |
|
|
|
|
|
/* |
|
* MapMapping() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
MapMapping( |
|
gxMapping * target, |
|
const gxMapping * source) THREEWORDINLINE(0x303C, 0x0033, 0xA832); |
|
|
|
|
|
/* |
|
* MoveMapping() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
MoveMapping( |
|
gxMapping * target, |
|
Fixed hOffset, |
|
Fixed vOffset) THREEWORDINLINE(0x303C, 0x0034, 0xA832); |
|
|
|
|
|
/* |
|
* MoveMappingTo() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
MoveMappingTo( |
|
gxMapping * target, |
|
Fixed hPosition, |
|
Fixed vPosition) THREEWORDINLINE(0x303C, 0x0035, 0xA832); |
|
|
|
|
|
/* |
|
* NormalizeMapping() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
NormalizeMapping(gxMapping * target) THREEWORDINLINE(0x303C, 0x0036, 0xA832); |
|
|
|
|
|
/* |
|
* RotateMapping() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
RotateMapping( |
|
gxMapping * target, |
|
Fixed angle, |
|
Fixed xCenter, |
|
Fixed yCenter) THREEWORDINLINE(0x303C, 0x0037, 0xA832); |
|
|
|
|
|
/* |
|
* ScaleMapping() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
ScaleMapping( |
|
gxMapping * target, |
|
Fixed hFactor, |
|
Fixed vFactor, |
|
Fixed xCenter, |
|
Fixed yCenter) THREEWORDINLINE(0x303C, 0x0038, 0xA832); |
|
|
|
|
|
/* |
|
* ResetMapping() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
ResetMapping(gxMapping * target) THREEWORDINLINE(0x303C, 0x0039, 0xA832); |
|
|
|
|
|
/* |
|
* SkewMapping() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxMapping * ) |
|
SkewMapping( |
|
gxMapping * target, |
|
Fixed skewX, |
|
Fixed skewY, |
|
Fixed xCenter, |
|
Fixed yCenter) THREEWORDINLINE(0x303C, 0x003A, 0xA832); |
|
|
|
|
|
/* |
|
* MapPoints() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
MapPoints( |
|
const gxMapping * source, |
|
long count, |
|
gxPoint theVector[]) THREEWORDINLINE(0x303C, 0x003B, 0xA832); |
|
|
|
|
|
/* |
|
* FirstBit() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( short ) |
|
FirstBit(unsigned long x) THREEWORDINLINE(0x303C, 0x003C, 0xA832); |
|
|
|
|
|
/* |
|
* WideScale() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( short ) |
|
WideScale(const wide * source) THREEWORDINLINE(0x303C, 0x003D, 0xA832); |
|
|
|
|
|
/* |
|
* LinearRoot() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( short ) |
|
LinearRoot( |
|
Fixed first, |
|
Fixed last, |
|
Fract t[]) THREEWORDINLINE(0x303C, 0x003E, 0xA832); |
|
|
|
|
|
/* |
|
* QuadraticRoot() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( short ) |
|
QuadraticRoot( |
|
Fixed first, |
|
Fixed control, |
|
Fixed last, |
|
Fract t[]) THREEWORDINLINE(0x303C, 0x003F, 0xA832); |
|
|
|
|
|
/* |
|
* PolarToPoint() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxPoint * ) |
|
PolarToPoint( |
|
const gxPolar * ra, |
|
gxPoint * xy) THREEWORDINLINE(0x303C, 0x0040, 0xA832); |
|
|
|
|
|
/* |
|
* PointToPolar() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( gxPolar * ) |
|
PointToPolar( |
|
const gxPoint * xy, |
|
gxPolar * ra) THREEWORDINLINE(0x303C, 0x0041, 0xA832); |
|
|
|
|
|
/* |
|
* FractCubeRoot() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Fract ) |
|
FractCubeRoot(Fract source) THREEWORDINLINE(0x303C, 0x0042, 0xA832); |
|
|
|
|
|
/* |
|
* FractDivide() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Fract ) |
|
FractDivide( |
|
Fract dividend, |
|
Fract divisor) THREEWORDINLINE(0x303C, 0x0043, 0xA832); |
|
|
|
|
|
/* |
|
* FractMultiply() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Fract ) |
|
FractMultiply( |
|
Fract multiplicand, |
|
Fract multiplier) THREEWORDINLINE(0x303C, 0x0044, 0xA832); |
|
|
|
|
|
/* |
|
* FractSineCosine() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Fract ) |
|
FractSineCosine( |
|
Fixed degrees, |
|
Fract * cosine) THREEWORDINLINE(0x303C, 0x0045, 0xA832); |
|
|
|
|
|
/* |
|
* FractSquareRoot() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Fract ) |
|
FractSquareRoot(Fract source) THREEWORDINLINE(0x303C, 0x0046, 0xA832); |
|
|
|
|
|
/* |
|
* FixedDivide() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Fixed ) |
|
FixedDivide( |
|
Fixed dividend, |
|
Fixed divisor) THREEWORDINLINE(0x303C, 0x0047, 0xA832); |
|
|
|
|
|
/* |
|
* FixedMultiply() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Fixed ) |
|
FixedMultiply( |
|
Fixed multiplicand, |
|
Fixed multiplier) THREEWORDINLINE(0x303C, 0x0048, 0xA832); |
|
|
|
|
|
/* This next call is (source * multiplier / divisor) -- it avoids underflow, overflow by using wides */ |
|
/* |
|
* MultiplyDivide() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( long ) |
|
MultiplyDivide( |
|
long source, |
|
long multiplier, |
|
long divisor) THREEWORDINLINE(0x303C, 0x0049, 0xA832); |
|
|
|
|
|
/* |
|
* Magnitude() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( unsigned long ) |
|
Magnitude( |
|
long deltaX, |
|
long deltaY) THREEWORDINLINE(0x303C, 0x004A, 0xA832); |
|
|
|
|
|
/* |
|
* VectorMultiplyDivide() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( long ) |
|
VectorMultiplyDivide( |
|
long count, |
|
const long * vector1, |
|
long step1, |
|
const long * vector2, |
|
long step2, |
|
long divisor) THREEWORDINLINE(0x303C, 0x004B, 0xA832); |
|
|
|
|
|
|
|
|
|
|
|
/* wide operations are defined within FixMath.h for PowerPC */ |
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#if TARGET_OS_MAC && TARGET_CPU_68K |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* WideAdd() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( wide * ) |
|
WideAdd( |
|
wide * target, |
|
const wide * source) THREEWORDINLINE(0x303C, 0x004C, 0xA832); |
|
|
|
|
|
/* |
|
* WideCompare() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( short ) |
|
WideCompare( |
|
const wide * target, |
|
const wide * source) THREEWORDINLINE(0x303C, 0x004D, 0xA832); |
|
|
|
|
|
/* |
|
* WideNegate() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( wide * ) |
|
WideNegate(wide * target) THREEWORDINLINE(0x303C, 0x004E, 0xA832); |
|
|
|
|
|
/* |
|
* WideShift() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( wide * ) |
|
WideShift( |
|
wide * target, |
|
long shift) THREEWORDINLINE(0x303C, 0x004F, 0xA832); |
|
|
|
|
|
/* |
|
* WideSquareRoot() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( unsigned long ) |
|
WideSquareRoot(const wide * source) THREEWORDINLINE(0x303C, 0x0050, 0xA832); |
|
|
|
|
|
/* |
|
* WideSubtract() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( wide * ) |
|
WideSubtract( |
|
wide * target, |
|
const wide * source) THREEWORDINLINE(0x303C, 0x0051, 0xA832); |
|
|
|
|
|
/* |
|
* WideMultiply() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( wide * ) |
|
WideMultiply( |
|
long multiplicand, |
|
long multiplier, |
|
wide * target) THREEWORDINLINE(0x303C, 0x0052, 0xA832); |
|
|
|
|
|
/* returns the quotient */ |
|
/* |
|
* WideDivide() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( long ) |
|
WideDivide( |
|
const wide * dividend, |
|
long divisor, |
|
long * remainder) THREEWORDINLINE(0x303C, 0x0053, 0xA832); |
|
|
|
|
|
/* quotient replaces dividend */ |
|
/* |
|
* WideWideDivide() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( wide * ) |
|
WideWideDivide( |
|
wide * dividend, |
|
long divisor, |
|
long * remainder) THREEWORDINLINE(0x303C, 0x0055, 0xA832); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* TARGET_OS_MAC && TARGET_CPU_68K */ |
|
|
|
|
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* VectorMultiply() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( wide * ) |
|
VectorMultiply( |
|
long count, |
|
const long * vector1, |
|
long step1, |
|
const long * vector2, |
|
long step2, |
|
wide * dot) THREEWORDINLINE(0x303C, 0x0054, 0xA832); |
|
|
|
|
|
/* |
|
* RandomBits() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( unsigned long ) |
|
RandomBits( |
|
long count, |
|
long focus) THREEWORDINLINE(0x303C, 0x0056, 0xA832); |
|
|
|
|
|
/* |
|
* SetRandomSeed() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
SetRandomSeed(const wide * seed) THREEWORDINLINE(0x303C, 0x0057, 0xA832); |
|
|
|
|
|
/* |
|
* GetRandomSeed() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( wide * ) |
|
GetRandomSeed(wide * seed) THREEWORDINLINE(0x303C, 0x0058, 0xA832); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#ifndef FixedRound |
|
#define FixedRound(a) ((short)(((Fixed)(a) + fixed1/2) >> 16)) |
|
#endif |
|
#ifndef FixedSquareRoot |
|
#define FixedSquareRoot(a) (((Fixed)FractSquareRoot(a) + 64) >> 7) |
|
#endif |
|
#ifndef FixedTruncate |
|
#define FixedTruncate(a) ((short)((Fixed)(a) >> 16)) |
|
#endif |
|
#ifndef FixedToFract |
|
#define FixedToFract(a) ((Fract)(a) << 14) |
|
#endif |
|
#ifndef FractToFixed |
|
#define FractToFixed(a) ((Fixed)(a) + 8192L >> 14) |
|
#endif |
|
#ifndef FixedToInt |
|
#define FixedToInt(a) ((short)(((Fixed)(a) + fixed1/2) >> 16)) |
|
#endif |
|
#ifndef IntToFixed |
|
#define IntToFixed(a) ((Fixed)(a) << 16) |
|
#endif |
|
#ifndef FixedToFloat |
|
#define FixedToFloat(a) ((float)(a) / fixed1) |
|
#endif |
|
#ifndef FloatToFixed |
|
#define FloatToFixed(a) ((Fixed)((float)(a) * fixed1)) |
|
#endif |
|
#ifndef FractToFloat |
|
#define FractToFloat(a) ((float)(a) / fract1) |
|
#endif |
|
#ifndef FloatToFract |
|
#define FloatToFract(a) ((Fract)((float)(a) * fract1)) |
|
#endif |
|
#ifndef ColorToFract |
|
#define ColorToFract(a) (((Fract) (a) << 14) + (((Fract)(a) + 2) >> 2)) |
|
#endif |
|
#ifndef FractToColor |
|
#define FractToColor(a) ((gxColorValue) ((a) - ((a) >> 16) + 8191 >> 14)) |
|
#endif |
|
#ifndef ff /* ff is already defined on some platforms */ |
|
#define ff(a) IntToFixed(a) |
|
#define fl(a) FloatToFixed(a) |
|
#endif |
|
|
|
|
|
#if defined(__MWERKS__) && TARGET_CPU_68K |
|
#pragma pop |
|
#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 /* __GXMATH__ */ |
|
|
|
|