在游戏开发中,有时候为了加快屏幕绘制速度,需要用到屏幕缓冲区,即双缓冲。
这里说的屏幕缓冲区其实本质是一块与屏幕大小相对应的内存空间,
240X320的手机屏幕,它的缓冲区大小是240x320x2(16位的 bmp图片显示)字节,就是150KB左右。
我们在绘制文字和图片时,其实就是往该内存里面写数据,也就是向内存里面绘制。最终,将内存中的数据一次性刷新到屏幕显示上。
下面,举例说明屏幕缓冲区的具体使用方法:
// 成功返回0, 失败返回 -1
int ScreenDoubleBuffer(void) { // screen buffer point
int* p_old_buf = NULL; int* p_new_buf = NULL; // screen width and height
int scr_w = 240; int scr_h = 320; // screen buffer size
int size = scr_w*scr_h*2; // 要显示字符串的宽高
int text_w = 0 int text_h = 0;
char* pcText = "Test Screen buffer!"; int ret = -1; int x,y; //--<1> get current screen buffer point
p_old_buf = getScreenBuffer(); if( NULL == p_old_buf ){ return ret; } //<2>create new screen buffer
p_new_buf = malloc(size); if( NULL == p_new_buf ){ return MR_FAILED; } //<3>set new screen buffer
setScreenBuffer( p_new_buf ); //<4>draw text to new screen buffer
clearScreen( 100, 100,100); // 得到要显示字符穿的宽高信息
textWidthHeight( pcText, FALSE, MR_FONT_MEDIUM, &text_w,&text_h); // 居中显示
x = ( scr_w - text_w )/2; y = ( scr_h - text_h )/2; // 是指将数据画到 new_buf 中了,并没有刷新界面显示
drawText( pcText, x, y, 255, 255, 255, FALSE, MR_FONT_MEDIUM); //<5> recover screen buffer
setScreenBuffer(p_old_buf); memcpy(p_old_buf,p_new_buf,size); refreshScreen(0,0,240,320); // 刷新屏幕显示
return 0; }
|
总结:
P_old_buf, 专门负责刷新屏幕显示
p_new_buf, 专门负责处理图片,文字的各种绘制操作, 然后将绘制的结果交给 p_old_buf 进行显示。。
阅读(1246) | 评论(0) | 转发(1) |