Added Uq-Ruan Masters game - it compiles but does not work (renders too slowly? Another problem?)
This commit is contained in:
457
project/jni/application/sc2/src/libs/gfxlib.h
Normal file
457
project/jni/application/sc2/src/libs/gfxlib.h
Normal file
@@ -0,0 +1,457 @@
|
||||
//Copyright Paul Reiche, Fred Ford. 1992-2002
|
||||
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef _GFXLIB_H
|
||||
#define _GFXLIB_H
|
||||
|
||||
#include "port.h"
|
||||
#include "libs/compiler.h"
|
||||
|
||||
typedef struct Color Color;
|
||||
struct Color {
|
||||
BYTE r;
|
||||
BYTE g;
|
||||
BYTE b;
|
||||
BYTE a;
|
||||
};
|
||||
|
||||
#include "libs/reslib.h"
|
||||
|
||||
typedef struct context_desc CONTEXT_DESC;
|
||||
typedef struct frame_desc FRAME_DESC;
|
||||
typedef struct font_desc FONT_DESC;
|
||||
typedef struct drawable_desc DRAWABLE_DESC;
|
||||
|
||||
typedef CONTEXT_DESC *CONTEXT;
|
||||
typedef FRAME_DESC *FRAME;
|
||||
typedef FONT_DESC *FONT;
|
||||
typedef DRAWABLE_DESC *DRAWABLE;
|
||||
|
||||
typedef UWORD TIME_VALUE;
|
||||
|
||||
#define TIME_SHIFT 8
|
||||
#define MAX_TIME_VALUE ((1 << TIME_SHIFT) + 1)
|
||||
|
||||
typedef SWORD COORD;
|
||||
|
||||
static inline bool
|
||||
sameColor(Color c1, Color c2)
|
||||
{
|
||||
return c1.r == c2.r &&
|
||||
c1.g == c2.g &&
|
||||
c1.b == c2.b &&
|
||||
c1.a == c2.a;
|
||||
}
|
||||
|
||||
// Transform a 5-bits color component to an 8-bits color component.
|
||||
// Form 1, calculates '(r5 / 31.0) * 255.0, highest value is 0xff:
|
||||
#define CC5TO8(c) (((c) << 3) | ((c) >> 2))
|
||||
// Form 2, calculates '(r5 / 32.0) * 256.0, highest value is 0xf8:
|
||||
//#define CC5TO8(c) ((c) << 3)
|
||||
|
||||
#define BUILD_COLOR(col, c256) col
|
||||
// BUILD_COLOR used to combine a 15-bit RGB color tripple with a
|
||||
// destination VGA palette index into a 32-bit value.
|
||||
// Now, it is an empty wrapper which returns the first argument,
|
||||
// which is of type Color, and ignores the second argument,
|
||||
// the palette index.
|
||||
//
|
||||
// It is a remnant of 8bpp hardware paletted display (VGA).
|
||||
// The palette index would be overwritten with the RGB value
|
||||
// and the drawing op would use this index on screen.
|
||||
// The palette indices 0-15, as used in DOS SC2, are unchanged
|
||||
// from the standard VGA palette and are identical to 16-color EGA.
|
||||
// Various frames, borders, menus, etc. frequently refer to these
|
||||
// first 16 colors and normally do not change the RGB values from
|
||||
// the standard ones (see colors.h; most likely unchanged from SC1)
|
||||
// The palette index is meaningless in UQM for the most part.
|
||||
// New code should just use index 0.
|
||||
|
||||
// Turn a 15 bits color into a 24-bits color.
|
||||
// r, g, and b are each 5-bits color components.
|
||||
static inline Color
|
||||
colorFromRgb15 (BYTE r, BYTE g, BYTE b)
|
||||
{
|
||||
Color c;
|
||||
c.r = CC5TO8 (r);
|
||||
c.g = CC5TO8 (g);
|
||||
c.b = CC5TO8 (b);
|
||||
c.a = 0xff;
|
||||
|
||||
return c;
|
||||
}
|
||||
#define MAKE_RGB15(r, g, b) colorFromRgb15 ((r), (g), (b))
|
||||
|
||||
#ifdef NOTYET /* Need C'99 support */
|
||||
#define MAKE_RGB15(r, g, b) (Color) { \
|
||||
.r = CC5TO8 (r), \
|
||||
.g = CC5TO8 (g), \
|
||||
.b = CC5TO8 (b), \
|
||||
.a = 0xff \
|
||||
}
|
||||
#endif
|
||||
|
||||
// Temporary, until we can use C'99 features. Then MAKE_RGB15 will be usable
|
||||
// anywhere.
|
||||
// This define is intended for global initialisations, where the
|
||||
// expression must be constant.
|
||||
#define MAKE_RGB15_INIT(r, g, b) { \
|
||||
CC5TO8 (r), \
|
||||
CC5TO8 (g), \
|
||||
CC5TO8 (b), \
|
||||
0xff \
|
||||
}
|
||||
|
||||
static inline Color
|
||||
buildColorRgba (BYTE r, BYTE g, BYTE b, BYTE a)
|
||||
{
|
||||
Color c;
|
||||
c.r = r;
|
||||
c.g = g;
|
||||
c.b = b;
|
||||
c.a = a;
|
||||
|
||||
return c;
|
||||
}
|
||||
#define BUILD_COLOR_RGBA(r, g, b, a) \
|
||||
buildColorRgba ((r), (g), (b), (a))
|
||||
|
||||
|
||||
typedef BYTE CREATE_FLAGS;
|
||||
// WANT_MASK is deprecated (and non-functional). It used to generate a bitmap
|
||||
// of changed pixels for a target DRAWABLE, so that DRAW_SUBTRACTIVE could
|
||||
// paint background pixels over them, i.e. a revert draw. The backgrounds
|
||||
// are fully erased now instead.
|
||||
#define WANT_MASK (CREATE_FLAGS)(1 << 0)
|
||||
#define WANT_PIXMAP (CREATE_FLAGS)(1 << 1)
|
||||
// MAPPED_TO_DISPLAY is deprecated but still checked by LoadDisplayPixmap().
|
||||
// Its former use was to indicate a pre-scaled graphic for the display.
|
||||
#define MAPPED_TO_DISPLAY (CREATE_FLAGS)(1 << 2)
|
||||
#define WANT_ALPHA (CREATE_FLAGS)(1 << 3)
|
||||
|
||||
typedef struct extent
|
||||
{
|
||||
COORD width, height;
|
||||
} EXTENT;
|
||||
|
||||
typedef struct point
|
||||
{
|
||||
COORD x, y;
|
||||
} POINT;
|
||||
|
||||
typedef struct stamp
|
||||
{
|
||||
POINT origin;
|
||||
FRAME frame;
|
||||
} STAMP;
|
||||
|
||||
typedef struct rect
|
||||
{
|
||||
POINT corner;
|
||||
EXTENT extent;
|
||||
} RECT;
|
||||
|
||||
typedef struct line
|
||||
{
|
||||
POINT first, second;
|
||||
} LINE;
|
||||
|
||||
static inline POINT
|
||||
MAKE_POINT (COORD x, COORD y)
|
||||
{
|
||||
POINT pt = {x, y};
|
||||
return pt;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
pointsEqual (POINT p1, POINT p2)
|
||||
{
|
||||
return p1.x == p2.x && p1.y == p2.y;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
extentsEqual (EXTENT e1, EXTENT e2)
|
||||
{
|
||||
return e1.width == e2.width && e1.height == e2.height;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
rectsEqual (RECT r1, RECT r2)
|
||||
{
|
||||
return pointsEqual (r1.corner, r2.corner)
|
||||
&& extentsEqual (r1.extent, r2.extent);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
pointWithinRect (RECT r, POINT p)
|
||||
{
|
||||
return p.x >= r.corner.x && p.y >= r.corner.y
|
||||
&& p.x < r.corner.x + r.extent.width
|
||||
&& p.y < r.corner.y + r.extent.height;
|
||||
}
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ALIGN_LEFT,
|
||||
ALIGN_CENTER,
|
||||
ALIGN_RIGHT
|
||||
} TEXT_ALIGN;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
VALIGN_TOP,
|
||||
VALIGN_MIDDLE,
|
||||
VALIGN_BOTTOM
|
||||
} TEXT_VALIGN;
|
||||
|
||||
typedef struct text
|
||||
{
|
||||
POINT baseline;
|
||||
const UNICODE *pStr;
|
||||
TEXT_ALIGN align;
|
||||
COUNT CharCount;
|
||||
} TEXT;
|
||||
|
||||
#include "libs/strlib.h"
|
||||
|
||||
typedef STRING_TABLE COLORMAP_REF;
|
||||
typedef STRING COLORMAP;
|
||||
// COLORMAPPTR is really a pointer to colortable entry structure
|
||||
// which is documented in doc/devel/strtab, .ct files section
|
||||
typedef void *COLORMAPPTR;
|
||||
|
||||
#include "graphics/prim.h"
|
||||
|
||||
typedef BYTE BATCH_FLAGS;
|
||||
// This flag is currently unused but it might make sense to restore it
|
||||
#define BATCH_BUILD_PAGE (BATCH_FLAGS)(1 << 0)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TIME_VALUE last_time_val;
|
||||
POINT EndPoint;
|
||||
STAMP IntersectStamp;
|
||||
} INTERSECT_CONTROL;
|
||||
|
||||
typedef BYTE INTERSECT_CODE;
|
||||
|
||||
#define INTERSECT_LEFT (INTERSECT_CODE)(1 << 0)
|
||||
#define INTERSECT_TOP (INTERSECT_CODE)(1 << 1)
|
||||
#define INTERSECT_RIGHT (INTERSECT_CODE)(1 << 2)
|
||||
#define INTERSECT_BOTTOM (INTERSECT_CODE)(1 << 3)
|
||||
#define INTERSECT_NOCLIP (INTERSECT_CODE)(1 << 7)
|
||||
#define INTERSECT_ALL_SIDES (INTERSECT_CODE)(INTERSECT_LEFT | \
|
||||
INTERSECT_TOP | \
|
||||
INTERSECT_RIGHT | \
|
||||
INTERSECT_BOTTOM)
|
||||
|
||||
typedef POINT HOT_SPOT;
|
||||
|
||||
extern HOT_SPOT MAKE_HOT_SPOT (COORD, COORD);
|
||||
|
||||
extern INTERSECT_CODE BoxIntersect (RECT *pr1, RECT *pr2, RECT *printer);
|
||||
extern void BoxUnion (RECT *pr1, RECT *pr2, RECT *punion);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FadeAllToWhite = 250,
|
||||
FadeSomeToWhite,
|
||||
FadeAllToBlack,
|
||||
FadeAllToColor,
|
||||
FadeSomeToBlack,
|
||||
FadeSomeToColor
|
||||
} ScreenFadeType;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DRAW_REPLACE = 0,
|
||||
// Pixels in the target FRAME are replaced entirely.
|
||||
// Non-stamp primitives with Color.a < 255 to RGB targets are
|
||||
// equivalent to DRAW_ALPHA with (DrawMode.factor = Color.a),
|
||||
// except the Text primitives.
|
||||
// DrawMode.factor: ignored
|
||||
// Text: supported (except DRAW_ALPHA via Color.a)
|
||||
// RGBA sources (WANT_ALPHA): per-pixel alpha blending performed
|
||||
// RGBA targets (WANT_ALPHA): replace directly supported
|
||||
DRAW_ADDITIVE,
|
||||
// Pixel channels of the source FRAME or Color channels of
|
||||
// a primitive are modulated by (DrawMode.factor / 255) and added
|
||||
// to the pixel channels of the target FRAME.
|
||||
// DrawMode.factor range: -32767..32767 (negative values make
|
||||
// draw subtractive); 255 = 1:1 ratio
|
||||
// Text: not yet supported
|
||||
// RGBA sources (WANT_ALPHA): alpha channel ignored
|
||||
// RGBA targets (WANT_ALPHA): not yet supported
|
||||
DRAW_ALPHA,
|
||||
// Pixel channels of the source FRAME or Color channels of
|
||||
// a primitive are modulated by (DrawMode.factor / 255) and added
|
||||
// to the pixel channels of the target FRAME, modulated by
|
||||
// (1 - DrawMode.factor / 255)
|
||||
// DrawMode.factor range: 0..255; 255 = fully opaque
|
||||
// Text: supported
|
||||
// RGBA sources (WANT_ALPHA): alpha channel ignored
|
||||
// RGBA targets (WANT_ALPHA): not yet supported
|
||||
|
||||
DRAW_DEFAULT = DRAW_REPLACE,
|
||||
} DrawKind;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
BYTE kind;
|
||||
SWORD factor;
|
||||
} DrawMode;
|
||||
|
||||
#define DRAW_REPLACE_MODE MAKE_DRAW_MODE (DRAW_REPLACE, 0)
|
||||
#define DRAW_FACTOR_1 0xff
|
||||
|
||||
static inline DrawMode
|
||||
MAKE_DRAW_MODE (DrawKind kind, SWORD factor)
|
||||
{
|
||||
DrawMode mode;
|
||||
mode.kind = kind;
|
||||
mode.factor = factor;
|
||||
return mode;
|
||||
}
|
||||
|
||||
extern CONTEXT SetContext (CONTEXT Context);
|
||||
extern Color SetContextForeGroundColor (Color Color);
|
||||
extern Color GetContextForeGroundColor (void);
|
||||
extern Color SetContextBackGroundColor (Color Color);
|
||||
extern Color GetContextBackGroundColor (void);
|
||||
extern FRAME SetContextFGFrame (FRAME Frame);
|
||||
extern FRAME GetContextFGFrame (void);
|
||||
// Context cliprect defines the drawing bounds. Additionally, all
|
||||
// drawing positions (x,y) are relative to the cliprect corner.
|
||||
extern BOOLEAN SetContextClipRect (RECT *pRect);
|
||||
// The returned rect is always filled in. If the context cliprect
|
||||
// is undefined, the returned rect has foreground frame dimensions.
|
||||
extern BOOLEAN GetContextClipRect (RECT *pRect);
|
||||
// The actual origin will be orgOffset + context ClipRect.corner
|
||||
extern POINT SetContextOrigin (POINT orgOffset);
|
||||
extern DrawMode SetContextDrawMode (DrawMode);
|
||||
extern DrawMode GetContextDrawMode (void);
|
||||
// 'area' may be NULL to copy the entire CONTEXT cliprect
|
||||
// 'area' is relative to the CONTEXT cliprect
|
||||
extern DRAWABLE CopyContextRect (const RECT* area);
|
||||
|
||||
extern TIME_VALUE DrawablesIntersect (INTERSECT_CONTROL *pControl0,
|
||||
INTERSECT_CONTROL *pControl1, TIME_VALUE max_time_val);
|
||||
extern void DrawStamp (STAMP *pStamp);
|
||||
extern void DrawFilledStamp (STAMP *pStamp);
|
||||
extern void DrawPoint (POINT *pPoint);
|
||||
extern void DrawRectangle (RECT *pRect);
|
||||
extern void DrawFilledRectangle (RECT *pRect);
|
||||
extern void DrawLine (LINE *pLine);
|
||||
extern void font_DrawText (TEXT *pText);
|
||||
extern void font_DrawTracedText (TEXT *pText, Color text, Color trace);
|
||||
extern void DrawBatch (PRIMITIVE *pBasePrim, PRIM_LINKS PrimLinks,
|
||||
BATCH_FLAGS BatchFlags);
|
||||
extern void BatchGraphics (void);
|
||||
extern void UnbatchGraphics (void);
|
||||
extern void FlushGraphics (void);
|
||||
extern void ClearDrawable (void);
|
||||
#ifdef DEBUG
|
||||
extern CONTEXT CreateContextAux (const char *name);
|
||||
#define CreateContext(name) CreateContextAux((name))
|
||||
#else /* if !defined(DEBUG) */
|
||||
extern CONTEXT CreateContextAux (void);
|
||||
#define CreateContext(name) CreateContextAux()
|
||||
#endif /* !defined(DEBUG) */
|
||||
extern BOOLEAN DestroyContext (CONTEXT ContextRef);
|
||||
extern DRAWABLE CreateDisplay (CREATE_FLAGS CreateFlags, SIZE *pwidth,
|
||||
SIZE *pheight);
|
||||
extern DRAWABLE CreateDrawable (CREATE_FLAGS CreateFlags, SIZE width,
|
||||
SIZE height, COUNT num_frames);
|
||||
extern BOOLEAN DestroyDrawable (DRAWABLE Drawable);
|
||||
extern BOOLEAN GetFrameRect (FRAME Frame, RECT *pRect);
|
||||
#ifdef DEBUG
|
||||
extern const char *GetContextName (CONTEXT context);
|
||||
extern CONTEXT GetFirstContext (void);
|
||||
extern CONTEXT GetNextContext (CONTEXT context);
|
||||
extern size_t GetContextCount (void);
|
||||
#endif /* DEBUG */
|
||||
|
||||
extern HOT_SPOT SetFrameHot (FRAME Frame, HOT_SPOT HotSpot);
|
||||
extern HOT_SPOT GetFrameHot (FRAME Frame);
|
||||
extern BOOLEAN InstallGraphicResTypes (void);
|
||||
extern DRAWABLE LoadGraphicFile (const char *pStr);
|
||||
extern FONT LoadFontFile (const char *pStr);
|
||||
extern void *LoadGraphicInstance (RESOURCE res);
|
||||
extern DRAWABLE LoadDisplayPixmap (const RECT *area, FRAME frame);
|
||||
extern FRAME SetContextFontEffect (FRAME EffectFrame);
|
||||
extern FONT SetContextFont (FONT Font);
|
||||
extern BOOLEAN DestroyFont (FONT FontRef);
|
||||
// The returned pRect is relative to the context drawing origin
|
||||
extern BOOLEAN TextRect (TEXT *pText, RECT *pRect, BYTE *pdelta);
|
||||
extern BOOLEAN GetContextFontLeading (SIZE *pheight);
|
||||
extern BOOLEAN GetContextFontLeadingWidth (SIZE *pwidth);
|
||||
extern COUNT GetFrameCount (FRAME Frame);
|
||||
extern COUNT GetFrameIndex (FRAME Frame);
|
||||
extern FRAME SetAbsFrameIndex (FRAME Frame, COUNT FrameIndex);
|
||||
extern FRAME SetRelFrameIndex (FRAME Frame, SIZE FrameOffs);
|
||||
extern FRAME SetEquFrameIndex (FRAME DstFrame, FRAME SrcFrame);
|
||||
extern FRAME IncFrameIndex (FRAME Frame);
|
||||
extern FRAME DecFrameIndex (FRAME Frame);
|
||||
extern DRAWABLE CopyFrameRect (FRAME Frame, const RECT *area);
|
||||
extern DRAWABLE CloneFrame (FRAME Frame);
|
||||
extern DRAWABLE RotateFrame (FRAME Frame, int angle_deg);
|
||||
extern DRAWABLE RescaleFrame (FRAME, int width, int height);
|
||||
// This pair works for both paletted and trucolor frames
|
||||
extern BOOLEAN ReadFramePixelColors (FRAME frame, Color *pixels,
|
||||
int width, int height);
|
||||
extern BOOLEAN WriteFramePixelColors (FRAME frame, const Color *pixels,
|
||||
int width, int height);
|
||||
// This pair only works for paletted frames
|
||||
extern BOOLEAN ReadFramePixelIndexes (FRAME frame, BYTE *pixels,
|
||||
int width, int height);
|
||||
extern BOOLEAN WriteFramePixelIndexes (FRAME frame, const BYTE *pixels,
|
||||
int width, int height);
|
||||
extern void SetFrameTransparentColor (FRAME, Color);
|
||||
|
||||
// If the frame is an active SCREEN_DRAWABLE, this call must be
|
||||
// preceeded by FlushGraphics() for draw commands to have taken effect
|
||||
extern Color GetFramePixel (FRAME, POINT pixelPt);
|
||||
|
||||
extern FRAME CaptureDrawable (DRAWABLE Drawable);
|
||||
extern DRAWABLE ReleaseDrawable (FRAME Frame);
|
||||
|
||||
extern DRAWABLE GetFrameParentDrawable (FRAME Frame);
|
||||
|
||||
extern BOOLEAN SetColorMap (COLORMAPPTR ColorMapPtr);
|
||||
extern DWORD XFormColorMap (COLORMAPPTR ColorMapPtr, SIZE TimeInterval);
|
||||
extern DWORD FadeScreen (ScreenFadeType fadeType, SIZE TimeInterval);
|
||||
extern void FlushColorXForms (void);
|
||||
#define InitColorMapResources InitStringTableResources
|
||||
#define LoadColorMapFile LoadStringTableFile
|
||||
#define LoadColorMapInstance LoadStringTableInstance
|
||||
#define CaptureColorMap CaptureStringTable
|
||||
#define ReleaseColorMap ReleaseStringTable
|
||||
#define DestroyColorMap DestroyStringTable
|
||||
#define GetColorMapRef GetStringTable
|
||||
#define GetColorMapCount GetStringTableCount
|
||||
#define GetColorMapIndex GetStringTableIndex
|
||||
#define SetAbsColorMapIndex SetAbsStringTableIndex
|
||||
#define SetRelColorMapIndex SetRelStringTableIndex
|
||||
#define GetColorMapLength GetStringLengthBin
|
||||
|
||||
extern COLORMAPPTR GetColorMapAddress (COLORMAP);
|
||||
|
||||
void SetSystemRect (const RECT *pRect);
|
||||
void ClearSystemRect (void);
|
||||
|
||||
#endif /* _GFXLIB_H */
|
||||
Reference in New Issue
Block a user