私が正しく覚えていれば、私は以前この問題に遭遇しましたが、どのように解決したのか覚えていません。 これは私のプログラムです:SDLでかなりの遅延を伴うビデオアップデート
#include "SDL.h"
SDL_Surface *screen;
SDL_Event event;
int main(int argc,char *argv[])
{
SDL_Init(SDL_INIT_VIDEO);
atexit(SDL_Quit);
screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
int x = 10,y = 10;
while (1)
{
while (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
exit(0);
}
int mx,my;
Uint8 mstate = SDL_GetMouseState(&mx,&my);
if (mstate & SDL_BUTTON(1)) x = mx,y = my;
SDL_FillRect(screen,NULL,0);
*(Uint32*)((Uint8*)screen->pixels+screen->pitch*y+x*sizeof(Uint32)) = 0xFFFFFFFF;
SDL_UpdateRect(screen,0,0,0,0);
}
}
あり、白画素は黒の背景にありますし、マウスの左ボタンを押したときには、マウスカーソルの位置に移動します。問題は、ピクセルが新しい位置に現れるまでにはかなりの時間がかかります。そのピクセルだけで問題になることはありません。プログラムウィンドウを移動しようとすると、すぐに応答しません。 while(SDL_PollEvent(&イベント))ループの途中に置いても関数printfは機能しません。一方、SDL_SetVideoModeで同じことを行うと、イベントが発生した瞬間に応答します。 また、これはFPSと解像度が十分に高い場合にのみ発生します。ビデオモードを640x480ではなく320x200に設定したり、FPSを制限したりすると、すべて時間通りに動作します。 ところで、私はUbuntu 11.10をMesaグラフィックドライバと共に使用しています。 この問題はSDLやその他のソフトウェアのバグですか、それとも私のせいですか?
私のマシン(windows7)で正常に動作します。ダブルバッファリングを試みましたか?また、マウスがクリックされたときだけ(そして、単一のピクセルを変更するだけでも)、繰り返しごとに 'SDL_FillRect()'を実行する必要はありません。 – jrok