[過去ログ] SDLスレ (987レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
364: 362 [sage] 04/02/04 11:41 ID:URHwb4SZ(1/3) AAS
>>363363(1): 名前は開発中のものです。 [sage] 04/02/03 17:19 ID:0RlVpYsz(1) AAS
>>362
あなたの環境でフルスクリーンでSDL_FillRect使って
ものすうんごく遅くなる最小限のサンプルプログラムを
示してくれればみんなテストしてくれると思うよ?
長くなるので一部省略します。
if(fullScreen)
screenSrf = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF);
else
screenSrf = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
while(1) {
static int px = 0;
SDL_Rect area = {0, 0, 640/2, 480};
SDL_FillRect(screenSrf, NULL, SDL_MapRGB(screenSrf->format, 255, 255, 255));
if(px > 640 / 2) px = 0;
else px++;
area.x = px;
SDL_FillRect(screenSrf, &area, SDL_MapRGB(screenSrf->format, 0, 0, 0));
SDL_Flip(screenSrf);
waitByFPS();
printf("FPS=%d\n", nowFps);
}
365: 362 [sage] 04/02/04 11:44 ID:URHwb4SZ(2/3) AAS
waitByFPSの中身です。
static void waitByFPS() {
Uint32 nowtime,lefttime;
static Uint32 lasttime=0;
const Uint32 interval=1000/fps;
nowtime = SDL_GetTicks();
lefttime = lasttime+interval-nowtime;
if(lasttime+interval>nowtime) {
SDL_Delay(lefttime);
lasttime=nowtime+lefttime;
nowFps = fps;
} else {
nowFps = 1000 / (nowtime - lasttime);
lasttime=nowtime;
}
}
変数fpsはint型で60、nowFpsには現在のFPSが入っています。
366: 362 [sage] 04/02/04 11:50 ID:URHwb4SZ(3/3) AAS
っと、ここまで貼ったのですが、このプログラムの場合、
フルスクリーンにしたときにFPSが下がるのではなく、
何も写らなくなってしまいます。
問題が発生した元のプログラムも、どうやらSDL_FillRect又はSDL_Flipに
時間がかかっているのではなく、画面が実際に更新されていないだけのようです。
(つまり、nowFpsにはちゃんと60が入っている)
機種固有の問題でしょうか? よろしくお願いします。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.030s