Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

745 lines
17 KiB

5 years ago
/*
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__ */