人气 199

[行业观察] 应用MMX指令模拟带ColorKey的Blit操作 [复制链接]

九艺网 2017-3-10 17:00:51

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-3-29 09:04 , Processed in 0.117937 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.