xxb 发表于 2007-8-14 09:42:00

应用MMX指令模拟带ColorKey的Blit操作

<font face="Tahoma" size="2">ColorKey是什么?你不会连这个都不知道吧!ColorKey就是一种或者一段区间内的颜色值。当硬件在进行Blit操作时,遇到ColorKey指定的颜色,就跳过该点的写像素操作,说白了就是透明色。DirectDraw提供了ColorKey这个属性,做起来很方便。但当我们自己用软件模拟时(因为自己做还可以添加好多其他的操作嘛)就麻烦了,但是我们有MMX。好了,开始入正题:</font>
        <p><font face="Tahoma" size="2">  我们应用比较指令PCMPEQ和逻辑指令PAND、PANDN和POR</font></p><p><font face="Tahoma" size="2">  设有两幅图P1和P2,要将P2画到P1上,ColorKey是蓝色(BLUE)。我们只从这两幅图里取几个点来看一看,</font></p><pre><font face="Tahoma" size="2">    ┌───┬───┬───┬───┐  ┌───┬───┬───┬───┐
   P1│ A1 │ A2 │ A3 │ A4 │ P2│ BLUEn│ B2 │ B3 │ BLUE    │
    └───┴───┴───┴───┘  └───┴───┴───┴───┘ </font></pre><p><font face="Tahoma" size="2">  先将P2与ColorKey比较,得到掩码mask</font></p><pre><font face="Tahoma" size="2">      ┌───┬───┬───┬───┐
   │ BLUE   │B2      │B3      │ BLUE   │
   └───┴───┴───┴───┘
   ┌───┬───┬───┬───┐
   │ BLUE   │ BLUE   │ BLUE    │ BLUE   │
   └───┴───┴───┴───┘
PCMPEQW ────────────────
   ┌───┬───┬───┬───┐
   │0xFFFF │0       │0      │0xFFFF │(mask)
   └───┴───┴───┴───┘ </font></pre><p><font face="Tahoma" size="2">  再将P1、P2分别与掩码mask作逻辑操作,不过要注意PANDN指令的源操作数和目的操作数的次序</font></p><pre><font face="Tahoma" size="2">┌───┬───┬───┬───┐   ┌───┬───┬───┬───┐
│    A1   │    A2    │    A3   │    A4    │   │BLUE│   B2   │   B3   │ BLUE   │(src)
└───┴───┴───┴───┘   └───┴───┴───┴───┘
┌───┬───┬───┬───┐   ┌───┬───┬───┬───┐
│0xFFFF │   0      │    0      │0xFFFF │   │0xFFFF │0       │0      │0xFFFF │(dest)
└───┴───┴───┴───┘   └───┴───┴───┴───┘
PANDN ──────────────── PANDN ───────────────────
┌───┬───┬───┬───┐   ┌───┬───┬───┬───┐
│A1   │0      │0       │A4      │   │0       │B2      │B3      │0       │
└───┴───┴───┴───┘   └───┴───┴───┴───┘</font></pre><p><font face="Tahoma" size="2">  最后,将结果作或操作</font></p><pre><font face="Tahoma" size="2">┌───┬───┬───┬───┐
│A1   │0      │0       │A4      │
└───┴───┴───┴───┘
┌───┬───┬───┬───┐
│0       │B2      │B3      │0       │
└───┴───┴───┴───┘
POR ────────────────
┌───┬───┬───┬───┐
│A1   │B2      │B3      │A4   │
└───┴───┴───┴───┘</font></pre><p><font face="Tahoma" size="2">  看看,是不是要得到的结果啊! 这样的好处是……(此处省去1000字),好了,下次再见了!<br/></font></p>
页: [1]
查看完整版本: 应用MMX指令模拟带ColorKey的Blit操作