Hardware Graphics Acceleration for Classic and Carbon Macintosh.
Written by Anders F Björklund.
Copyright ©2000-2002 afb. All Rights Reserved
Table of Contents:
#include <Hardwarie.h>
Classic
Carbon
struct HardwariePoint
{
float h;
float v;
};
struct HardwarieRect
{
float left;
float top;
float right;
float bottom;
};
struct HardwarieColor
{
float red;
float green;
float blue;
float alpha;
};
void HardwarieSetPoint(HardwariePoint *point, PointPtr p);
void HardwarieSetRect(HardwarieRect *rect, RectPtr r);
void HardwarieSetColor(HardwarieColor *color, RGBColorPtr c);
OSErr HardwarieCreateGWorldFromPict( GWorldPtr *newGWorld, Rect *newBounds, short pictID, Boolean grayscale );
int HardwarieRoundUp(int x);
void HardwarieSetMaxTextureSize(int size);
int HardwarieGetMaxTextureSize(void);
void HardwarieSetDrawOutlines(Boolean draw);
Boolean HardwarieGetDrawOutlines(void);
StringPtr HardwarieGetRenderName(void);
StringPtr HardwarieGetEngineName(void);
Size HardwarieGetTextureMemoryAvailable(void);
Size HardwarieGetTotalTextureMemory(void);
OSErr HardwarieInit(
HardwarieContextPtr *newContext,
GDHandle device,
CWindowPtr window,
RectPtr bounds,
Boolean fullScreen);
void HardwarieExit(
HardwarieContextPtr *oldContext);
OSErr HardwarieLoadFrame(
HardwarieFramePtr *newFrameP,
HardwarieContextPtr context,
GWorldPtr pictureGWorld,
RectPtr pictureRect,
GWorldPtr maskGWorld,
RectPtr maskRect,
GWorldPtr alphaGWorld,
RectPtr alphaRect);
OSErr HardwarieReloadFrame(
HardwarieFramePtr oldFrameP,
HardwarieContextPtr context,
GWorldPtr pictureGWorld,
RectPtr pictureRect,
GWorldPtr maskGWorld,
RectPtr maskRect,
GWorldPtr alphaGWorld,
RectPtr alphaRect);
void HardwarieUnloadFrame(
HardwarieFramePtr *oldFrameP);
void HardwariePause(
HardwarieContextPtr context );
void HardwarieResume(
HardwarieContextPtr context );
void HardwarieBegin(
HardwarieContextPtr context );
void HardwarieEnd(
HardwarieContextPtr context );
void HardwarieClearBackground(
HardwarieContextPtr context,
HardwarieColorPtr color);
void HardwariePutPixel(
HardwarieContextPtr context,
HardwariePointPtr loc,
HardwarieColorPtr color);
void HardwarieDrawLine(
HardwarieContextPtr context,
HardwariePointPtr from,
HardwariePointPtr to,
HardwarieColorPtr color);
void HardwariePaintRect(
HardwarieContextPtr context,
HardwarieRectPtr rect,
HardwarieColorPtr color);
void HardwarieDrawFrame(
HardwarieFramePtr srcFrameP,
HardwarieRectPtr dstRect,
float alpha);
void HardwarieScaledDrawFrame(
HardwarieFramePtr srcFrameP,
HardwarieRectPtr dstRect,
float alpha,
float horizScale,
float vertScale);
void HardwarieRotatedDrawFrame(
HardwarieFramePtr srcFrameP,
HardwarieRectPtr dstRect,
float alpha,
float degreesRotation);
HardwarieContextPtr gContext = NULL;
HardwarieFramePtr gFrame = NULL;
extern WindowPtr window;
extern GWorldPtr pictureGWorld;
extern GWorldPtr maskGWorld;
extern GWorldPtr alphaGWorld;
extern Rect windowRect;
extern Rect pictureRect;
extern Rect maskRect;
extern Rect alphaRect;
{
OSErr err;
HardwarieRect r;
HardwarieColor c;
err = HardwarieInit(&gContext, GetMainDevice(), (CWindowPtr) window, &windowRect, false );
if (err == noErr)
{
err = HardwarieLoadFrame( &gFrame, gContext,
pictureGWorld, &pictureRect, maskGWorld, &maskRect, alphaGWorld, &alphaRect);
if (err == noErr)
{
{
HardwarieBegin(gContext);
c.red = 0.0;
c.green = 0.0;
c.blue = 0.0;
c.alpha = 0.0;
HardwarieClearBackground(gContext,&c);
r.left = (float) (((unsigned) Random()) % (windowRect.right - windowRect.left))
- (pictureRect.right - pictureRect.left);
r.top = (float) (((unsigned) Random()) % (windowRect.right - windowRect.left))
- (pictureRect.bottom - pictureRect.top);
r.right = r.left + (pictureRect.right - pictureRect.left);
r.bottom = r.top + (pictureRect.bottom - pictureRect.top);
HardwarieDrawFrame(gFrame, &r, kHardwarieOpaqueAlpha );
HardwarieEnd(gContext);
}
HardwarieUnloadFrame(&gFrame);
}
HardwarieExit(&gContext);
}
}