1 /* Graphics Library headerfile */ 2 3 #ifndef VGAGL_H 4 #define VGAGL_H 5 6 #ifdef __cplusplus 7 extern "C" 8 { 9 #endif 10 11 12 /* Graphics context */ 13 14 #define CONTEXT_VIRTUAL 0x0 15 #define CONTEXT_PAGED 0x1 16 #define CONTEXT_LINEAR 0x2 17 #define CONTEXT_MODEX 0x3 18 #define CONTEXT_PLANAR16 0x4 19 20 #define MODEFLAG_PAGEFLIPPING_CAPABLE 0x01 21 #define MODEFLAG_TRIPLEBUFFERING_CAPABLE 0x02 22 #define MODEFLAG_PAGEFLIPPING_ENABLED 0x04 23 #define MODEFLAG_TRIPLEBUFFERING_ENABLED 0x08 24 #define MODEFLAG_FLIPPAGE_BANKALIGNED 0x10 25 /* 26 * The next two can never occur together, thus we use the same flag 27 * (as svgalib does). 28 */ 29 #define MODEFLAG_32BPP_SHIFT8 0x20 30 #define MODEFLAG_24BPP_REVERSED 0x20 31 32 typedef struct { 33 void (*driver_setpixel_func) (int, int, int); 34 int (*driver_getpixel_func) (int, int); 35 void (*driver_hline_func) (int, int, int, int); 36 void (*driver_fillbox_func) (int, int, int, int, int); 37 void (*driver_putbox_func) (int, int, int, int, void *, int); 38 void (*driver_getbox_func) (int, int, int, int, void *, int); 39 void (*driver_putboxmask_func) (int, int, int, int, void *); 40 void (*driver_putboxpart_func) (int, int, int, int, int, int, void *, 41 int, int); 42 void (*driver_getboxpart_func) (int, int, int, int, int, int, void *, 43 int, int); 44 void (*driver_copybox_func) (int, int, int, int, int, int); 45 } framebufferfunctions; 46 47 typedef struct { 48 unsigned char modetype; /* virtual, paged, linear, mode X */ 49 unsigned char modeflags; /* or planar16 */ 50 unsigned char dummy; 51 unsigned char flippage; 52 int width; /* width in pixels */ 53 int height; /* height in pixels */ 54 int bytesperpixel; /* bytes per pixel (1, 2, 3, or 4) */ 55 int colors; /* number of colors */ 56 int bitsperpixel; /* bits per pixel (8, 15, 16 or 24) */ 57 int bytewidth; /* length of a scanline in bytes */ 58 char *vbuf; /* address of framebuffer */ 59 int clip; /* clipping enabled? */ 60 int clipx1; /* top-left coordinate of clip window */ 61 int clipy1; 62 int clipx2; /* bottom-right coordinate of clip window */ 63 int clipy2; 64 framebufferfunctions ff; 65 } GraphicsContext; 66 67 extern GraphicsContext currentcontext; 68 69 #define BYTESPERPIXEL (currentcontext.bytesperpixel) 70 #define BYTEWIDTH (currentcontext.bytewidth) 71 #define WIDTH (currentcontext.width) 72 #define HEIGHT (currentcontext.height) 73 #define VBUF (currentcontext.vbuf) 74 #define MODETYPE (currentcontext.modetype) 75 #define MODEFLAGS (currentcontext.modeflags) 76 #define BITSPERPIXEL (currentcontext.bitsperpixel) 77 #define COLORS (currentcontext.colors) 78 79 #define __clip (currentcontext.clip) 80 #define __clipx1 (currentcontext.clipx1) 81 #define __clipy1 (currentcontext.clipy1) 82 #define __clipx2 (currentcontext.clipx2) 83 #define __clipy2 (currentcontext.clipy2) 84 85 86 /* Configuration */ 87 88 int gl_setcontextvga(int m); 89 int gl_setcontextvgavirtual(int m); 90 void gl_setcontextvirtual(int w, int h, int bpp, int bitspp, void *vbuf); 91 void gl_setcontextwidth(int w); 92 void gl_setcontextheight(int h); 93 GraphicsContext *gl_allocatecontext(void); 94 void gl_setcontext(GraphicsContext * gc); 95 void gl_getcontext(GraphicsContext * gc); 96 void gl_freecontext(GraphicsContext * gc); 97 98 /* Line drawing */ 99 100 void gl_setpixel(int x, int y, int c); 101 void gl_setpixelrgb(int x, int y, int r, int g, int b); 102 int gl_getpixel(int x, int y); 103 void gl_getpixelrgb(int x, int y, int *r, int *g, int *b); 104 int gl_rgbcolor(int r, int g, int b); 105 void gl_hline(int x1, int y, int x2, int c); 106 void gl_line(int x1, int y1, int x2, int y2, int c); 107 void gl_circle(int x, int y, int r, int c); 108 void gl_fillcircle(int sx, int sy, int r, int c); 109 void gl_bcircle(int sx, int sy, int r, int c, int fill); 110 111 /* Box (bitmap) functions */ 112 113 void gl_fillbox(int x, int y, int w, int h, int c); 114 void gl_getbox(int x, int y, int w, int h, void *dp); 115 void gl_putbox(int x, int y, int w, int h, void *dp); 116 void gl_putboxpart(int x, int y, int w, int h, int bw, int bh, void *b, 117 int xo, int yo); 118 void gl_putboxmask(int x, int y, int w, int h, void *dp); 119 void gl_copybox(int x1, int y1, int w, int h, int x2, int y2); 120 void gl_copyboxtocontext(int x1, int y1, int w, int h, GraphicsContext * gc, 121 int x2, int y2); 122 void gl_copyboxfromcontext(GraphicsContext * gc, int x1, int y1, int w, int h, 123 int x2, int y2); 124 /* The following functions only work in 256-color modes: */ 125 void gl_compileboxmask(int w, int h, void *sdp, void *ddp); 126 int gl_compiledboxmasksize(int w, int h, void *sdp); 127 void gl_putboxmaskcompiled(int x, int y, int w, int h, void *dp); 128 129 /* Miscellaneous */ 130 131 void gl_clearscreen(int c); 132 void gl_scalebox(int w1, int h1, void *sb, int w2, int h2, void *db); 133 void gl_setdisplaystart(int x, int y); 134 void gl_enableclipping(void); 135 void gl_setclippingwindow(int x1, int y1, int x2, int y2); 136 void gl_disableclipping(void); 137 138 /* Screen buffering */ 139 140 void gl_copyscreen(GraphicsContext * gc); 141 void gl_setscreenoffset(int o); 142 int gl_enablepageflipping(GraphicsContext * gc); 143 144 /* Text */ 145 146 /* Writemode flags. */ 147 #define WRITEMODE_OVERWRITE 0 148 #define WRITEMODE_MASKED 1 149 #define FONT_EXPANDED 0 150 #define FONT_COMPRESSED 2 151 152 void gl_expandfont(int fw, int fh, int c, void *sfdp, void *dfdp); 153 void gl_setfont(int fw, int fh, void *fdp); 154 void gl_colorfont(int fw, int fh, int c, void *fdp); 155 void gl_setwritemode(int wm); 156 void gl_write(int x, int y, char *s); 157 void gl_writen(int x, int y, int n, char *s); 158 void gl_setfontcolors(int bg, int fg); 159 160 /* gl_printf is only available in ELF libraries!! */ 161 int gl_printf(int x, int y, const char *fmt,...); 162 163 extern unsigned char *gl_font8x8; /* compressed 8x8 font */ 164 165 /* 256-color Palette */ 166 167 typedef struct { 168 struct { 169 unsigned char red; /* 6-bit values */ 170 unsigned char green; 171 unsigned char blue; 172 } color[256]; 173 } Palette; 174 175 void gl_setpalettecolor(int c, int r, int b, int g); 176 void gl_getpalettecolor(int c, int *r, int *b, int *g); 177 void gl_setpalettecolors(int s, int n, void *dp); 178 void gl_getpalettecolors(int s, int n, void *dp); 179 void gl_setpalette(void *p); 180 void gl_getpalette(void *p); 181 void gl_setrgbpalette(void); 182 183 184 #ifdef __cplusplus 185 } 186 187 #endif 188 #endif 189