Linux程式设计入门 - SVGALIB
SvgaLib是Linux Console下的VGA驱动函数库。虽然它的品质还是有点低,支援的萤幕卡种类不算太多,但是有许多的游戏及程式都是用它来做开发,可以算是非官方的标准了。如果您准备要在Console下撰写图形功能的程式,目前来说SVGALIB是您唯一的选择。目前使用SVGALIB的程式有许多,中文终端机使用SVGALIB的就有a4c.tty/yact/bcs16。 这里我只讲一些简单的使用方法,如启动vga及mouse的使用。要有效地、高阶的运用,技巧复杂很多,例如a4c.tty就另外往上架一层Star Window Manager,来管理一个小型视窗系统。 vga vgamouse int vga_setmode(int mode); int vga_hasmode(int mode); int vga_setpalette(int index, int red, int green, int blue); int vga_getpalette(int index, int *red, int *green, int *blue); int vga_setcolor(int color); int vga_drawpixel(int x, int y); int vga_drawline(int x1, int y1, int x2, int y2); int vga_getpixel(int x, int y); vga_modeinfo *vga_getmodeinfo(int mode); unsigned char *graph_mem; unsigned char *vga_getgraphmem(void); void vga_setpage(int p); void vga_setreadpage(int p); void vga_setreadpage(int p); void vga_setwritepage(int p); void vga_setdisplaystart(int a); void vga_waitretrace(void); int vga_init(void); int vga_setrgbcolor(int r, int g, int b); #define TEXT 0 /* Compatible with VGAlib v1.2 */ #define G320x200x16 1 #define G640x200x16 2 #define G640x350x16 3 #define G640x480x16 4 #define G320x200x256 5 #define G320x240x256 6 #define G320x400x256 7 #define G360x480x256 8 #define G640x480x2 9 #define G640x480x256 10 #define G800x600x256 11 #define G1024x768x256 12 #define G1280x1024x256 13 /* Additional modes. */ #define G320x200x32K 14 #define G320x200x64K 15 #define G320x200x16M 16 #define G640x480x32K 17 #define G640x480x64K 18 #define G640x480x16M 19 #define G800x600x32K 20 #define G800x600x64K 21 #define G800x600x16M 22 #define G1024x768x32K 23 #define G1024x768x64K 24 #define G1024x768x16M 25 #define G1280x1024x32K 26 #define G1280x1024x64K 27 #define G1280x1024x16M 28 #define G800x600x16 29 #define G1024x768x16 30 #define G1280x1024x16 31 #define G720x348x2 32 /* Hercules emulation mode */ #define G320x200x16M32 33 /* 32-bit per pixel modes. */ #define G640x480x16M32 34 #define G800x600x16M32 35 #define G1024x768x16M32 36 #define G1280x1024x16M32 37 /* additional resolutions */ #define G1152x864x16 38 #define G1152x864x256 39 #define G1152x864x32K 40 #define G1152x864x64K 41 #define G1152x864x16M 42 #define G1152x864x16M32 43 #define G1600x1200x16 44 #define G1600x1200x256 45 #define G1600x1200x32K 46 #define G1600x1200x64K 47 #define G1600x1200x16M 48 #define G1600x1200x16M32 49 typedef struct { int width; int height; int bytesperpixel; int colors; int linewidth; /* scanline width in bytes */ int maxlogicalwidth; /* maximum logical scanline width */ int startaddressrange; /* changeable bits set */ int maxpixels; /* video memory / bytesperpixel */ int haveblit; /* mask of blit functions available */ int flags; /* other flags */ /* Extended fields: */ int chiptype; /* Chiptype detected */ int memory; /* videomemory in KB */ int linewidth_unit; /* Use only a multiple of this as parameter for set_displaystart */ char *linear_aperture; /* points to mmap secondary mem aperture of car int aperture_size; /* size of aperture in KB if size>=videomemory. void (*set_aperture_page) (int page); /* if aperture_size void *extensions; /* points to copy of eeprom for mach32 */ /* depends from actual driver/chiptype.. etc. */ } vga_modeinfo; OK STATION, Webmaster, Brian Lin
|