64K ɫģʽϵĿìËÙ Alpha»ìºÏËã·¨

(µÚ¶þ¸å)

ÔÚ 32/64k ɫģʽÏÂ,ÓÉÓÚÿ¸öµãµÄ RGB ÖµÊÇ·ÅÔÚÒ»¸ö×ÖÀï,ÒÔ 16bit ɫΪÀý, Ò»°ãÊÇ°´ RGB »ò BGR 565 ´æ·Å. ´«Í³µÄÈí¼þ Alpha »ìºÏËã·¨ÊÇÏȽ« RGB ·ÖÀë³öÀ´, ·Ö¿ªÔËËã,È»ºóÔٺϳÉ. ÕâÔì³ÉÁË 16bit ģʽÏ嵀 alpha »ìºÏ±È 24bit ģʽÏÂÂý µÄÏÖÏó,µ«Ê¹Óà 16bit color ÕæµÄÄÇôÂýÂð? ÎÒÈÏΪÈç¹û²»Ê¹Óà MMX Ö¸Áî, 15/16 µÄ±È 24bit µÄ¿ì. ÒòΪÎÒÃÇ¿ÉÒÔʹÓÃÒ»¸öСµÄ¼¼ÇÉÀ´Í¬Ê±¼ÆËã RGB. ¶ø 24 bit ÑÕÉ«,³ý·ÇʹÓà MMX Ö¸Áî,·ñÔò±ØÐë·Ö¿ª¼ÆËã R G B.

ÏÈÉè color ÊÇ RGB 565 µÄ, ÄÇô°´ 2 ½øÖÆ¿´, Õâ¸öÑÕÉ«×ÖÊÇÕâÑù·Ö²¼µÄ:
RRRRR GGGGGG BBBBB
5λ
6λ
5λ

¶ø 386 ÒÔÉÏ CPU ¶¼ÓÐ 32 λµÄ¼Ä´æÆ÷,ÎÒÃÇÖ»ÐèÒª½« 16bit RGB ±äÐÎΪ

00000 GGGGGG 00000 RRRRR 000000 BBBBB
5λ
6λ
5λ
5λ
6λ
5λ
´¢´æÔÚ 32 λ¼Ä´æÆ÷ÖÐ,(¾ÍÊÇ°ÑÂÌÉ«Ìáµ½ Ç° 16 λÀï) ÓÉÓÚ64k É«ÏÂÑÕÉ«Éî¶ÈÊÇ 32 ¼¶µÄ,ËùÒÔ alpha Ò²Ö»ÓÃ·Ö 32 ¼¶¾ÍÄÜÂú×ãÐèÒª. ÄÇô¶ÔÉÏÃæ±äÐιýµÄË«×Ö´¦Àí,¿ÉÒÔͬʱËã RGB ÁË. (Color1*Alpha+Color2*(32-Alpha))/32 Äܲ»Äܼò»¯Îª (Color1-Color2)*Alpha/32+Color2.? ÎÒ˼¿¼¹ýÕâ¸öÎÊÌâ,ÒÔΪ¼õ·¨½«²úÉú¸ºÊý,ÕâÑùÔÙËã³Ë·¨Ê±ÓпÉÄܳöÎÊÌâ, µ«ÊǾ­¹ý²âÊÔ,ÕâÑù¼ò»¯ËƺõÓÖûÓÐÎÊÌâ. ±Ï¾¹¼«Ð¡µÄÎó²îÊÇ¿ÉÒÔºöÂÔµÄ

×î½üÎÂÏ°ÁËһϻã±à,½ñÌìÓà Nasm дÁ˸ö C ¿Éµ÷ÓÃµÄ Alpha »ìºÏº¯Êý (32bit ģʽ, ÎÒÕë¶Ô Djgpp дµÄ) ²¢½øÐÐÁË Pentium ÓÅ»¯(Õë¶ÔË«Á÷Ë®Ïß,ÓдíÇëÖ¸³ö) ´ó¼Ò¿´¿´,ÓÐ bug,»¹ÄÜÓÅ»¯»òÓиü¿ìµÄ·½·¨ Ò²ÇëÒ»¶¨¸æËßÎÒ btw, ÉÏÃæÌáµ½µÄ»¯¼òûÓÐÌåÏÖµ½ÏÂÃæµÄ³ÌÐòÖÐ, ¶øÇÒ,ʹÓó˷¨±¾ÉíÊǸö´íÎó. Ö»ÊÇ¿´¿´°É ;-) Èç¹ûÄãÏëʵ¼ÊÔËÓÃ,Çë²Î¿¼ Allegro µÄ×ö·¨.

 

Èç¹û½¨Ò»ÕÅ 256K µÄ±íÀ´²é±íÔ¤´¦ÀíRGBÔõÑù? ¾­¹ý³¢ÊÔ,·¢ÏÖËٶȲ»½öûÓÐÌá¸ß,·´¶ø½µµÍÁË :-( ·ÖÎöµÄ½áÂÛÊÇ, 256K µÄ±íÌ«´óÁË,ÒÔÖÁÓÚ²»Äܷŵ½ Cache Àï,·´¶øûÓмÆËãµÄ·½·¨¿ì, ±Ï¾¹¼ÆËãµÄ»°,ÿÐеĴúÂ붼ºÜ¿ì,¶ø²»±ØºÍÄÚ´æ´ò½»µÀ. ÕæÕý¼ÓËٵķ½·¨ÊÇʲô?½è¼ø Allegro ÀïµÄ·½·¨,½¨Á¢ 32 ¸öº¯Êý·Ö±ð¼ÆËãÿ¸ö alpha ÖµµÄÇé¿ö. ÕâÑù,alpha Öµ±ä³É¹Ì¶¨µÄ,´Ó¶ø¿ÉÒÔʹÓà LEA, ADD, SUB, SAL, SAR À´Ìæ´ú »ºÂýµÄ MUL. ¾­¹ýʵ¼ù,ÎÒÖØдÁË Allegro ÀïµÄ cblend15.c ºÍ cblend16.c, ²âÊÔÊý¾ÝÈçÏÂ:
ʹÓà Allegro ×Ô¼ºµÄ test.exe,»úÆ÷ÅäÖÃΪ CyrixGx/120 S3/375 4M
Ô­ÓеĻìºÏº¯ÊýʹÓÃÐÂËã·¨µÄ»ìºÏº¯Êý ½«Blender º¯ÊýÖÃΪ¿Õ
1402 per sec1779 per sec2002 per sec
Hehe,ËÙ¶ÈÌá¸ßÁËÒ»±¶²»ÊÇ?Allegro Ä¿Ç°µÄ°æ±¾ÒѾ­Ê¹ÓÃÁËÎÒдµÄ blender º¯Êý,ÇëÈ¥Ô´ÂëÊÕ²ØÏÂÔØ