188 lines
6.1 KiB
C
188 lines
6.1 KiB
C
|
/* Graphics Library headerfile */
|
||
|
|
||
|
#ifndef VGAGL_H
|
||
|
#define VGAGL_H
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
{
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/* Graphics context */
|
||
|
|
||
|
#define CONTEXT_VIRTUAL 0x0
|
||
|
#define CONTEXT_PAGED 0x1
|
||
|
#define CONTEXT_LINEAR 0x2
|
||
|
#define CONTEXT_MODEX 0x3
|
||
|
#define CONTEXT_PLANAR16 0x4
|
||
|
|
||
|
#define MODEFLAG_PAGEFLIPPING_CAPABLE 0x01
|
||
|
#define MODEFLAG_TRIPLEBUFFERING_CAPABLE 0x02
|
||
|
#define MODEFLAG_PAGEFLIPPING_ENABLED 0x04
|
||
|
#define MODEFLAG_TRIPLEBUFFERING_ENABLED 0x08
|
||
|
#define MODEFLAG_FLIPPAGE_BANKALIGNED 0x10
|
||
|
/*
|
||
|
* The next two can never occur together, thus we use the same flag
|
||
|
* (as svgalib does).
|
||
|
*/
|
||
|
#define MODEFLAG_32BPP_SHIFT8 0x20
|
||
|
#define MODEFLAG_24BPP_REVERSED 0x20
|
||
|
|
||
|
typedef struct {
|
||
|
void (*driver_setpixel_func) (int, int, int);
|
||
|
int (*driver_getpixel_func) (int, int);
|
||
|
void (*driver_hline_func) (int, int, int, int);
|
||
|
void (*driver_fillbox_func) (int, int, int, int, int);
|
||
|
void (*driver_putbox_func) (int, int, int, int, void *, int);
|
||
|
void (*driver_getbox_func) (int, int, int, int, void *, int);
|
||
|
void (*driver_putboxmask_func) (int, int, int, int, void *);
|
||
|
void (*driver_putboxpart_func) (int, int, int, int, int, int, void *,
|
||
|
int, int);
|
||
|
void (*driver_getboxpart_func) (int, int, int, int, int, int, void *,
|
||
|
int, int);
|
||
|
void (*driver_copybox_func) (int, int, int, int, int, int);
|
||
|
} framebufferfunctions;
|
||
|
|
||
|
typedef struct {
|
||
|
unsigned char modetype; /* virtual, paged, linear, mode X */
|
||
|
unsigned char modeflags; /* or planar16 */
|
||
|
unsigned char dummy;
|
||
|
unsigned char flippage;
|
||
|
int width; /* width in pixels */
|
||
|
int height; /* height in pixels */
|
||
|
int bytesperpixel; /* bytes per pixel (1, 2, 3, or 4) */
|
||
|
int colors; /* number of colors */
|
||
|
int bitsperpixel; /* bits per pixel (8, 15, 16 or 24) */
|
||
|
int bytewidth; /* length of a scanline in bytes */
|
||
|
char *vbuf; /* address of framebuffer */
|
||
|
int clip; /* clipping enabled? */
|
||
|
int clipx1; /* top-left coordinate of clip window */
|
||
|
int clipy1;
|
||
|
int clipx2; /* bottom-right coordinate of clip window */
|
||
|
int clipy2;
|
||
|
framebufferfunctions ff;
|
||
|
} GraphicsContext;
|
||
|
|
||
|
extern GraphicsContext currentcontext;
|
||
|
|
||
|
#define BYTESPERPIXEL (currentcontext.bytesperpixel)
|
||
|
#define BYTEWIDTH (currentcontext.bytewidth)
|
||
|
#define WIDTH (currentcontext.width)
|
||
|
#define HEIGHT (currentcontext.height)
|
||
|
#define VBUF (currentcontext.vbuf)
|
||
|
#define MODETYPE (currentcontext.modetype)
|
||
|
#define MODEFLAGS (currentcontext.modeflags)
|
||
|
#define BITSPERPIXEL (currentcontext.bitsperpixel)
|
||
|
#define COLORS (currentcontext.colors)
|
||
|
|
||
|
#define __clip (currentcontext.clip)
|
||
|
#define __clipx1 (currentcontext.clipx1)
|
||
|
#define __clipy1 (currentcontext.clipy1)
|
||
|
#define __clipx2 (currentcontext.clipx2)
|
||
|
#define __clipy2 (currentcontext.clipy2)
|
||
|
|
||
|
|
||
|
/* Configuration */
|
||
|
|
||
|
int gl_setcontextvga(int m);
|
||
|
int gl_setcontextvgavirtual(int m);
|
||
|
void gl_setcontextvirtual(int w, int h, int bpp, int bitspp, void *vbuf);
|
||
|
void gl_setcontextwidth(int w);
|
||
|
void gl_setcontextheight(int h);
|
||
|
GraphicsContext *gl_allocatecontext(void);
|
||
|
void gl_setcontext(GraphicsContext * gc);
|
||
|
void gl_getcontext(GraphicsContext * gc);
|
||
|
void gl_freecontext(GraphicsContext * gc);
|
||
|
|
||
|
/* Line drawing */
|
||
|
|
||
|
void gl_setpixel(int x, int y, int c);
|
||
|
void gl_setpixelrgb(int x, int y, int r, int g, int b);
|
||
|
int gl_getpixel(int x, int y);
|
||
|
void gl_getpixelrgb(int x, int y, int *r, int *g, int *b);
|
||
|
int gl_rgbcolor(int r, int g, int b);
|
||
|
void gl_hline(int x1, int y, int x2, int c);
|
||
|
void gl_line(int x1, int y1, int x2, int y2, int c);
|
||
|
void gl_circle(int x, int y, int r, int c);
|
||
|
void gl_fillcircle(int sx, int sy, int r, int c);
|
||
|
void gl_bcircle(int sx, int sy, int r, int c, int fill);
|
||
|
|
||
|
/* Box (bitmap) functions */
|
||
|
|
||
|
void gl_fillbox(int x, int y, int w, int h, int c);
|
||
|
void gl_getbox(int x, int y, int w, int h, void *dp);
|
||
|
void gl_putbox(int x, int y, int w, int h, void *dp);
|
||
|
void gl_putboxpart(int x, int y, int w, int h, int bw, int bh, void *b,
|
||
|
int xo, int yo);
|
||
|
void gl_putboxmask(int x, int y, int w, int h, void *dp);
|
||
|
void gl_copybox(int x1, int y1, int w, int h, int x2, int y2);
|
||
|
void gl_copyboxtocontext(int x1, int y1, int w, int h, GraphicsContext * gc,
|
||
|
int x2, int y2);
|
||
|
void gl_copyboxfromcontext(GraphicsContext * gc, int x1, int y1, int w, int h,
|
||
|
int x2, int y2);
|
||
|
/* The following functions only work in 256-color modes: */
|
||
|
void gl_compileboxmask(int w, int h, void *sdp, void *ddp);
|
||
|
int gl_compiledboxmasksize(int w, int h, void *sdp);
|
||
|
void gl_putboxmaskcompiled(int x, int y, int w, int h, void *dp);
|
||
|
|
||
|
/* Miscellaneous */
|
||
|
|
||
|
void gl_clearscreen(int c);
|
||
|
void gl_scalebox(int w1, int h1, void *sb, int w2, int h2, void *db);
|
||
|
void gl_setdisplaystart(int x, int y);
|
||
|
void gl_enableclipping(void);
|
||
|
void gl_setclippingwindow(int x1, int y1, int x2, int y2);
|
||
|
void gl_disableclipping(void);
|
||
|
|
||
|
/* Screen buffering */
|
||
|
|
||
|
void gl_copyscreen(GraphicsContext * gc);
|
||
|
void gl_setscreenoffset(int o);
|
||
|
int gl_enablepageflipping(GraphicsContext * gc);
|
||
|
|
||
|
/* Text */
|
||
|
|
||
|
/* Writemode flags. */
|
||
|
#define WRITEMODE_OVERWRITE 0
|
||
|
#define WRITEMODE_MASKED 1
|
||
|
#define FONT_EXPANDED 0
|
||
|
#define FONT_COMPRESSED 2
|
||
|
|
||
|
void gl_expandfont(int fw, int fh, int c, void *sfdp, void *dfdp);
|
||
|
void gl_setfont(int fw, int fh, void *fdp);
|
||
|
void gl_colorfont(int fw, int fh, int c, void *fdp);
|
||
|
void gl_setwritemode(int wm);
|
||
|
void gl_write(int x, int y, char *s);
|
||
|
void gl_writen(int x, int y, int n, char *s);
|
||
|
void gl_setfontcolors(int bg, int fg);
|
||
|
|
||
|
/* gl_printf is only available in ELF libraries!! */
|
||
|
int gl_printf(int x, int y, const char *fmt,...);
|
||
|
|
||
|
extern unsigned char *gl_font8x8; /* compressed 8x8 font */
|
||
|
|
||
|
/* 256-color Palette */
|
||
|
|
||
|
typedef struct {
|
||
|
struct {
|
||
|
unsigned char red; /* 6-bit values */
|
||
|
unsigned char green;
|
||
|
unsigned char blue;
|
||
|
} color[256];
|
||
|
} Palette;
|
||
|
|
||
|
void gl_setpalettecolor(int c, int r, int b, int g);
|
||
|
void gl_getpalettecolor(int c, int *r, int *b, int *g);
|
||
|
void gl_setpalettecolors(int s, int n, void *dp);
|
||
|
void gl_getpalettecolors(int s, int n, void *dp);
|
||
|
void gl_setpalette(void *p);
|
||
|
void gl_getpalette(void *p);
|
||
|
void gl_setrgbpalette(void);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
#endif
|