|
各位网友:
我很做一个Linux console 小游戏,最初打算使用:SDL库,但发现它的图像的绘制速度很慢,
只有 20fps而 allegro 速度就很快,同样使用 rivafb 驱动,却有 50bps。
同样的游戏库,我并不相信 SDL做不到 50bps,此外我的好多代码已经写完了,不想改到 allegro ,不知是否还有什么办法?
SDL 测试源代码
SDL_INIT(SDL_INIT_VIDEO);
SDL_SetVideoMode(640,480,16,SDL_SWSURFACE);
...
SDL_Surface *pbmp = IMG_Load(argv[0]); // 这是一个 640x480x16bit图片
...
SDL_Surface * pScreen = SDL_GetVideoSurface();
cout<<time(NULL)<<endl;
for(int i=0;i<times;++i) // times = 1000
{
//如果只有此行将显示不同图像来
SDL_BlitSurface(pbmp,NULL,pScreen,NULL);
SDL_Flip(pScreen);
}
cout<<time(NULL)<<endl;
此时显示器工作于:37.5K/75hz
1086172036
1086172082
即 46s / 1000 即 21.7fps
ALLEGRO 测试源代码
allegro_init();
set_color_depth(16);
if(set_gfx_mode(GFX_FBCON,640,480,0,0)) {...}
PALETTE the_palette;
//同样是640x480x16bit 图像
BITMAP * the_image = load_bitmap(argv[1],the_palette);
set_palette(the_palette);
cout<<time(NULL)<<endl;
for(int i=0;i<1000;++i)
blit(the_image,screen,0,0,0,0,the_image->w,the_image->h);
cout<<time(NULL)<<endl;
显示器工作于:31.5k/60hz
1086172468
1086172487
相当于 19s/1000frame 即 52.6fps
我也在怀疑 allegro 的 blit 是不是仅仅向另外的进行提交
刷新请求,不能代表真正刷新时间?
而 SDL 真正是待刷新结束后才返回程序?
此外,我使用的是 rivafb 驱动。
网友:梦佳 |
|