Pcgame °æ (¾«»ªÇø)

·¢ÐÅÈË: bell (»¨¿ªÊ±ÊÇÀäÀäÔ¹â), ÐÅÇø: Pcgame
±ê  Ìâ:  Allegro ÖÐÒëÎĵµ(ͼÐÎģʽ)
·¢ÐÅÕ¾: ×Ï ¶¡ Ïã (Tue May  4 14:16:36 1999), ×ªÐÅ


ͼÐÎģʽ

      set_color_depth
      set_gfx_mode
      gfx_capabilities
      scroll_screen
      request_scroll
      poll_scroll
      show_video_bitmap
      request_video_bitmap
      request_modex_scroll
      poll_modex_scroll
      split_modex_screen



void set_color_depth(int depth);
ÉèÖõãµÄ¸ñʽÀ´ÓÉËæºóµ÷Óàset_gfx_mode() ºÍ create_bitmap() Ê±Ê¹ÓÃ. ÓÐЧµÄÑÕÉ«Éî
¶ÈÓР8 (ȱʡֵ), 15, 16, 24, ºÍ 32 Î».


int set_gfx_mode(int card, int w, int h, int v_w, int v_h);
Çл»Í¼ÐÎģʽ. ²ÎÊý card ±ØÐëÊÇÒÔÏÂÖµÖеÄÒ»¸ö:


      GFX_TEXT          - ·µ»ØÎı¾Ä£Ê½
      GFX_AUTODETECT    - ÈàAllegro Ñ¡ÔñÒ»¸öºÏÊʵÄͼÐÎÇý¶¯³ÌÐò
      GFX_VGA           - Ñ¡Ôñ VGA Ä£Ê½ 13h (320x200 »ò 320x100)
      GFX_MODEX         - Ñ¡ÔñƽÃæŤתµÄ(plannar tweaked) VGA Ä£Ê½
      GFX_VESA1         - Ê¹ÓàVESA 1.x Çý¶¯³ÌÐò
      GFX_VESA2B        - Ê¹ÓàVBE 2.0 ·ÖҳģʽÇý¶¯³ÌÐò
      GFX_VESA2L        - Ê¹ÓàVBE 2.0 ÏßÐÎÒ³Ã滺³åÇý¶¯³ÌÐò
      GFX_VESA3         - Ê¹ÓàVBE 3.0 Çý¶¯³ÌÐò
      GFX_VBEAF         - Ê¹ÓàVBE/AF ¼ÓËÙÆ÷ API (δÍê³É)
      GFX_XTENDED       - Ê¹ÓöÏÁ´Ê½(unchained) 640x400 Ä£Ê½Çý¶¯³ÌÐò
      GFX_ATI           - Ê¹ÓàATI 18800/28800 Çý¶¯³ÌÐò
      GFX_MACH64        - Ê¹ÓàATI mach64 Çý¶¯³ÌÐò
      GFX_CIRRUS64      - Ê¹ÓàCirrus 64xx Çý¶¯³ÌÐò
      GFX_CIRRUS54      - Ê¹ÓàCirrus 54xx Çý¶¯³ÌÐò
      GFX_PARADISE      - Ê¹ÓàParadise Çý¶¯³ÌÐò
      GFX_S3            - Ê¹ÓàS3 Çý¶¯³ÌÐò
      GFX_TRIDENT       - Ê¹ÓàTrident Çý¶¯³ÌÐò
      GFX_ET3000        - Ê¹ÓàTseng ET3000 Çý¶¯³ÌÐò
      GFX_ET4000        - Ê¹ÓàTseng ET4000 Çý¶¯³ÌÐò
      GFX_ET6000        - Ê¹ÓàTseng ET6000 Çý¶¯³ÌÐò
      GFX_VIDEO7        - Ê¹ÓàVideo-7 Çý¶¯³ÌÐò

²ÎÊý w ºÍ h Ö¸¶¨ÁËÄãÏëÒªµÄÆÁÄ»·Ö±æÂÊ. ¿ÉÄܵÄģʽÓÐ:


      ±ê×¼ 256 É« VGA 13h Ä£Ê½, Ê¹ÓàGFX_VGA Çý¶¯³ÌÐò. ËüµÄÕý³£ ´óСΪ 320x200,
      Õâ¸öÔÚÈκΠVGA Ï¶¼Äܹ¤×÷, µ«ÊDz»Ö§³Ö´óµÄÐéÄâÆÁÄ»ºÍ Ó²¼þ¹öÆÁ. Allegro Ò²Ìá
      ¹©ÁˠһЩŤת(tweaked) ±äÐεĿɾíÆÁµÄģʽ, ´óСΪ 320x100 (200 µã¸ßµÄÐéÄâÁ
      Ä»), 160x120 (409 µã¸ßµÄÐéÄâÆÁÄ»), ºÍ 80x80 (819 µã¸ßµÄÐéÄâÆÁÄ»).


      Mode-X, Ê¹ÓàGFX_MODEX Çý¶¯³ÌÐò. Õâ¸öÄܹ»ÔÚÈκΠVGA ¿¨ÉϹ¤×÷, ÌṩÁËŤתµÄ
      (tweaked) ·Ö±æÂʺ͠256 ÖÖ²»Í¬µÄÑÕÉ«.

            Îȶ¨µÄ mode-X ·Ö±æÂÊ:

                  Õý·½ÐÎÍâ¹ÛµÄ±ÈÀý: 320x240

                  ³¤·½ÐÎÍâ¹ÛµÄ±ÈÀý: 256x224, 256x240, 320x200, 320x400, 320x480,
                  320x600, 360x200, 360x240, 360x360, 360x400, 360x480

            ÕâЩÎÒÔÚËùÓеÄÏÔ¿¨µÄÏÔʾÆ÷É϶¼²âÊÔͨ¹ýÁË.

            ²»Îȶ¨µÄ mode-X ·Ö±æÂÊ:

                  Õý·½ÐÎÍâ¹ÛµÄ±ÈÀý: 360x270, 376x282, 400x300

                  ³¤·½ÐÎÍâ¹ÛµÄ±ÈÀý: 256x200, 256x256, 320x350, 360x600, 376x308,
                  376x564, 400x150, 400x600

            ÕâЩֻÄÜÔÚ²¿·ÖÏÔʾÆ÷ÉϹ¤×÷. ËüÃÇ¿ÉÒÔÔÚÎÒµÄÀÏ »úÆ÷ÉϹ¤×÷, µ«ÊÇÔÚÎÒµÄÂ
            ÏÔʾÆ÷ÉϹ¤×÷µÄ²»ÄÇôºÃ. Èç¹ûÄã µ£ÐÄʹÓÃÕâЩģʽ»á¶ÔÄãµÄÏÔʾÆ÷¿ÉÄÜÔìÉ
            É˺¦, ÄÇô´ó¿É²»±Ø. µ±È»ÎÒ²»ÄÜÏòÕâ¸öÌṩÈκεĠµ£±£, Ò²ÐíÄãµÄÓ²¼þ»¹Ç
            ÉÕµôÁË, µ«ÊÇÎÒÏàÐÅÕâһϵÁРtweak Ä£Ê½²»»áÔì³ÉÈκÎΣÏÕ. Robert Schmit
            µÄ TWEAK ³ÌÐòÎı¾ÀïдµÀ:

            "һЩʱ¼äÒÔÇ°, ÏòÏÔ¿¨¼Ä´æÆ÷ÀïÖÃһЩ·Ç·¨»òÊDz»±»Ö§³ÖµÄÖµ »ò×éºÏ¿ÉÄܶÔ
            ÄãµÄÏÔʾÆ÷ºÍÄãµÄ½¡¿µ¶¼ÊÇÒ»ÖÖðÏÕ. ÎÒ *´ÓÀ´Ã»ÓÐ* ÉùÃ÷Èç¹ûÄãʹÓàTWEAK
            ²»»áÓÐʲô»µµÄÊÂÇé·¢Éú, È»¶øÎÒºÜÀÖÒâÏàÐŲ»»áÓÐ. ÎÒ´ÓÀ´Ã»ÓÐÌý˵ ÔÚÊÔÅ
            Ê¹ÓàTWEAK ÒÔÍâ»òÒ»°ãµÄ VGA Å¤×ª(tweaking) Ê±ÓÐʲô Î£ÏÕµÄÊÂÇé·¢Éú.

      ÒòΪ¸´ÔӵķÖҳλͼ×éÖ¯·½Ê½, ËùÓеĠmode-x »æͼº¯Êý¶¼±È 13h Ä£Ê½Âý, µ«ÊÇÕûé
      µÄ ÇøÓòÌî³äºÍƽÃæµ÷Õû·½Ê½µÄ´ÓÏÔ´æµÄÒ»²¿·Öµ½ÁíÒ»²¿·ÖµÄÒƶ¯ Äܹ»¸ü¿ìµã, ÓÈÆä
      ÊÇÔÚÀϵÄÓ²¼þÉÏ. Mode-X ÄÜÑ°Ö· VGA RAM µÄÕû¸ö 256k ¿Õ¼ä, Òò´ËÓ²¼þ¹öÆÁºÍ ¶à³
      Ãæת»»¾Í°ìµÄµ½ÁË, ËüÒ²¿ÉÒԷָÆÁÄ» À´ÊµÏÖÉϲ¿ÏÔʾ²¿·ÖµÄ¹ö¶¯,¶øϲ¿·ÖÈ´¾²
      Ö¹ÓÃÀ´ÏÔʾһ¸ö ×´Ì¬Ìõ.

      ±ê×¼ SVGA Ä£Ê½, 640x480, 800x600, ºÍ 1024x768. ÕâЩÄܹ» ÔÚÈκΠSVGA ¿¨ÉÏʹ
      ÓÃ: Èç¹û²»ÄÜÓÃ, ¾Í¸ãÌ× SciTech Display Doctor ¿´¿´Äܲ»ÄÜÐÞºÃ. ÑÕÉ«µÄÉî¶ÈÒÀ
      ÀµÓÚ ÄãµÄÓ²¼þ. ËùÓеĿ¨¶¼Ö§³Ö 15 ºÍ 16 Î»µÄÑÕÉ«, µ«ÊÇÎÒ½¨ÒéÄ㾡¿ÉÄܵÄÁ½¸ö¼
      È¥Ö§³Ö (Õâ²¢²»ÄÑ...) ÒòΪÓпÉÄÜÖ»ÓÐÒ»ÖÖÄÜÓÃ. Ò»Ð©¿¨¶Ô 24 ºÍ 32 Î»Õæ²ÊÉ«¶¼á
      ¹©ÁË, ÕâÑùÄã¾ÍÓР24 (½ÚÔ¼ÄÚ´æ) ºÍ 32 (¸ü¿ìһЩ) Á½ÖÖÑ¡Ôñ, µ«ÊÇÐí¶àÀÏ¿¨Ã»ÓÐ
      32 Î»Ä£Ê½¶ø Ò»Ð©Ð¿¨²»Ö§³Ö 24 Î» ·Ö±æÂÊ. Ê¹ÓàVESAINFO ²âÊÔ³ÌÐòÀ´¿´¿´ÄãµÄ
      VESA Çý¶¯³ÌÐòÌṩÁËÄÄЩģʽ.

      Ðí¶àÏÔ¿¨»¹Ö§³Ö 640x400, 1280x1024, ºÍ 1600x1200, µ«ÊÇÕâЩ ²»ÊÇÔÚÈκεط½¶¼
      ÄÜÓõÄ, ±ÈÈç S3 Ð¾Æ¬¾ÍûÓР640x400 Ä£Ê½. ÆäËüµÄÆæÒìµÄ·Ö±æÂÊÒ²ÓÐ, ±ÈÈç, Ò»©
      Tseng °å ¿ÉÒÔʵÏÖ 640x350, »¹ÓРAvance Logic ÓР512x512 Ä£Ê½.

      Xtended Ä£Ê½, ÓÉ PCGPE µÄ Mark Feldman ÃèÊö, ´óСÊÇ 640x400 (256 É«) Ê¹ÓÃ
      GFX_XTENDED Çý¶¯³ÌÐò. Õâ¸öʹÓàVESA À´Ñ¡Ôñ SVGA Ä£Ê½ (ËùÒÔËüÖ»ÄÜÔÚÖ§³Ö VEA
      640x400 ·Ö±æÂʵĿ¨ÉϹ¤×÷), È»ºóÏó mode-X ÄÇÑù½« VGA Ó²¼þ×ö¶ÏÁ´½Ó´¦Àí
      (unchain). ÕâʹµÃÕû¸öÆÁÄ»²»ÐèÒª Ò³Çл»Ñ°Ö·, µ«ÊÇÓ²¼þ ¹öÆÁºÍ¶àÒ³Ãæת»»°ì²»
      µ½. Õâ¸öÇý¶¯³ÌÐòÓÀÔ¶²»»á ±»×Ô¶¯¼ì²âµ½ (È¡¶ø´úÖ®µÄÊÇÕý³£µÄ VESA 640x400 Ä£
      Ê½), Òò´ËÈç¹ûÄãÏëʹÓÃËü¾Í±ØÐëÃ÷È·µÄÏò set_gfx_mode() ´«Èë²ÎÊý GFX_XTENDED

      Scitech Display Doctor ÌṩÁËÒ»¸ö¿É¹öÆÁµÄµÍ·Ö±æÂʲ»Í¬ÑÕÉ«Éî¶ÈµÄģʽ
      (320x200, 320x240, 320x400, 320x480, 360x200, 360x240, 360x400, ºÍ 360x480
      ¶¼¿ÉÒÔÔÚÎҵĠET4000 ÉÏ ÒÔ 8, 15, »ò 16 Î» ¹¤×÷). ÕâЩºÜ¿É°®, ÈÃÎÒÃDz»±Ø Ê¹
      Óø´ÔӵĠmode-X Æ½ÃæÉèÖþͿÉÒÔʵÏÖ¹ö¶¯ºÍ¶àÒ³ÃæÇл». ¿ÉϧµÄÊÇËüÃDz»ÊÇ»ù±¾Ä£
      Ê½, ËùÒÔÄãÐèÒª Display Doctor À´Ê¹ÓÃËüÃÇ.


      VBE/AF ÊÇ VBE 2.0 »ù±¾Ä£Ê½µÄ³¬¼¯, ËüÌṩÁËÒ»¸ö API À´ ÀûÓÃÓ²¼þ¼ÓËÙÌØÐÔ.
      VBE/AF ÏÖÔÚ Ö»ÄÜÓÉ FreeBE/AF ¹¤³Ì»ò SciTech Display Doctor °üµÄÒ»²¿·ÖÀ´Ö§
      ³Ö, µ«Êǵ±ÄãʹÓúÏÊʵÄÓ²¼þʱ ËûÃÇ¿ÉÒÔʹËÙ¶ÈÓÐÏ·¾çÐÔµÄÔö¼Ó. ¹ØÓÚ Ó²¼þ¼ÓËÙµÄ
      Ï¸½ÚÌÖÂÛÔÚ gfx_capabilities ±êÖ¾µÄÎı¾ÖÐ.

      VBE/AF Çý¶¯³ÌÐòÐèÒª½üÖ¸Õë(nearptr) ¿ØÖÆ´ò¿ª, Òò´ËÈκδíÎóµÄ Ö¸Õ붼¿ÉÄÜÈÃÄã
      µÄ»úÆ÷ÔÚʹÓÃÕâ¸öÇý¶¯³ÌÐòʱËÀµô. Õâ¾ÍÊÇ˵×îºÃÊÇÔÚµ÷ÊÔÄãµÄ³ÌÐòʱʹÓàVESA, ±
      ÄãµÄ´úÂ빤×÷Õý³£ÁËÔÙÇл»µ½ VBE/AF.

²ÎÊý v_w ºÍ v_h Ö¸¶¨ÁË×îСÐéÄâÆÁÄ»µÄ´óС, ÒòΪ ÄãÐèÒªÒ»¸ö´óµÄÐéÄâÆÁÄ»À´×öÓ²¼þ¹ö
ÆÁ»ò¶àÒ³ÃæÇл». Èç¹ûÄã²»ÔÚºõÐéÄâÆÁÄ»µÄ´óС¾ÍÓ¦¸Ã½«ËüÃÇÉèΪÁã. ÐéÄâÆÁÄ»»ØÔì³ÉÐí¶à
»ìÂÒ, µ«ÊÇËüÃÇÕæµÄ ºÜ¼òµ¥. ÁôÉñ: ¼¼Êõ˵Ã÷À´ÁË, ËùÒÔÄã ¿ÉÒÔÌø¹ýÕâÒ»¶ÎµÄʣϲ¿·Ö
:-) ½«ÏÔʾÄÚ´æÏëÏó³É Ò»ÕžØÐεÄÖ½, Í¨¹ýÒ»¸öÉÏÃæÓÐÒ»¸öС¶´(ÄãµÄÏÔʾÆ÷)µÄ¿¨Æ¬À´¿´
Ëü. ¼ÈȻֽ±È¶´Òª´ó, ÄãÔÚÈκÎʱºò¾ÍÖ»ÄÜ¿´¼ûÖ½µÄÒ»²¿·Ö, µ«ÊÇÒƶ¯¿¨Æ¬ Äã¾ÍÄܸı俴
µ½µÄ¾°Ïó. ÄãÄܽ«¶´·ÅÔÚÒ»¸öµØµã¶øºöÂÔÏÔʾÄÚ´æÆäËü¿´²»¼ûµÄ²¿·Ö, µ«ÊÇÄã¿ÉÒÔÀûÓÃÒƶ¯
ÆÁÄ»´°¿ÚÀ´ÊµÏÖÐí¶àÓÐÓõÄЧ¹û, »òÕß¿ÉÒÔÔÚÏÔ´æÒþ²ØµÄ²¿·ÖÏÈ»­ºÃͼƬȻºó Çл»¹ýÈ¥À´
ÏÔʾËüÃÇ.

¾Ù¸öÀý×Ó, ÄãÑ¡ÔñÁËÒ»¸öÐéÄâÆÁĻΪ 1024x1024 µÄ 640x480 Ä£Ê½, È»ºó¿ÉÒÔÔÚÕâ¸ö´óÇøÓò
ÉÏÒƶ¯¿ÉÊӵIJ¿·Ö. ³õʼ»¯Ê±, ¿ÉÊÓ²¿·ÖÔÚ ÏÔ´æµÄ×óÉϽÇ, Õâ¸öÉèÖÿ´ÆðÀ´ÏóÕâÑù:


      (0,0)------------(640,0)----(1024,0)
        |                  |           |
        |   ¿ÉÊÓÆÁÄ»²¿·Ö   |           |
        |                  |           |
      (0,480)----------(640,480)       |
        |                              |
        |        ÏÔ´æµÄÆäËü²¿·Ö        |
        |                              |
      (0,1024)--------------------(1024,1024)

ÕâÊÇʲô? ÄãÕýÔÚÓÃÏà³ÆµÄ×ÖÌåÀ´ÏÔʾ? ºÇºÇ.

µ±Äãµ÷Óàset_gfx_mode() Ê±, v_w ºÍ v_h ²ÎÊý ÌṩÄãµÄ³ÌÐòÄܹ»½ÓÊܵÄ×îСÐéÄâÆÁÄ»µÄ
´óС. ´óСµÄ·¶Î§Í¨³£ºÜÊÜÏÞÖÆ, Allegro Ò»°ã ×îÖջᴴ½¨Ò»¸ö±ÈÄãÒªÇóÒª´óµÄ¶àµÄÐéÄâ
ÆÁÄ». ÔÚ SVGA ¿¨ÉÏÒ»Õ×µÄÏÔ´æÄܹ»ÈÃÄã´´½¨ 1024x1024 µÄÐéÄâÆÁÄ» (256 É«) »òÊÇ
1024x512 (15 »ò 16 bpp), ¶ø 512k ÏÔ´æÄã¿ÉÒԵõ½ 1024x512 (256 É«). ÆäËüµÄ´óС¿É
ÄÜ»ò²»¿ÉÄܵõ½: ²»Òª¼Ù¶¨ËüÃÇÄܹ¤×÷. ÔÚ mode-X ÏÂÐéÄâÆÁÄ»µÄ ¿í¶È¿ÉÒÔÊÇÎïÀíÆÁÄ»¿í
¶ÈµÄ 8X ±¶»òÊÇÓëÖ®Ïàͬ, ÓÚÊÇÄ£Äâ¸ß¶È¾Í±»ÏàÓ¦µÄÉ趨ÁË ( VGA ÓР256K ÏÔ´æ, ËùÒÔÐé
Äâ¸ß¶È½«ÊÇ 256*1024/ÐéÄâ¿í¶È).

ÔÚÄãÑ¡ÔñÒ»¸öͼÐÎģʽÒÔºó, ÎïÀíµÄºÍÐéÄâµÄÆÁÄ»´óС ¿ÉÒÔÓúê SCREEN_W(),
SCREEN_H(), VIRTUAL_W(), ºÍ VIRTUAL_H() À´²âµÃ.

Èç¹û Allegro ²»ÄÜÑ¡ÔñÒ»¸öºÏÊʵÄģʽ, set_gfx_mode() ½«·µ»ØÒ»¸ö¸ºÊý²¢ÇÒ½«ÎÊÌâµÄÃè
Êö´¢´æÔÚ allegro_error Àï. ·ñÔòËü·µ»ØÁã.

extern int gfx_capabilities;
ÃèÊöµ±Ç°Í¼Ðο¨Çý¶¯³ÌÐòºÍÏÔʾӲ¼þµÄÄÜÁ¦µÄλÓò. Õâ¿ÉÒÔ°üº¬ÏÂÃæ±êÖ¾µÄÈκÎ×éºÏ:

GFX_CAN_SCROLL:
±íʾ scroll_screen() º¯Êý¿ÉÒÔ±»Õâ¸öÇý¶¯³ÌÐòʹÓÃ.


GFX_CAN_TRIPLE_BUFFER:
±íʾ request_scroll() ºÍ poll_scroll() º¯Êý¿ÉÒÔ ±»Õâ¸öÇý¶¯³ÌÐòʹÓÃ. ×÷Ϊһ¸öÌØÊâ
µÄÌõ¼þ, mode-X Çý¶¯³ÌÐò½ö½ö ÔÚ»ØɨģÄâÆ÷¼ÓÔغó²ÅÖ§³ÖÈý»º³å, Òò´ËÔÚ mode-X µÄ·Ö±æ
ÂÊÏ Äã±ØÐëÔÚ×öÈκÎÈý»º³å²Ù×÷Ç°µ÷Óàtimer_simulate_retrace().


GFX_HW_CURSOR:
±íʾӲ¼þÊó±êÔÚʹÓÃÖÐ. µ±Õâ¸ö±êÖ¾ÉèÖÃÁË, ¿ÉÒÔ²»ÏÈÒþ²ØÊó±êÖ¸Õë¶ø°²È«µÄÏòÆÁÄ»ÉÏ×÷
ͼ. ×¢Òâ²»ÊÇËùÓеÄÖ¸ÕëͼÐα»Ó²¼þÖ§³Ö: ÓÈÆäÊÇ VBE/AF Ö»Ö§³Ö 2 É« 32x32 ´óСµÄͼ
Ƭ, ÆäÖеڶþ¸öÑÕÉ«ÕýºÃÊǵÚÒ»¸öµÄÄæÉ«. Õâ¾ÍÊÇ˵, Allegro ¿ÉÄÜÐèÒªÔÚÄãµÄ³ÌÐòÖ´ÐÐʱ
ÒÀ¾Ý Êó±êÖ¸ÕëÇл»Ó²¼þºÍÈí¼þÊó±ê, Òò´ËÄã²»Òª ¼Ù¶¨Õâ¸ö±êÖ¾»á³ÖÐø±£³ÖºÜ³¤µÄʱ¼ä. Ëü
½ö½ö¸æËßÄ㵱ǰʱ¼äÓ²¼þÊó±êÊÇ·ñÕýÔÚʹÓÃ, ÎÞÂÛºÎʱÄãÒþ²Ø/ÖØÏÔÊó±êÖ¸ÕëËü¶¼¿ÉÄܸıä.


GFX_HW_HLINE:
±íʾÆÕͨµÄ hline() ²»Í¸Ã÷°æ±¾ÕýÔڠʹÓÃÓ²¼þ¼ÓËÙ. Õâ²»½ö½öÌá¸ß hline() ±¾ÉíµÄÖ´ÐÐ
ЧÂÊ, »¹ÓÐÐí¶àÆäËüʹÓàËüµÄº¯Êý, ±ÈÈç circlefill(), triangle(), ºÍ floodfill().

GFX_HW_HLINE_XOR:
±íʾ hline()µÄ XOR °æ±¾,ºÍÆäËüµ÷ÓÃËüµÄº¯Êý, Ê¹ÓÃ×ÅÓ²¼þ¼ÓËÙ.


GFX_HW_HLINE_SOLID_PATTERN:
±íʾ hline() º¯ÊýµÄʵÐÄ(solid) ºÍÕÚÑÚ(mask) ·½Ê½,¼°Æä ÆäËüʹÓÃËüµÄº¯Êý, ÕýÔÚʹÓÃ
Ó²¼þ¼ÓËÙ (¼ûÏÂÃæµÄ×¢½â).

GFX_HW_HLINE_COPY_PATTERN:
±íʾ hline() º¯ÊýµÄ¸´ÖÆ·½Ê½, ¼°ÆäËü Ê¹ÓÃËüµÄº¯Êý, ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ (¼ûÏÂÃæµÄ×¢
½â).

GFX_HW_FILL:
±íʾ rectfill() º¯Êý, clear() Àý³Ì, clear_to_color() µÄ²»Í¸Ã÷°æ±¾, ÕýÔÚʹÓÃÓ²¼þ
¼ÓËÙ

GFX_HW_FILL_XOR:
±íʾ rectfill() º¯ÊýµÄ XOR °æ±¾, ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ

GFX_HW_FILL_SOLID_PATTERN:
±íʾ rectfill() º¯ÊýµÄʵÐÄ(solid) ºÍÕÚÑÚ(mask) »¨ÎÆ·½Ê½, ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ (¼ûÏÂ
ÃæµÄ×¢½â).

GFX_HW_FILL_COPY_PATTERN:
±íʾ rectfill() º¯ÊýµÄ¸´ÖÆ·½Ê½, ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ (¼ûÏÂÃæµÄ×¢½â).

GFX_HW_LINE:
±íʾ line() ºÍ vline() º¯ÊýµÄ²»Í¸Ã÷°æ±¾, ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ

GFX_HW_LINE_XOR:
±íʾ line() ºÍ vline() º¯ÊýµÄ XOR °æ±¾, ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ

GFX_HW_TRIANGLE:
±íʾ triangle() º¯ÊýµÄ²»Í¸Ã÷°æ±¾, ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ

GFX_HW_TEXTOUT_FIXED:
±íʾµ¥É«×Ö·ûÀ©´ó ( 8x8 ºÍ 8x16 ¶¨¿í×ÖÌå¸ñʽ) ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ.

GFX_HW_TRIANGLE_XOR:
±íʾ triangle() º¯ÊýµÄ XOR °æ±¾ ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ.

GFX_HW_VRAM_BLIT:
±íʾ´ÓÆÁÄ»µÄÒ»²¿·Öµ½ÁíÒ»²¿·ÖµÄ blit ²Ù×÷ ÕýÔÚʹÓÃÓ²¼þ¼ÓËÙ. Èç¹ûÕâ¸ö±êÖ¾±»ÉèÖÃ,
ÏÔ´æÀïµÄ blit ²Ù×÷½«ÒÔ×î¿ìµÄ¿ÉÄÜ·½Ê½À´ ÏÔʾͼƬ, Òò´Ë½«×î³£ÓõÄͼÐδ¢´æÔÚ ÆÁÄ»ÒÔ
ÍâµÄÏÔ´æÀïÊǺÜÖµµÃµÄ.


GFX_HW_VRAM_BLIT_MASKED:
±íʾ masked_blit() Àý³ÌÄܹ»ÔÚÏÔ´æÀ︴ÖÆʱ±»Ó²¼þ¼ÓËÙ, ²¢ÇÒ draw_sprite() ½«ÔÚԴͼ
ÊÇÆÁÄ»»òÏÔ´æµÄ×ÓλͼʱʹÓàӲ¼þ¼ÓËÙ. Èç¹ûÕâ¸ö±êÖ¾±»ÉèÖÃ, ÏÔ´æÀïµÄ blit ²Ù×÷½«ÒÔ
×î¿ìµÄ¿ÉÄÜ·½Ê½À´ ÏÔʾͼƬ, Òò´Ë½«×î³£Óõľ«Áé´¢´æÔÚ ÆÁÄ»ÒÔÍâµÄÏÔ´æÀïÊǺÜÖµµÃµÄ.


¾¯¸æ: Èç¹ûÕâ¸ö±ê־ûÓб»ÉèÖÃ, masked_blit() ºÍ draw_sprite() ÔÚʹÓÃÏÔ´æԴλͼʱ
½«²»ÄÜÕý³£µÄ¹¤×÷! Èç¹ûËûÃDZ»Ó²¼þÖ§³Ö, Äã±ØÐë½ö½ö³¢ÊÔʹÓÃÕâЩº¯ÊýÀ´ÔÚ ÏÔ´æÀ︴ÖÆ.

GFX_HW_MEM_BLIT:
±íʾÄÚ´æλͼÏòÆÁÄ»µÄ blit ²Ù×÷ÕýÔÚ±»Ó²¼þ¼ÓËÙ.


GFX_HW_MEM_BLIT_MASKED:
±íʾ masked_blit() ºÍ draw_sprite() º¯ÊýÔڠԴͼÊÇÄÚ´æλͼ¶øÄ¿±êλͼÊÇÎïÀíÆÁĻʱ
±» Ó²¼þ¼ÓËÙ.

×¢ÊÍ: ¼´Ê¹ÊÇÔÚ±íʾ¿ÉÄܵÄÐÅϢ˵»æͼ¿é ±»Ó²¼þ¼ÓËÙµÄʱºò, Ò²²»ÊÇËùÓеĴóС¶¼¿ÉÒÔ.
VBE/AF ½ö½öÖ§³Ö 8x8 ÒÔÄÚµÄͼ°¸, Òò´Ë Allegro ÔÚÄãʹÓõÄͼ°¸´óÓÚÕâ¸öµÄʱºò¾ÍʹÓÃ
×î³õµÄ·Ç¼ÓËÙ°æ.


×¢ÊÍ2: ÕâЩӲ¼þ¼ÓËÙÌØÐÔ½ö½öÔÚÄã Ö±½ÓÏòÆÁĻλͼ, ÏÔ´æλͼ, »òËüÃǵÄ×Óλͼ×÷»­µÄʱ
ºò²Å·¢ÉúЧ¹û. Ó²¼þ¼ÓËÙÔÚÒ³Çл» »ò 3 »º³åÉèÖõÄʱºò×îÓÐÓÃ, ¶ø¶ÔÓÚ ¾­µäµÄ "»­ÔÚÄÚ
´æλͼÉÏ, È»ºó blit µ½ ÆÁÄ»ÉÏ" µÄϵͳºÁÎÞЧ¹û.


int scroll_screen(int x, int y);
³¢ÊÔÓ²¼þ¹ö¶¯ÆÁÄ»À´ÏÔʾÐéÄâÆÁÄ»µÄ²»Í¬²¿·Ö (³õʼ»¯Ê±Î»ÖÃÔÚ 0,0, ¾ÍÊÇ×óÉϽÇ). ³É¹¦
Ôò·µ»ØÁã: Èç¹ûͼÐÎÇý¶¯³ÌÐò ²»ÄÜ×öÓ²¼þ¹öÆÁ»òÕßÐéÄâÆÁÄ»²»¹»´óÔòËü¿ÉÄܳö´í. Äã¿ÉÒÔ
ʹÓÃÕâ¸öÀ´ÔÚÒ»¸ö´óµÄÐéÄâ¿Õ¼äÖÐÒƶ¯ÆÁÄ»ÏÔʾÇø¼ä, »òÕßÔÚÐéÄâÆÁÄ»µÄÁ½¸ö²»ÖصþµÄ²¿·Ö
¼ä½øÐÐÒ³Çл». ×¢ÒâÔÚÆÁĻλͼÉϳ¬³öԭʼ×ø±ê×÷ͼʱ, Äã±ØÐë¸Ä±ä¼ô²Ã¾ØÐÎ: ¼ûºó.


Mode-X ¹öÆÁÊÇ¿ÉÐŵÄ,Ëü¿ÉÒÔÔÚÈκο¨ÉϹ¤×÷. ¿Éϧ ´ó¶à VESA ÊµÏÖ³ÌÐòÖ»ÄÜ´¦Àí Ë®Æ½ÉÏ
µÄ 4 µãµÝÔö¹ö¶¯, ËùÒÔÔÚ SVGA Ä£Ê½ÏÂƽ»¬µÄˮƽ¹ö¶¯ ÊDz»¿ÉÄܵÄ. ÕâÕæÊDzÑÀ¢, µ«ÊÇÎÒ
ûÓа취½â¾öËü. ´ó¶àÊý VESA ÊµÏÖ³ÌÐòËƺõÔÚÕæ²ÊģʽϵĹö¶¯¶¼Óзdz£¶àµÄ bug, Òò´Ë
ÎÒ½¨ÒéÄã²»Òª Ö¸ÍûÕâ¸öÀý³ÌÀ´ÕýÈ·µÄ½øÐÐÕæ²ÊģʽϵĹöÆÁ,³ý·ÇÄãÈ·ÈÏ SciTech Display
Doctor ÒѾ­¼ÓÔØÁË.

Allegro ½«ÔÚ¹ö¶¯ÆÁĻʱ½øÐбØÒªµÄ´¹Ö±»Øɨͬ²½, Òò´ËÄã²»±ØÔÚÇ°Ãæµ÷Óàvsync(). ÕâÒâ
ζ×Å scroll_screen() ºÍ vsync() Ôì³ÉµÄÑÓʱʱ¼äÏàͬ.

int request_scroll(int x, int y);
Õâ¸öº¯ÊýÓÃÓÚÈý»º³å. ËüÇëÇóÓ²¼þ¹öÆÁµ½ Ö¸¶¨Î»ÖÃ, µ«ÊÇÂíÉÏ·µ»Ø¶ø²»ÊǵȴýÒ»´Î»Øɨ.
Õâ¸ö¹ö¶¯½«ÔÚÏ´δ¹Ö±»ØɨÖб»ÊµÏÖ, µ«ÊÇÄã¿ÉÒÔÔÚÕâ¶Îʱ¼äÖ´ÐÐÆäËüµÄ´úÂë²¢ Ê¹ÓÃ
poll_scroll() Àý³ÌÀ´¼ì²âºÎʱ flip(Ò³Çл») Íê³ÉÁË (¼û examples/ex20.c). Èý»º³åÖ»
Äܹ¤×÷ÔÚÊʵ±µÄÓ²¼þÉÏ: Èç¹ûʱÖÓÄ£ÄâÆ÷¼¤»î,Ëü¿ÉÒÔ¹¤×÷ÔÚÈκΠmode-X ·Ö±æÂÊÏ (µ«ÊÇ
²»ÄÜÕýÈ·µÄÔÚ win95 Ï¹¤×÷), ÔöÇ¿°æ ¿ÉÒÔÓÉ VBE 3.0 ºÍ VBE/AF Çý¶¯³ÌÐòÖ§³ÖÓÐÏ޵ļ¸
ÖÖ ¸ßµµÍ¼Ðο¨. Äã¿ÉÒÔ¼ì²é gfx_capabilities ±êÖ¾µÄ GFX_CAN_TRIPLE_BUFFER Î» À´¿´
¿´ÔÚµ±Ç°µÄÇý¶¯³ÌÐòÏÂÄÜ·ñ¹¤×÷.

int poll_scroll();
Õâ¸öº¯ÊýÔÚ 3 »º³åʱʹÓÃ. Ëü¼ì²éÇ°ÃæÓÉ request_scroll() Àý³Ì³õʼ»¯µÄÒ»¸öÓ²¼þ¾íÆÁ
µÄ״̬, Èç¹û»¹Ôڵȴý·¢Éú, Ôò·µ»Ø·ÇÁã, Èç¹ûÒѾ­·¢ÉúÔò·µ»ØÁã.


int show_video_bitmap(BITMAP *bitmap);
³¢ÊÔÒ³Çл»Ó²¼þÆÁÄ»À´ÏÔʾָ¶¨µÄÏÔ´æλͼ¶ÔÏó, Õâ¸öλͼ±ØÐëºÍÎïÀíÆÁÄ»ÓÐÏàͬµÄ´óС,
²¢ÇÒÊÇÓɵ÷Óàcreate_video_bitmap() º¯ÊýµÃµ½µÄ. ³É¹¦Ôò·µ»ØÁã. Èç¹ûͼÐο¨ÐèÒª, Õâ
¸öº¯Êý½«µÈ´ýÒ»´Î´¹Ö±»Øɨ, Òò´ËÄã²»±Ø×Ô¼ºµ÷Óàvsync().


int request_video_bitmap(BITMAP *bitmap);
Õâ¸öº¯ÊýΪʵÏÖ 3 »º³åÀ´Ê¹ÓÃ. ËüÇëÇóÒ»´ÎÒ³Çл» À´ÏÔʾָ¶¨µÄÏÔ´æλͼ¶ÔÏó, µ«ÊÇÁ¢¼´
·µ»Ø¶ø²»ÊÇ µÈ´ý»Øɨ. »Øɨ½«ÔÚÏ´Π´¹Ö±»ØɨÆڼ䷢Éú, µ«ÊÇÄã¿ÉÒÔÔÚÕâ¶Îʱ¼äÔËÐÐÆäËû
µÄ´úÂë, Ê¹Óàpoll_scroll() Àý³ÌÀ´¼ì²âºÎʱÇл»ÕæÕý ·¢Éú. 3 »º³å½ö½öÖ»ÄÜÔÚºÏÊʵÄÓ²
¼þÉÏʵÏÖ: ¼û request_scroll() µÄ×¢½â.

int request_modex_scroll(int x, int y);
int poll_modex_scroll();
×÷·ÏµÄ request_scroll() ºÍ poll_scroll() °æ±¾, ÎªÏòÒÔÇ°¼æÈݶø±£Áô.


void split_modex_screen(int line);
Õâ¸öº¯ÊýÖ»ÔÚ mode-X ÏÂÓÐЧ. Ëü½«ÔÚÖ¸¶¨Ðн« VGA µÄÏÔʾ ·Ö³ÉÁ½¸ö²¿·Ö. ÆÁÄ»ÉÏÃæµÄ²¿
·Ö¿ÉÒÔÀûÓàscroll_screen() º¯Êý±»¹ö¶¯µ½ ÏÔ´æµÄÈÎÒⲿ·Ö, ¶øÖ¸¶¨ÐÐÏÂÃæµÄ²¿·Ö½«±»±£
Áô²¢ÇÒ´Ó ÆÁĻλͼµÄ×ø±ê (0,0) ¿ªÊ¼ÏÔʾ. ÔÚ·Ö¸îÆÁÄ» ÒÔºóÄãÒ»°ãÏë¹ö¶¯ËùÒÔÉÏÃæµÄ²¿
·ÖÊÇ´Ó½ÓÏÂÀ´µÄÏԴ濪ʼÏòÏÔ´æºóÃæÑÓÉì, È»ºó´´½¨Á½¸ö×Óλͼ À´¿ØÖÆÕâÁ½¸ö²¿·Ö (¼û
examples/ex19.c ¿´¿´ ÕâЩÊÇÈçºÎÔË×÷µÄÑÝʾ). ¹Øµô·Ö¸îÓàsplit_modex_screen(0).


--
¡ù À´Ô´:£®×Ï ¶¡ Ïã bbs.hit.edu.cn£®[FROM: jxjd.hit.edu.cn]
[°Ù±¦Ïä] [·µ»ØÊ×Ò³] [Éϼ¶Ä¿Â¼] [¸ùĿ¼] [·µ»Ø¶¥²¿] [Ë¢ÐÂ] [·µ»Ø]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
Ò³ÃæÖ´ÐÐʱ¼ä£º207.738ºÁÃë