|
像下面这种简单的程序,有明显的延迟,并且CPU占用100%,试输出timepass,30左右。如果用微软的Direct Draw在Windows下实现类似功能的程序,timepass一般在5以下。请问我的程序有什么问题吗?还是我的系统(如显卡驱动SDL驱动等)有问题?
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include "SDL/SDL.h"
- #include "SDL/SDL_image.h"
- #define TICK_INTERVAL 15
- int main(int argc, char *argv[]){
- SDL_Surface *screen;
- SDL_Surface *image;
- SDL_Event event;
- SDL_Rect r = {0,0,0,0};
- int x=0,y=0;
- char *file_name = "logofish.png";
- int timepass=0, timeold=0;
-
- 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);
- }
-
- image = IMG_Load(file_name);
- if (image == NULL) {
- fprintf(stderr, "Couldn't load %s: %s\n", file_name, SDL_GetError());
- return 1;
- }
- while(1){
- while(SDL_PollEvent(&event)){
- switch(event.type){
- case SDL_MOUSEMOTION:
- x = event.motion.x; y = event.motion.y;
- break;
- case SDL_KEYDOWN:
- switch(event.key.keysym.sym){
- case SDLK_UP:
- y -= 4;
- break;
- case SDLK_DOWN:
- y += 4;
- break;
- case SDLK_LEFT:
- x -= 4;
- break;
- case SDLK_RIGHT:
- x += 4;
- break;
- }
- break;
- case SDL_QUIT:
- exit(0);
- break;
- }
- if(x < -image->w + 2) x = -image->w + 2;
- if(y < -image->h + 2) y = -image->h + 2;
- if(x > screen->w + image->w - 2) x = screen->w + image->w - 2;
- if(y > screen->h + image->h - 2) y = screen->h + image->h - 2;
- r.x = x;
- r.y = y;
- timeold = SDL_GetTicks();
-
- // SDL_FillRect(screen, NULL, 0);
- if(SDL_BlitSurface(image, NULL, screen, &r) < 0)
- fprintf(stderr, "BlitSurface error: %s\n", SDL_GetError());
- SDL_Flip(screen);
- timepass = SDL_GetTicks() - timeold;
- // printf("%d ", timepass);
- if(timepass < TICK_INTERVAL)
- SDL_Delay(TICK_INTERVAL - timepass);
- }
- }
-
- return 1;
- }
复制代码 |
|