|
脏矩形系统有个问题就是,要不要让应用层去关心哪块区域要弄脏? 似乎,要做到完全隐藏,很难? 就是代价很高?
我想了一个方案:
首先,我的脏矩形是这样的,把窗口以64×32的尺寸划分成众多的block,然后把所有的绘制动作都添加到各自涉及到的block下,然后最后以block为单位,一一绘制.
比如,我要在100,100,200,200的地方绘制一个图像,那么首先找到所影响到的每个block,然后记录绘制信息,把整个图像的绘制分摊给每个block,
最后在一帧结束前,遍历所有的block,把图像绘制出来,然后就可以通过设定某某块block为脏,来达到脏矩形的功能.
然而,我期望我给应用层提供的绘制接口是这样的:
void Draw_Bmp(BYTE* pBmp, int width, int height, int x, int y);
然后应用层只管拿这个接口随心所欲的绘制他想绘制的图像就行了,而不用关心脏矩形问题。
以下是自动检测某个block是否被弄脏的方案:
1:为所有的block准备各自的一份链表,以记录该block下所有的绘制动作,然后再准备一份,用于备份上一帧的所有绘制动作,
2:绘制图像时,仅简单的记录绘制动作到各自的block下,
3:在一帧结束前,开始检测,即:对每个block下的所有绘制动作,和上一帧相比较,只要有一丝不相同(像素指针不同,或xy坐标不同,或宽高不同),就判定为该块脏了
大概就是这样..
欢迎查补缺漏.. |
|