LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: ideawu

简单的SDL程序,速度却非常慢

[复制链接]
发表于 2006-12-26 11:55:30 | 显示全部楼层

关注

我也遇到同样的问题,高手帮帮忙
回复 支持 反对

使用道具 举报

发表于 2006-12-27 00:36:36 | 显示全部楼层
是不是SDL_Flip(screen)太频繁了,SDL_MOUSEMOTION事件来的多
回复 支持 反对

使用道具 举报

发表于 2006-12-27 11:38:19 | 显示全部楼层
你可以用SDL的函数得到你的硬件信息。
#include "SDL.h"

SDL_VideoInfo *SDL_GetVideoInfo (void);

Structure Definition

typedef struct{
  Uint32 hw_available:1;
  Uint32 wm_available:1;
  Uint32 blit_hw:1;
  Uint32 blit_hw_CC:1;
  Uint32 blit_hw_A:1;
  Uint32 blit_sw:1;
  Uint32 blit_sw_CC:1;
  Uint32 blit_sw_A:1;
  Uint32 blit_fill;
  Uint32 video_mem;
  SDL_PixelFormat *vfmt;
} SDL_VideoInfo;

Structure Data
hw_available         Is it possible to create hardware surfaces?
wm_available         Is there a window manager available
blit_hw         Are hardware to hardware blits accelerated?
blit_hw_CC         Are hardware to hardware colorkey blits accelerated?
blit_hw_A         Are hardware to hardware alpha blits accelerated?
blit_sw         Are software to hardware blits accelerated?
blit_sw_CC         Are software to hardware colorkey blits accelerated?
blit_sw_A         Are software to hardware alpha blits accelerated?
blit_fill         Are color fills accelerated?
video_mem         Total amount of video memory in Kilobytes
vfmt         Pixel format of the video device

另外,即使用了官方的驱动,一样做不到HWSUFACE。
这个我也很奇怪。
另外,UpdateRect一定会好一些。你的程序可以在稍微减小FPS,也就是延长interval 例如
30FPS=1000/33ms,interval=33会好很多吧
回复 支持 反对

使用道具 举报

发表于 2006-12-27 11:49:26 | 显示全部楼层
#include "SDL/SDL.h"
int main()
{
        SDL_Surface *screen;
        SDL_VideoInfo* ptr;
                if(SDL_Init(SDL_INIT_VIDEO) < 0){
                printf("Could not initializing SDL: %s.\n",SDL_GetError());
                exit(-1);
        }
        atexit(SDL_Quit);
        screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
        if(screen == NULL){
        fprintf(stderr, "Couldn't set 800x600x32 video mode: %s\n", SDL_GetError());
        exit(1);
        }
        ptr=SDL_GetVideoInfo();
        if(ptr) printf("%d=hw avaible\n",ptr->hw_available);
        else printf("error");
        return 0;
}

gcc new.c -lSDL
./a.out
0=hardware avaible
回复 支持 反对

使用道具 举报

发表于 2006-12-27 12:26:38 | 显示全部楼层
没有加速。所以慢是正常的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-27 16:46:04 | 显示全部楼层
9个月后回来结贴:
是显卡驱动的问题.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表