我们知道在游戏中做Alpha混合和Fade-in/Fade-out等颜色特效是十分消耗CPU的.对于GBA这样的16.78MHz的CPU就更显得费劲.不过还好,GBA提供了硬件上对这两种颜色特效(Color Special Effects)的支持.所以你就不用担心这些问题了.
1.Alpha混合
首先你应该知道什么是Alpha混合.其实就是透明处理.
其处理的算法就是
R=R1*alpha+R2*(1-alpha);
G=G1*alpha+G2*(1-alpha);
B=B1*alpha+B2*(1-alpha);
其中alpha是个小于等于1的小数.而R,G,B是混合后的点的RGB值,R1,G1,B1和R2,G2,B2分别是两个要混合的点的RGB值.
由于一张图片有好几千到好几百万个点,而每个点又包含三个浮点运算,所以这中Alpha混合的计算量是很巨大的,计算速度就是个很严重的问题.
GBA中有对Alpha混合的硬件支持,你只需对相关的寄存器设置好参数,然后它就会自己来帮你计算,由于是硬件上的计算,所以速度问题就解决了.
下面我们就直接看看如何设置Alpha混合的寄存器.
在AgbLib中定义了下面两个寄存器
#define REG_BLDCNT (REG_BASE + 0x50) // Blend Mode Control
#define REG_BLDALPHA (REG_BASE + 0x52) // Semi-transparent Parameter
其中涉及到REG_BASE,它是寄存的开始地址,你可以看看它的总线地址
#define REG_BASE 0x04000000 // Registers
REG_BLDCNT是设置颜色特效(Color Special Effects)参数的寄存器.它不仅控制Alpha混合,还控制后面讲的Fade-in/Fade-out的设置.
在AgbLib中的官方文档中是这么说的这个寄存器的
The types of color special effects and the target pixels, are determined by the BLDMOD register.

可以看出,REG_BLDCNT的0-5位是设置第一个混合目标(1st Target Pixel)的范围,可