关键字:双缓冲技术 页面切换技术 内存拷贝
1.双缓冲技术
在离屏缓冲中绘制图像,然后将离屏缓冲拷贝到显示表面的处理过程叫做双缓冲技术(Double Buffering)。
双缓冲技术可以避免图像的绘制过程被看到,并且可以平滑的显示动画。
需要额外分配一块同主DirectDraw表面具有相同储存的内存。每帧都是先在这块内存上进行绘制,然后拷贝到主显示表面。
1.内存拷贝
使用memcpy进行内存的拷贝。
当分辨率的宽度和内存跨距相同的时候,可以直接使用memcpy拷贝整块的内存;
否则,只能一行一行的拷贝。
示例代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21UCHAR *second_buff = new UCHAR[WINDOW_W*WINDOW_H];
///......../////
UCHAR *double_buffer = second_buff;
UCHAR *primary_buffer = (UCHAR *)ddsd.lpSurface;
int mempitch = ddsd.lPitch;
if(WINDOW_W==mempitch)
{
memcpy((void*)primary_buffer, (void*)double_buffer, WINDOW_W*WINDOW_H));
}
else
{
for (int i = 0; i < WINDOW_H; ++i)
{
memcpy((void*)primary_buffer, (void*)double_buffer, WINDOW_W);
double_buffer += WINDOW_W;
primary_buffer += mempitch;
}
}
2.页面切换技术
在使用了硬件加速的情况下,画出下一两帧备用的显示表面之后,直接操作硬件激活其他显示表面。
免除了内存块拷贝的开销。因为硬件寻址系统直接将视频光栅指向了不同的内存部分。