ǶÈëʽLinuxϵͳͼÐμ°Í¼ÐÎÓû§½çÃæ×ÛÊö
×÷ÕߣºÎºÓÀÃ÷£¨[email]ymwei@minigui.org[/email]£©¡£ÉùÃ÷£ºÈκÎÈË¿ÉÒÔÒÔÈκη½Ê½¸´ÖÆ¡¢Ð޸쬷¢²¼»òÕßתÌùÕâÆªÎÄÕµIJ¿·Ö»òÈ«²¿ÄÚÈÝ£¬Ç°ÌáÊÇÍêÕû±£ÁôÕâÒ»°æÈ¨ÉùÃ÷¡£Èç¹ûÒªÐ޸ı¾ÎÄ»òÕß×÷ΪÆäËû¿É·¢²¼¸å¼þµÄ²¿·Ö£¬Çëͨ¹ýµç×ÓÓʼþ֪ͨÔ×÷Õß¡£µ±È»£¬Èç¹û·¢ÏÖÆäÖеÄÈκδíÎó£¬Ò²Çë¸æËßÔ×÷Õߣ¬ÒÔ±ãÐ޸ĸüС£
Ŀ¼
1 Linux ͼÐÎÁìÓòµÄ»ù´¡ÉèÊ©
1.1 X Window
1.2 SVGALib
1.3 FrameBuffer
1.4 LibGGI
2 Linux ͼÐÎÁìÓòµÄ¸ß¼¶º¯Êý¿â
2.1 Xlib ¼°ÆäËûÏà¹Øº¯Êý¿â
2.2 SDL
2.3 Allegro
2.4 Mesa3D
2.5 DirectFB
3 ÃæÏòǶÈëʽLinux ϵͳµÄͼÐÎÓû§½çÃæ
3.1 MicroWindows/NanoX
3.2 OpenGUI
3.3 Qt/Embedded
3.4 MiniGUI
4 С½á
±¾ÎÄÊ×ÏȸÅÊöÁË Linux ͼÐÎÁìÓòµÄ»ù±¾ÉèÊ©£¬È»ºóÃèÊöÁËһЩ¿É¹©Ç¶Èëʽ Linux ϵͳʹÓõĸ߼¶Í¼ÐοâÒÔ¼°Í¼ÐÎÓû§½çÃæÖ§³Öϵͳ¡£Ï£Íû¶ÔǶÈëʽ Linux ϵͳµÄ¿ª·¢ÓÐËù°ïÖú¡£
1 Linux ͼÐÎÁìÓòµÄ»ù´¡ÉèÊ©
±¾Ð¡½ÚÊ×ÏÈÏò¶ÁÕßÃèÊö Linux ͼÐÎÁìÓòÖг£¼ûµÄ»ù´¡ÉèÊ©¡£Ö®ËùÒÔ³ÆÎª»ù´¡ÉèÊ©£¬ÊÇÒòΪÕâЩϵͳ£¨»òÕߺ¯Êý¿â£©£¬Ò»°ã×÷ΪÆäËû¸ß¼¶Í¼ÐλòÕßͼÐÎÓ¦ÓóÌÐòµÄ»ù±¾º¯Êý¿â¡£ÕâЩϵͳ£¨»òÕߺ¯Êý¿â£©°üÀ¨£ºX Window¡¢SVGALib¡¢FrameBuffer µÈµÈ¡£
1.1 X Window
ÌáÆð Linux ÉϵÄͼÐΣ¬Ðí¶àÈËÊ×ÏÈÏëµ½µÄÊÇ X Window¡£ÕâһϵͳÊÇĿǰÀà UNIX ϵͳÖд¦ÓÚ¿ØÖƵØÎ»µÄ×ÀÃæÍ¼ÐÎϵͳ¡£ÎÞÒÉ£¬X Window ×÷Ϊһ¸öͼÐλ·¾³Êdzɹ¦µÄ£¬ËüÉÏÃæÔËÐÐ×ŰüÀ¨ CAD½¨Ä£¹¤¾ßºÍ°ì¹«Ì×¼þÔÚÄڵĴóÁ¿Ó¦ÓóÌÐò¡£µ«±ØÐë¿´µ½µÄÊÇ£¬ÓÉÓÚ X Window ÔÚÌåϵ½Ó¿ÚÉϵÄÔÒò£¬ÏÞÖÆÁËÆä¶ÔÓÎÏ·¡¢¶àýÌåµÄÖ§³ÖÄÜÁ¦¡£Óû§ÔÚ X Window ÉÏÔËÐÐ VCD ²¥·ÅÆ÷£¬»òÕßÔËÐÐһЩ´óÐ͵ÄÈýάÓÎϷʱ£¬¾³£»á·¢ÏÖͬÑùµÄÓ²¼þÅäÖã¬È´²»ÄÜ»ñµÃºÍ Windows ²Ù×÷ϵͳһÑùµÄͼÐÎЧ¹û¨D¨D¼´Ê¹Ê¹ÓÃÁ˼ÓËÙµÄ X Server£¬ÆäЧ¹ûÒ²²»ÄÜÁîÈËÂúÒâ¡£ÁíÍ⣬´óÐ͵ÄÓ¦ÓóÌÐò£¨±ÈÈç Mozilla ä¯ÀÀÆ÷£©ÔÚ X Window ÉÏÔËÐÐʱµÄÏìÓ¦ÄÜÁ¦£¬Ò²Ï൱²»ÄÜÁîÈËÂúÒâ¡£µ±È»£¬ÕâÀïÓÐ Linux ÄÚºËÔÚ½ø³Ìµ÷¶ÈÉϵÄÎÊÌ⣬ҲÓÐ X Window µÄÔÒò¡£
X Window ΪÁËÂú×ã¶ÔÓÎÏ·¡¢¶àýÌåµÈÓ¦ÓöÔͼÐμÓËÙÄÜÁ¦µÄÒªÇó£¬ÌṩÁË DGA£¨Ö±½ÓͼÐηÃÎÊ£©À©Õ¹£¬Í¨¹ý¸ÃÀ©Õ¹£¬Ó¦ÓóÌÐò¿ÉÒÔÔÚÈ«ÆÁÄ£?**±½Ó·ÃÎÊÏÔʾ¿¨µÄÖ¡»º³åÇ?£¬²¢Äܹ»Ìṩ¶ÔijЩ¼ÓËÙ¹¦ÄܵÄÖ§³Ö¡£
1.2 SVGALib
SVGALib ÊÇ Linux ϵͳÖÐ×îÔç³öÏÖµÄ·Ç X ͼÐÎÖ§³Ö¿â¡£Õâ¸ö¿â´Ó×î³õ¶Ô±ê×¼ VGA ¼æÈÝоƬµÄÖ§³Ö¿ªÊ¼£¬Ò»Ö±·¢Õ¹µ½¶ÔÀÏʽ SVGA оƬµÄÖ§³ÖÒÔ¼°¶ÔÏÖ½ñÁ÷Ðеĸ߼¶ÊÓÆµÐ¾Æ¬µÄÖ§³Ö¡£ËüΪÓû§ÌṩÁËÔÚ¿ØÖÆÌ¨ÉϽøÐÐͼÐαà³ÌµÄ½Ó¿Ú£¬Ê¹Óû§¿ÉÒÔÔÚ PC ¼æÈÝϵͳÉÏ·½±ãµØ»ñµÃͼÐÎÖ§³Ö¡£µ«¸ÃϵͳÓÐÈçϲ»×㣺
1£©½Ó¿ÚÔÓÂÒ¡£SVGALib ´Ó×î³õµÄ vgalib ·¢Õ¹¶øÀ´£¬±£ÁôÁËÀÏϵͳµÄÐí¶à½Ó¿Ú£¬¶øÕâЩ½Ó¿ÚÈ´²»ÄÜÁ¼ºÃµØÓºÏÐÂÏÔʾоƬµÄͼÐÎÄÜÁ¦¡£
2£©Î´ÄܽϺõØÒþ²ØÓ²¼þϸ½Ú¡£Ðí¶à²Ù×÷£¬²»ÄÜ×Ô¶¯Ê¹ÓÃÏÔʾоƬµÄ¼ÓËÙÄÜÁ¦Ö§³Ö¡£
3£©¿ÉÒÆÖ²ÐԲSVGALib ĿǰֻÄÜÔËÐÐÔÚ x86 ƽ̨ÉÏ£¬¶ÔÆäËûƽ̨µÄÖ§³ÖÄÜÁ¦½Ï²î£¨Alpha ƽ̨³ýÍ⣩¡£
4£©·¢Õ¹»ºÂý£¬Óб»ÆäËûͼÐοâÈ¡´úµÄ¿ÉÄÜ¡£SVGALib ×÷Ϊһ¸öÀϵÄͼÐÎÖ§³Ö¿â£¬Ä¿Ç°µÄÓ¦Ó÷¶Î§Ô½À´Ô½Ð¡£¬ÓÈÆäÔÚ Linux ÄÚºËÔö¼ÓÁË FrameBuffer Çý¶¯Ö§³ÖÖ®ºó£¬ÓÐÖð½¥±»ÆäËûͼÐοâÌæ´úµÄ¼£Ïó¡£
5£©¶ÔÓ¦ÓõÄÖ§³ÖÄÜÁ¦½Ï²î¡£SVAGLib ×÷Ϊһ¸öͼÐο⣬¶Ô¸ß¼¶Í¼Ðι¦ÄܵÄÖ§³Ö£¬±ÈÈçÖ±ÏߺÍÇúÏߵȵȣ¬È´²»ÄÜÁîÈËÂúÒâ¡£¾¡¹Ü SVGALib ÓÐÐí¶àȱµã£¬µ« SVGALib ¾³£±»ÆäËûͼÐοâÓÃÀ´³õʼ»¯Ìض¨Ð¾Æ¬µÄÏÔʾģʽ£¬²¢»ñµÃÓ³Éäµ½½ø³ÌµØÖ·¿Õ¼äµÄÏßÐÔÏÔʾÄÚ´æÊ×µØÖ·£¨¼´Ö¡»º³åÇø£©£¬¶øÆäËûµÄ½Ó¿ÚÈ´ºÜÉÙÓõ½¡£ÁíÍ⣬ SVGALib ÖÐËù°üº¬µÄÖîÈç¼üÅÌ¡¢Êó±êºÍÓÎÏ·¸ËµÄ½Ó¿Ú£¬Ò²ºÜÉÙ±»ÆäËûÓ¦ÓóÌÐòËùʹÓá£
Òò´Ë£¬SVGALib µÄʹÓÃÔ½À´Ô½ÉÙ£¬±ÊÕßÒ²²»½¨ÒéÓû§Ê¹ÓÃÕâ¸öͼÐο⡣µ±È»£¬Èç¹ûÓû§µÄÏÔʾ¿¨Ö»Ö§³Ö±ê×¼ VGA ģʽ£¬Ôò SVGALib »¹ÊDZȽϺõÄÑ¡Ôñ¡£
1.3 FrameBuffer
FrameBuffer ÊdzöÏÖÔÚ 2.2.xx Äں˵±ÖеÄÒ»ÖÖÇý¶¯³ÌÐò½Ó¿Ú¡£ÕâÖÖ½Ó¿Ú½«ÏÔʾÉ豸³éÏóΪ֡»º³åÇø¡£Óû§¿ÉÒÔ½«Ëü¿´³ÉÊÇÏÔʾÄÚ´æµÄÒ»¸öÓ³Ïñ£¬½«ÆäÓ³Éäµ½½ø³ÌµØÖ·¿Õ¼äÖ®ºó£¬¾Í¿ÉÒÔÖ±½Ó½øÐжÁд²Ù×÷£¬¶øÐ´²Ù×÷¿ÉÒÔÁ¢¼´·´Ó¦ÔÚÆÁÄ»ÉÏ¡£¸ÃÇý¶¯³ÌÐòµÄÉ豸ÎļþÒ»°ãÊÇ /dev/fb0¡¢/dev/fb1 µÈµÈ¡£±ÈÈ磬¼ÙÉèÏÖÔÚµÄÏÔʾģʽÊÇ 1024x768-8 λɫ£¬Ôò¿ÉÒÔͨ¹ýÈçϵÄÃüÁîÇå¿ÕÆÁÄ»£º
$ dd if=/dev/zero of=/dev/fb0 bs=1024 count=768
ÔÚÓ¦ÓóÌÐòÖУ¬Ò»°ãͨ¹ý½« FrameBuffer É豸ӳÉäµ½½ø³ÌµØÖ·¿Õ¼äµÄ·½Ê½Ê¹Ó㬱ÈÈçÏÂÃæµÄ³ÌÐò¾Í´ò¿ª /dev/fb0 É豸£¬²¢Í¨¹ý mmap ϵͳµ÷ÓýøÐеØÖ·Ó³Éä£¬ËæºóÓà memset ½«ÆÁÄ»Çå¿Õ£¨ÕâÀï¼ÙÉèÏÔʾģʽÊÇ 1024x768-8 λɫģʽ£¬ÏßÐÔÄÚ´æÄ£Ê½£©£º
int fb;
unsigned char* fb_mem;
fb = open (¡°/dev/fb0¡±, O_RDWR);
fb_mem = mmap (NULL, 1024*768, PROT_READ|PROT_WRITE,MAP_SHARED,fb,0);
memset (fb_mem, 0, 1024*768);
FrameBuffer É豸»¹ÌṩÁËÈô¸É ioctl ÃüÁͨ¹ýÕâЩÃüÁ¿ÉÒÔ»ñµÃÏÔʾÉ豸µÄһЩ¹Ì¶¨ÐÅÏ¢£¨±ÈÈçÏÔʾÄÚ´æ´óС£©¡¢ÓëÏÔʾģʽÏà¹ØµÄ¿É±äÐÅÏ¢£¨±ÈÈç·Ö±æÂÊ¡¢ÏóËØ½á¹¹¡¢Ã¿É¨ÃèÏßµÄ×Ö½Ú¿í¶È£©£¬ÒÔ¼°Î±²Êɫģʽϵĵ÷É«°åÐÅÏ¢µÈµÈ¡£
ͨ¹ý FrameBuffer É豸£¬»¹¿ÉÒÔ»ñµÃµ±Ç°ÄÚºËËùÖ§³ÖµÄ¼ÓËÙÏÔʾ¿¨µÄÀàÐÍ£¨Í¨¹ý¹Ì¶¨ÐÅÏ¢µÃµ½£©£¬ÕâÖÖÀàÐÍͨ³£ÊǺÍÌØ¶¨ÏÔʾоƬÏà¹ØµÄ¡£±ÈÈçĿǰ×îеÄÄںˣ¨2.4.9£©ÖУ¬¾Í°üº¬ÓÐ¶Ô S3¡¢Matrox¡¢nVidia¡¢3Dfx µÈµÈÁ÷ÐÐÏÔʾоƬµÄ¼ÓËÙÖ§³Ö¡£ÔÚ»ñµÃÁ˼ÓËÙоƬÀàÐÍÖ®ºó£¬Ó¦ÓóÌÐò¾Í¿ÉÒÔ½« PCI É豸µÄÄÚ´æI/O£¨memio£©Ó³Éäµ½½ø³ÌµÄµØÖ·¿Õ¼ä¡£ÕâЩ memio Ò»°ãÊÇÓÃÀ´¿ØÖÆÏÔʾ¿¨µÄ¼Ä´æÆ÷£¬Í¨¹ý¶ÔÕâЩ¼Ä´æÆ÷µÄ²Ù×÷£¬Ó¦ÓóÌÐò¾Í¿ÉÒÔ¿ØÖÆÌض¨ÏÔ¿¨µÄ¼ÓËÙ¹¦ÄÜ¡£
PCI É豸¿ÉÒÔ½«×Ô¼ºµÄ¿ØÖƼĴæÆ÷Ó³Éäµ½ÎïÀíÄÚ´æ¿Õ¼ä£¬¶øºó£¬¶ÔÕâЩ¿ØÖƼĴæÆ÷µÄ·ÃÎÊ£¬¸ø±ä³ÉÁ˶ÔÎïÀíÄÚ´æµÄ·ÃÎÊ¡£Òò´Ë£¬ÕâЩ¼Ä´æÆ÷ÓÖ±»³ÆÎª¡°memio¡±¡£Ò»µ©±»Ó³Éäµ½ÎïÀíÄڴ棬Linux µÄÆÕͨ½ø³Ì¾Í¿ÉÒÔͨ¹ý mmap ½«ÕâЩÄÚ´æ I/O Ó³Éäµ½½ø³ÌµØÖ·¿Õ¼ä£¬ÕâÑù¾Í¿ÉÒÔÖ±½Ó·ÃÎÊÕâЩ¼Ä´æÆ÷ÁË¡£
µ±È»£¬ÒòΪ²»Í¬µÄÏÔʾоƬ¾ßÓв»Í¬µÄ¼ÓËÙÄÜÁ¦£¬¶Ômemio µÄʹÓúͶ¨ÒåÒ²¸÷×Ô²»Í¬£¬Õâʱ£¬¾ÍÐèÒªÕë¶Ô¼ÓËÙоƬµÄ²»Í¬ÀàÐÍÀ´±àдʵÏÖ²»Í¬µÄ¼ÓËÙ¹¦ÄÜ¡£±ÈÈç´ó¶àÊýоƬ¶¼ÌṩÁ˶ԾØÐÎÌî³äµÄÓ²¼þ¼ÓËÙÖ§³Ö£¬µ«²»Í¬µÄоƬʵÏÖ·½Ê½²»Í¬£¬Õâʱ£¬¾ÍÐèÒªÕë¶Ô²»Í¬µÄоƬÀàÐͱàд²»Í¬µÄÓÃÀ´Íê³ÉÌî³ä¾ØÐεĺ¯Êý¡£
˵µ½ÕâÀ¶ÁÕß¿ÉÄÜÒѾÒâʶµ½ FrameBuffer Ö»ÊÇÒ»¸öÌṩÏÔʾÄÚ´æºÍÏÔʾоƬ¼Ä´æÆ÷´ÓÎïÀíÄÚ´æÓ³Éäµ½½ø³ÌµØÖ·¿Õ¼äÖеÄÉ豸¡£ËùÒÔ£¬¶ÔÓÚÓ¦ÓóÌÐò¶øÑÔ£¬Èç¹ûÏ£ÍûÔÚ FrameBuffer Ö®ÉϽøÐÐͼÐαà³Ì£¬»¹ÐèÒªÍê³ÉÆäËûÐí¶à¹¤×÷¡£¾Ù¸öÀý×ÓÀ´½²£¬FrameBuffer ¾ÍÏñÒ»ÕÅ»²¼£¬Ê¹ÓÃʲôÑù×ӵĻ±Ê£¬ÈçºÎ»»£¬»¹ÐèÒªÄã×Ô¼º¶¯ÊÖÍê³É¡£
1.4 LibGGI
LibGGI ÊÔͼ½¨Á¢Ò»¸öÒ»°ãÐÔµÄͼÐνӿڣ¬¶øÕâ¸ö³éÏó½Ó¿ÚÁ¬Í¬Ïà¹ØµÄÊäÈ루Êó±ê¡¢¼üÅÌ¡¢ÓÎÏ·¸ËµÈ£©³éÏó½Ó¿ÚÒ»Æð£¬¿ÉÒÔ·½±ãµØÔËÐÐÔÚ X Window¡¢SVGALib¡¢FrameBuffer µÈµÈÖ®ÉÏ¡£½¨Á¢ÔÚ LibGGI Ö®ÉϵÄÓ¦ÓóÌÐò£¬²»¾ÖØÐ±àÒ룬¾Í¿ÉÒÔÔÚÉÏÊöÕâЩµ×²ãͼÐνӿÚÉÏÔËÐС£µ«²»ÖªºÎ¹Ê£¬LibGGI µÄ·¢Õ¹¼¸ºõÍ£ÖÍ¡£
2 Linux ͼÐÎÁìÓòµÄ¸ß¼¶º¯Êý¿â
2.1 Xlib ¼°ÆäËûÏà¹Øº¯Êý¿â
ÔÚ X Window ϵͳÖнøÐÐͼÐαà³Ìʱ£¬¿ÉÒÔÑ¡ÔñÖ±½ÓʹÓà Xlib¡£Xlib ʵ¼ÊÊǶԵײã X ÐÒéµÄ·â×°£¬¿Éͨ¹ý¸Ãº¯Êý¿â½øÐÐÒ»°ãµÄͼÐÎÊä³ö¡£Èç¹ûÄãµÄ X Server Ö§³Ö DGA£¬Ôò¿ÉÒÔͨ¹ý DGA À©Õ¹Ö±½Ó·ÃÎÊÏÔʾÉ豸£¬´Ó¶ø»ñµÃ¼ÓËÙÖ§³Ö¡£¶ÔÒ»°ãÓû§¶øÑÔ£¬ÓÉÓÚ Xlib µÄ½Ó¿ÚÌ«Ôʼ¶øÇÒ¸´ÔÓ£¬Òò´ËÒ»°ãµÄͼÐγÌÐòÑ¡ÔñÆäËû¸ß¼¶Ò»Ð©µÄͼÐοâ×÷Ϊ»ù´¡¡£±ÈÈ磬GTK¡¢QT µÈµÈ¡£ÕâÁ½¸öº¯Êýͬʱ»¹ÊÇһЩ¸ß¼¶µÄͼÐÎÓû§½çÃæÖ§³Öº¯Êý¿â¡£ÓÉÓÚÖÖÖÖÔÒò£¬GTK¡¢QT µÈº¯Êý¿â´æÔÚÓÐÅÓ´ó¡¢Õ¼ÓÃϵͳ×ÊÔ´¶àµÄÎÊÌ⣬²»Ì«ÊʺÏÔÚǶÈëʽϵͳÖÐʹÓá£Õâʱ£¬Äã¿ÉÒÔÑ¡ÔñʹÓà FLTK£¬ÕâÊÇÒ»¸öÇáÁ¿¼¶µÄͼÐκ¯Êý¿â£¬µ«ËüµÄÖ÷Òª¹¦Äܼ¯ÖÐÔÚÓû§½çÃæÉÏ£¬ÌṩÁ˽ÏΪ·á¸»µÄ¿Ø¼þ¼¯¡£
2.2 SDL
SDL £¨Simple DirectMedia Layer£©ÊÇÒ»¸ö¿çƽ̨µÄ¶àýÌåÓÎÏ·Ö§³Ö¿â¡£ÆäÖаüº¬Á˶ÔͼÐΡ¢ÉùÒô¡¢ÓÎÏ·¸Ë¡¢Ï̵߳ȵȵÄÖ§³Ö£¬Ä¿Ç°¿ÉÒÔÔËÐÐÔÚÐí¶àƽ̨ÉÏ£¬ÆäÖаüÀ¨ X Window¡¢X Window with DGA¡¢Linux FrameBuffer ¿ØÖÆÌ¨¡¢Linux SVGALib£¬ÒÔ¼°Windows DirectX¡¢BeOS µÈµÈ¡£
ÒòΪ SDL רÃÅΪÓÎÏ·ºÍ¶àýÌåÓ¦ÓöøÉè¼Æ¿ª·¢£¬ËùÒÔËü¶ÔͼÐεÄÖ§³Ö·Ç³£ÓÅÐ㣬ÓÈÆäÊǸ߼¶Í¼ÐÎÄÜÁ¦£¬±ÈÈç Alpha »ìºÍ¡¢Í¸Ã÷´¦Àí¡¢YUV ¸²¸Ç¡¢Gamma УÕýµÈµÈ¡£¶øÇÒÔÚ SDL »·¾³ÖÐÄܹ»·Ç³£·½±ãµØ¼ÓÔØÖ§³Ö OpenGL µÄ Mesa ¿â£¬´Ó¶øÌṩ¶Ô¶þάºÍÈýάͼÐεÄÖ§³Ö¡£
¿ÉÒÔ˵£¬SDL ÊDZàд¿çƽ̨ÓÎÏ·ºÍ¶àýÌåÓ¦ÓõÄ×î¼Ñƽ̨£¬Ò²µÄÈ·µÃµ½Á˹㷺ӦÓá£Ïà¹ØÐÅÏ¢£¬¿É²ÎÔÄ [url]http://www.libsdl.org[/url]¡£
2.3 Allegro
Allegro ÊÇÒ»¸öרÃÅΪ x86 ƽ̨Éè¼ÆµÄÓÎϷͼÐο⡣×î³õµÄ Allegro ÔËÐÐÔÚ DOS »·¾³Ï£¬¶øÄ¿Ç°¿ÉÔËÐÐÔÚ Linux FrameBuffe ¿ØÖÆÌ¨¡¢Linux SVGALib¡¢X Window µÈϵͳÉÏ¡£Allegro ÌṩÁËһЩ·á¸»µÄͼÐι¦ÄÜ£¬°üÀ¨¾ØÐÎÌî³äºÍÑùÌõÇúÏßÉú³ÉµÈµÈ£¬¶øÇÒ¾ßÓнϺõÄÈýάͼÐÎÏÔʾÄÜÁ¦¡£ÓÉÓÚ Allegro µÄÐí¶à¹Ø¼ü´úÂëÊDzÉÓûã±à±àдµÄ£¬ËùÒԸú¯Êý¿â¾ßÓÐÔËÐÐËٶȿ졢×ÊÔ´Õ¼ÓÃÉÙµÄÌØµã¡£È»¶ø£¬Allegro Ò²´æÔÚÈçÏÂȱµã£º
1£©¶ÔÏ̵߳ÄÖ§³Ö½Ï²î¡£Allegro µÄÐí¶àº¯ÊýÊÇ·ÇḬ̈߳²È«µÄ£¬²»ÄÜͬʱÔÚÁ½¸öÒÔÉϵÄÏß³ÌÖÐʹÓá£
2£©¶ÔÓ²¼þ¼ÓËÙÄÜÁ¦µÄÖ§³Ö²»×㣬ÔÚÉè¼ÆÉÏûÓÐΪӲ¼þ¼ÓËÙÌṩ½Ó¿Ú¡£
ÓÐ¹Ø Allegro µÄ½øÒ»²½ÐÅÏ¢£¬¿É²ÎÔÄ[url]http://www.allegro.cc/[/url]¡£
2.4 Mesa3D
Mesa3D ÊÇÒ»¸ö¼æÈÝ OpenGL ¹æ·¶µÄ¿ª·ÅÔ´Â뺯Êý¿â£¬ÊÇĿǰ Linux ÉÏÌṩרҵÈýάͼÐÎÖ§³ÖµÄΩһѡÔñ¡£Mesa3D ͬʱҲÊÇÒ»¸ö¿çƽ̨µÄº¯Êý¿â£¬Äܹ»ÔËÐÐÔÚ X Window¡¢X Window with DGA¡¢BeOS¡¢Linux SVGALib µÈƽ̨ÉÏ¡£
ÓÐ¹Ø Mesa3D µÄ½øÒ»²½ÐÅÏ¢£¬¿É²ÎÔÄ [url]http://www.mesa3d.org/[/url]¡£
2.5 DirectFB
DirectFB ÊÇרעÓÚ Linux FrameBuffer ¼ÓËÙµÄÒ»¸öͼÐο⣬²¢ÊÔͼ½¨Á¢Ò»¸ö¼æÈÝ GTK µÄǶÈëʽ GUI ϵͳ¡£ËüÒÔ¿É×°ÔØº¯Êý¿âµÄÐÎÊÆÌṩ¶Ô¼ÓËÙ FrameBuffer Çý¶¯³ÌÐòµÄÖ§³Ö¡£Ä¿Ç°£¬¸Ãº¯Êý¿âÕýÔÚ¿ª·¢Ö®ÖУ¨×îа汾 0.9.97£©£¬ÏêÇé¿É¼û [url]http://www.directfb.org/[/url]¡£
3 ÃæÏòǶÈëʽLinux ϵͳµÄͼÐÎÓû§½çÃæ
3.1 MicoroWindows/NanoX
MicroWindows£¨[url]http://microwindows.censoft.com[/url]£©ÊÇÒ»¸ö¿ª·ÅÔ´ÂëµÄÏîÄ¿£¬Ä¿Ç°ÓÉÃÀ¹ú Century Software ¹«Ë¾Ö÷³Ö¿ª·¢¡£¸ÃÏîÄ¿µÄ¿ª·¢Ò»¶È·Ç³£»îÔ¾£¬¹úÄÚÒ²ÓÐÈ˲ÎÓëÁËÆäÖеĿª·¢£¬²¢±àдÁË GB2312 µÈ×Ö·û¼¯µÄÖ§³Ö¡£µ«ÔÚ Qt/Embedded ·¢²¼ÒÔÀ´£¬¸ÃÏîÄ¿±äµÃ²»Ì«»îÔ¾£¬²¢³¤Ê±¼äÍ£ÁôÔÚ 0.89Pre7 °æ±¾¡£¿ÉÒÔ˵£¬ÒÔ¿ª·ÅÔ´ÂëÐÎÊÆ·¢Õ¹µÄ MicroWindows ÏîÄ¿£¬»ù±¾Í£ÖÍ¡£
MicroWindows ÊÇÒ»¸ö»ùÓÚµäÐͿͻ§/·þÎñÆ÷Ìåϵ½á¹¹µÄ GUI ϵͳ£¬»ù±¾·ÖΪÈý²ã¡£×îµ×²ãÊÇÃæÏòͼÐÎÊä³öºÍ¼üÅÌ¡¢Êó±ê»ò´¥ÃþÆÁµÄÇý¶¯³ÌÐò£»Öмä²ãÌṩµ×²ãÓ²¼þµÄ³éÏó½Ó¿Ú£¬²¢½øÐд°¿Ú¹ÜÀí£»×î¸ß²ã·Ö±ðÌṩ¼æÈÝÓÚ X Window ºÍ Windows CE£¨Win32 ×Ó¼¯£©µÄ API¡£
¸ÃÏîÄ¿µÄÖ÷ÒªÌØÉ«ÔÚÓÚÌṩÁËÀàËÆ X µÄ¿Í»§/·þÎñÆ÷Ìåϵ½á¹¹£¬²¢ÌṩÁËÏà¶ÔÍêÉÆµÄͼÐι¦ÄÜ£¬°üÀ¨Ò»Ð©¸ß¼¶µÄ¹¦ÄÜ£¬±ÈÈç Alpha »ìºÏ£¬Èýά֧³Ö£¬TrueType ×ÖÌåÖ§³ÖµÈ¡£µ«ÐèҪעÒâµÄÊÇ£¬MicroWindows µÄͼÐÎÒýÇæ´æÔÚÐí¶àÎÊÌ⣬¿ÉÒÔ¹éÄÉÈçÏ£º
1£©ÎÞÈκÎÓ²¼þ¼ÓËÙÄÜÁ¦¡£
2£©Í¼ÐÎÒýÇæÖдæÔÚÐí¶àµÍЧËã·¨£¬Í¬Ê±Î´¾ÈκÎÓÅ»¯¡£±ÈÈçÔÚÖ±Ïß»òÕßÔ²»¡»æÍ¼º¯ÊýÖУ¬´æÔÚµÍЧµÄÖðµãÅжϼôÇеÄÎÊÌâ¡£
3£©´úÂëÖÊÁ¿½Ï²î¡£ÓÉÓÚ¸ÃÏîĿȱÉÙÒ»¸öÇ¿ÓÐÁ¦µÄºËÐÄ´úÂëά»¤ÈËÔ±£¬Òò´Ë´úÂëÖÊÁ¿²Î²î²»Æë£¬Ó°ÏìÕûÌåϵͳÎȶ¨ÐÔ¡£ÕâÒ²ÊÇ MicroWindows ³¤Ê±¼äÍ£ÁôÔÚ 0.89Pre7 °æ±¾ÉϵÄÔÒò¡£
MicroWindows ²ÉÓà MPL Ìõ¿î·¢²¼£¨¸ÃÌõ¿î»ù±¾ÀàËÆ LGPL Ìõ¿î£©¡£
3.2 OpenGUI
OpenGUI£¨[url]http://www.tutok.sk/fastgl/[/url]£©ÔÚ Linux ϵͳÉÏ´æÔÚÒѾºÜ³¤Ê±¼äÁË¡£×î³õµÄÃû×ֽРFastGL£¬Ö»Ö§³Ö 256 É«µÄÏßÐÔÏÔ´æÄ£Ê½£¬µ«Ä¿Ç°Ò²Ö§³ÖÆäËûÏÔʾģʽ£¬²¢ÇÒÖ§³Ö¶àÖÖ²Ù×÷ϵͳƽ̨£¬±ÈÈç MS-DOS¡¢QNX ºÍ Linux µÈµÈ£¬²»¹ýĿǰֻ֧³Ö x86 Ó²¼þƽ̨¡£OpenGUI Ò²·ÖΪÈý²ã¡£×îµÍ²ãÊÇÓÉ»ã±à±àдµÄ¿ìËÙͼÐÎÒýÇæ£»Öмä²ãÌṩÁËͼÐλæÖÆ API£¬°üÀ¨ÏßÌõ¡¢¾ØÐΡ¢Ô²»¡µÈ£¬²¢ÇÒ¼æÈÝÓÚ Borland µÄ BGI API¡£µÚÈý²ãÓà C++ ±àд£¬ÌṩÁËÍêÕûµÄ GUI ¶ÔÏ󼯡£
OpenGUI ²ÉÓà LGPL Ìõ¿î·¢²¼¡£OpenGUI ±È½ÏÊʺÏÓÚ»ùÓÚ x86 ƽ̨µÄʵʱϵͳ£¬¿ÉÒÆÖ²ÐÔÉԲĿǰµÄ·¢Õ¹Ò²»ù±¾Í£ÖÍ¡£
3.3 Qt/Embedded
Qt/EmbeddedÊÇÖøÃûµÄ Qt ¿â¿ª·¢ÉÌ TrollTech£¨[url]http://www.trolltech.com/[/url]£©·¢²¼µÄÃæÏòǶÈëʽϵͳµÄ Qt °æ±¾¡£ÒòΪ Qt ÊÇ KDE µÈÏîĿʹÓÃµÄ GUI Ö§³Ö¿â£¬ËùÒÔÓÐÐí¶à»ùÓÚ Qt µÄ X Window ³ÌÐò¿ÉÒԷdz£·½±ãµØÒÆÖ²µ½ Qt/Embedded °æ±¾ÉÏ¡£Òò´Ë£¬×Ô´Ó Qt/Embedded ÒÔ GPL Ìõ¿îÐÎÊÆ·¢²¼ÒÔÀ´£¬¾ÍÓдóÁ¿µÄǶÈëʽ Linux ¿ª·¢ÉÌתµ½ÁË Qt/Embedded ϵͳÉÏ¡£±ÈÈ纫¹úµÄ Mizi ¹«Ë¾£¬**Ê¡µÄijЩǶÈëʽ Linux Ó¦Óÿª·¢É̵ȵȡ£
²»¹ý£¬ÔÚ±ÊÕß¿´À´£¬Qt/Embedded »¹ÓÐһЩÎÊÌâÖµµÃ¿ª·¢Õß×¢Ò⣺
1£©Ä¿Ç°£¬¸Ãϵͳ²ÉÓÃÁ½ÖÖÌõ¿î·¢²¼£¬ÆäÖаüÀ¨ GPL Ìõ¿î¡£¶Ôº¯Êý¿âʹÓà GPL Ìõ¿î£¬Òâζ×ÅÆäÉϵÄÓ¦ÓÃÐèÒª×ñÑ GPL Ìõ¿î¡£µ±È»ÁË£¬Èç¹ûÒª¿ª·¢ÉÌÒµ³ÌÐò£¬TrollTech Ò²ÔÊÐíÄã²ÉÓÃÁíÍâÒ»¸öÊÚȨÌõ¿î£¬Õâʱ£¬¾Í±ØÐëÏò TrollTech ½»ÄÉÊÚȨ·ÑÓÃÁË¡£
2£© Qt/Embedded ÊÇÒ»¸ö C++ º¯Êý¿â£¬¾¡¹Ü Qt/Embedded Éù³Æ¿ÉÒԲüôµ½×îÉÙ 630K£¬µ«ÕâʱµÄ Qt/Embedded ¿âÒѾ»ù±¾ÉÏʧȥÁËʹÓüÛÖµ¡£µÍµÄ³ÌÐòЧÂÊ¡¢´óµÄ×ÊÔ´ÏûºÄÒ²¶ÔÔËÐÐ Qt/Embedded µÄÓ²¼þÌá³öÁ˸ü¸ßµÄÒªÇó¡£
3£©Qt/Embedded ¿âĿǰÖ÷ÒªÕë¶ÔÊÖ³ÖʽÐÅÏ¢ÖÕ¶Ë£¬ÒòΪ¶ÔÓ²¼þ¼ÓËÙÖ§³ÖµÄØÑ·¦£¬ºÜÄÑÓ¦Óõ½¶ÔͼÐÎËÙ¶È¡¢¹¦ÄܺÍЧÂÊÒªÇó½Ï¸ßµÄǶÈëʽϵͳµ±ÖУ¬±ÈÈç»ú¶¥ºÐ¡¢ÓÎÏ·Öն˵ȵȡ£
4£©Qt/Embedded ÌṩµÄ¿Ø¼þ¼¯·ç¸ñÑØÓÃÁË PC ·ç¸ñ£¬²¢²»Ì«ÊʺÏÐí¶àÊÖ³ÖÉ豸µÄ²Ù×÷ÒªÇó¡£
5£©Qt/Embedded µÄ½á¹¹¹ýÓÚ¸´ÔÓ£¬ºÜÄѽøÐеײãµÄÀ©³ä¡¢¶¨ÖƺÍÒÆÖ²£¬ÓÈÆäÊÇÄǸöÓÃÀ´ÊµÏÖ signal/slot »úÖÆµÄÖøÃûµÄ moc Îļþ¡£
ÒòΪÉÏÊöÕâЩÔÒò£¬Ä¿Ç°Ëù¼ûµ½µÄ Qt/Embedded µÄÔËÐл·¾³£¬¼¸ºõÊÇÇåһɫ»ùÓÚ StrongARM µÄ iPAQ¡£
3.4 MiniGUI
MiniGUI£¨[url]http://www.minigui.org[/url]£©ÊÇÓɱÊÕßÖ÷³Ö£¬²¢ÓÉÐí¶à×ÔÓÉÈí¼þ¿ª·¢ÈËÔ±Ö§³ÖµÄÒ»¸ö×ÔÓÉÈí¼þÏîÄ¿£¨×ñÑ LGPL Ìõ¿î·¢²¼£©£¬ÆäÄ¿±êÊÇΪ»ùÓÚ Linux µÄʵʱǶÈëʽϵͳÌṩһ¸öÇáÁ¿¼¶µÄͼÐÎÓû§½çÃæÖ§³Öϵͳ¡£¸ÃÏîÄ¿×Ô 1998 Äêµ×¿ªÊ¼µ½ÏÖÔÚ£¬ÒÑÀú¾ 3 Äê¶àµÄ¿ª·¢¹ý³Ì¡£µ½Ä¿Ç°ÎªÖ¹£¬ÒѾ·Ç³£³ÉÊìºÍÎȶ¨¡£Ä¿Ç°£¬ÎÒÃÇÒѾÕýʽ·¢²¼ÁËÎȶ¨°æ±¾ 1.0.9£¬²¢ÇÒ¿ªÊ¼ÁËа汾ϵÁеĿª·¢£¬¼´ MiniGUI Version 1.1.x£¬¸ÃϵÁеÄÕýʽ°æÒ²¼´½«·¢²¼¡£
ÔÚ MiniGUI ¼¸ÄêµÄ·¢Õ¹¹ý³ÌÖУ¬ÓÐÐí¶àÖµµÃÒ»ÌáµÄ¼¼Êõ´´Ðµ㣬ÕýÊÇÓÉÓÚÕâЩ¼¼ÊõÉϵĴ´Ð£¬²ÅʹµÃ MiniGUI ¸ü¼ÓÊʺÏʵʱǶÈëʽϵͳ£»¶øÇÒ MiniGUI µÄÁé»îÐԷdz£ºÃ£¬¿ÉÒÔÓ¦ÓÃÔÚ°üÀ¨ÊÖ³ÖÉ豸¡¢»ú¶¥ºÐ¡¢ÓÎÏ·Öն˵ȵÈÔÚÄڵĸ÷Öָ߶˻òÕߵͶ˵ÄǶÈëʽϵͳµ±ÖС£ÕâЩ¼¼Êõ´´Ð°üÀ¨£º
1£©Í¼ÐγéÏó²ã¡£Í¼ÐγéÏó²ã¶Ô¶¥²ã API »ù±¾Ã»ÓÐÓ°Ï죬µ«´ó´ó·½±ãÁË MiniGUI Ó¦ÓóÌÐòµÄÒÆÖ²¡¢µ÷ÊԵȹ¤×÷¡£Ä¿Ç°°üº¬Èý¸öͼÐÎÒýÇæ£¬SVGALib¡¢LibGGI ÒÔ¼°Ö±½Ó»ùÓÚ Linux FrameBuffer µÄ Native Engine£¬ÀûÓà LibGGI ʱ£¬¿ÉÔÚ X Window ÉÏÔËÐÐ MiniGUI Ó¦ÓóÌÐò£¬²¢¿É·Ç³£·½±ãµØ½øÐе÷ÊÔ¡£ÓëͼÐγéÏó²ãÏà¹ØµÄ»¹ÓÐÊäÈëʼþµÄ³éÏó²ã¡£MiniGUI ÏÖÔÚÒѾ±»Ö¤Ã÷Äܹ»ÔÚ»ùÓÚ ARM¡¢MIPS¡¢StrongARM ÒÔ¼° PowerPC µÈµÄǶÈëʽϵͳÉÏÁ÷³©ÔËÐС£
2£©¶à×ÖÌåºÍ¶à×Ö·û¼¯Ö§³Ö¡£Õⲿ·Öͨ¹ýÉ豸ÉÏÏÂÎÄ£¨DC£©µÄÂß¼×ÖÌ壨LOGFONT£©ÊµÏÖ£¬²»¹ÜÊÇ×ÖÌåÀàÐÍ»¹ÊÇ×Ö·û¼¯£¬¶¼¿ÉÒԷdz£·½±ãµØ½øÐÐÀ©³ä¡£Ó¦ÓóÌÐòÔÚÆô¶¯Ê±£¬¿ÉÇл»ÏµÍ³×Ö·û¼¯£¬±ÈÈç GB¡¢BIG5¡¢EUCKR¡¢UJIS¡£ÀûÓà DrawText µÈº¯Êýʱ£¬¿Éͨ¹ýÖ¸¶¨×ÖÌå¶ø»ñµÃÆäËû×Ö·û¼¯Ö§³Ö¡£¶ÔÓÚÒ»¸ö´°¿ÚÀ´Ëµ£¬Í¬Ê±ÏÔʾ²»Í¬ÓïÖÖµÄÎÄ×ÖÊÇ¿ÉÄܵġ£MiniGUI µÄÕâÖÖ×Ö·û¼¯Ö§³Ö²»Í¬ÓÚ´«Í³Í¨¹ý UNICODE ʵÏֵĶà×Ö·û¼¯Ö§³Ö£¬ÕâÖÖʵÏÖ¸ü¼ÓÊʺÏÓÚǶÈëʽϵͳ¡£
3£©Á½¸ö²»Í¬¼Ü¹¹µÄ°æ±¾¡£×î³õµÄ MiniGUI ÔËÐÐÔÚ PThread ¿âÖ®ÉÏ£¬Õâ¸ö°æ±¾ÊʺÏÓÚ¹¦Äܵ¥Ò»µÄǶÈëʽϵͳ£¬µ«´æÔÚϵͳ½¡×³ÐÔ²»¹»µÄȱµã¡£ÔÚ 0.9.98 °æ±¾ÖУ¬ÎÒÃÇÒýÈëÁË MiniGUI-Lite °æ±¾£¬Õâ¸ö°æ±¾ÔÚÌá¸ßϵͳ½¡×³ÐÔµÄͬʱ£¬Í¨¹ýһϵÁд´ÐÂ;¾¶£¬±ÜÃâÁË´«Í³ C/S ½á¹¹µÄÈõµã£¬Îª¹¦Äܸ´ÔÓµÄǶÈëʽϵͳÌṩÁËÒ»¸ö¸ßЧ¡¢Îȶ¨µÄ GUI ϵͳ¡£
ÔÚ MiniGUI 1.1.0 °æ±¾µÄ¿ª·¢ÖУ¬ÎÒÃDzÎÕÕ SDL ºÍ Allegro µÄͼÐβ¿·Ö£¬ÖØÐÂÉè¼ÆÁËͼÐγéÏó²ã£¬²¢ÔöÇ¿ÁËͼÐι¦ÄÜ£¬Í¬Ê±ÔöÇ¿ÁË MiniGUI-Lite °æ±¾µÄÄ³Ð©ÌØÐÔ¡£ÕâÐ©ÌØÐÔ°üÀ¨£º
1£©MiniGUI-Lite Ö§³Ö²ãµÄ¸ÅÄͬһ²ã¿ÉÈÝÄɶà¸öÄܹ»Í¬Ê±ÏÔʾµÄ¿Í»§³ÌÐò£¬²¢Æ½ÆÌÔÚÆÁÄ»ÉÏÏÔʾ¡£
2£©Ð嵀 GAL Äܹ»Ö§³ÖÓ²¼þ¼ÓËÙÄÜÁ¦£¬²¢Äܹ»³ä·ÖʹÓÃÏÔʾÄڴ棻РGAL Ö®ÉϵÄРGDI ½Ó¿ÚµÃµ½½øÒ»²½ÔöÇ¿¡£Ð嵀 GDI ½Ó¿Ú¿ÉÒÔÖ§³Ö Alpha »ìºÍ¡¢Í¸Ã÷λ¿é´«Êä¡¢¹âÕ¤²Ù×÷¡¢YUV¸²¸Ç¡¢Gamma УÕý£¬ÒÔ¼°¸ß¼¶Í¼Ðι¦ÄÜ£¨ÍÖÔ²¡¢¶à±ßÐΡ¢ÑùÌõÇúÏߣ©µÈµÈ¡£
MiniGUI а汾ÔÚͼÐη½ÃæµÄÔöÇ¿ºÍÌá¸ß£¬½«´ó´óÀ©Õ¹ËüµÄÓ¦ÓÃÁìÓò£¬Ï£ÍûÄܹ»¶ÔǶÈëʽ Linux ÉϵĶàýÌåÓ¦Óá¢ÓÎÏ·¿ª·¢Ìṩ֧³Ö¡£
×ݹÛǶÈëʽ Linux ϵͳÉϵĸ÷ÖÖͼÐÎϵͳ·½°¸£¬ÎÒÃÇ·¢ÏÖ£¬Ðí¶àͼÐÎϵͳ£¨Èç Qt/Embedded ºÍ MicoroWindows£©£¬Ö»×¢ÖØÊÖ³ÖÉ豸ÉϵÄÐèÇó£¬È´²»Ì«×¢ÖØÆäËûÓ¦ÓÃÁìÓòµÄÐèÇ󣬶øÆäËûÐí¶àÐèҪͼÐÎÖ§³ÖµÄǶÈëʽ Linux ϵͳȴÐèÒªÐí¶à¶ÀÌØµÄ¡¢¸ß¼¶µÄͼÐι¦ÄÜ£¬¶ø²»½ö½öÊÇͼÐÎÓû§½çÃæ¡£Îª´Ë£¬ÔÚ½ÓÏÂÀ´µÄ¿ª·¢ÖУ¬ÎÒÃÇ»¹½«ÔÚÈçÏÂÁìÓò¼ÌÐø¿ª·¢ MiniGUI£º
1£©ÌṩÔËÐÐÔÚ MiniGUI É쵀 JAVA ÐéÄâ»ú AWT ×é¼þµÄʵÏÖ¡£
2£©Ìṩ MiniGUI É쵀 OpenGL ʵÏÖ¡£
3£©ÌṩÀà QT ¿Ø¼þ¼¯µÄ C++ ·â×°¡£
3£©Ìṩ´°¿Ú/¿Ø¼þ·ç¸ñÖ÷ÌâÖ§³Ö¡£
4£©ÔÚ MiniGUI-Lite µ±ÖÐÔö¼Ó¶ÔʸÁ¿×ÖÌåµÄÖ§³Ö¡£
4 С½á
×ÛÉÏËùÊö£¬±ÊÕßÈÏΪÔÚǶÈëʽ Linux ͼÐÎÁìÓò£¬»¹ÓÐÐí¶àÓдý¿ª·¢ÈËÔ±×ÐϸÑо¿ºÍ½â¾öµÄÎÊÌâ¡£MiniGUI µÄеķ¢Õ¹£¬Ò²ÕýÔ´ÓÚ¶ÔÕâЩÐèÇóµÄÈÏʶ֮ÉÏ¡£ÎÒÃÇÒ²ÖÔÐÄÏ£ÍûÄܹ»Óиü¶àµÄ×ÔÓÉÈí¼þ¿ª·¢ÈËÔ±¼ÓÃË MiniGUI µÄ¿ª·¢£¬Ò»Í¬¿ª·¢ÐµÄǶÈëʽ Linux µÄͼÐÎϵͳ¡£
[[i] ±¾Ìû×îºóÓÉ zltjiangshi ÓÚ 2007-10-26 19:48 ±à¼ [/i]]
Ò³:
[1]