扩展图形函数3,alpha混合

时隔3年,忽然想起还有这么一个没填完的坑,已从事智能机游戏的开发,趁还没忘光之前,把曾经的闪光点记录下来

上次写到半透明混合的优化,由于半透明混合优化的效果较好,就想把这个扩展到更高精度的alpha混合方式


有了前两次优化的积淀,显然我是不会采取这种方式的

r = r1 * alpha / 256 + r2 * (256 - alpha) / 256
g = g1 * alpha / 256 + g2 * (256 - alpha) / 256
b = b1 * alpha / 256 + b2 * (256 - alpha) / 256


仍然是要减少循环内的运算量,直接用RGB内存位表示运算过程:

expand操作:

rrrr, rggg, gggb, bbbb 

==>>舍弃一位g值,取555精度

0000, 00r, rrrr, 0000, 0ggg, gg00, 000b, bbbb

此时实际上提供了32级精度alpha的可能性

((expand(color1) * alpha) >>1) + ((expand(color2) * (32 - alpha) >> 1)

再取出这个范围的rgb值作为目标点的色值,即可

00rr, rrr0, 0000, gggg, g000, 00bb, bbb0, 0000


这个优化把循环内的6次乘法(6次除以256实际上会被编译器优化为移位),减少到了两次

如果加上《扩展图形函数2》中循环的优化,初步估计要比未优化的版本的效率提高10倍,在功能机上多用几个alpha通道就卡成一坨屎的情况已经不复存在了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值