[過去ログ] SDLスレ (987レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
808
(9): 名前は開発中のものです。 [] 2005/07/05(火) 04:30:00 ID:zWniNiIr(1/10) AAS
640*480*32(bpp)の画像を1枚表示するだけで60FPS前後なんですが描画が遅いのは何が原因なんでしょう?
それともこれが限界ですか?

初期化は
SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_ANYFORMAT);
こんな感じでSDL_FillRect()せずにSDL_BlitSurface()してからSDL_Flip()。

環境は
Pentium4 2.4G
GeForce4 ti4400
809: 808 [sage] 2005/07/05(火) 04:38:10 ID:zWniNiIr(2/10) AAS
補足です。
ウィンドウモードでリフレッシュレートは85Hzです。
画像を描画させなければ130FPSほどでますがFlipだけで130FPSってのはちょっと遅いですよね?
811
(5): 名前は開発中のものです。 [sage] 2005/07/05(火) 14:08:42 ID:1ZePfTMa(1/3) AAS
>>808
せめて実行可能なコードを出せよ…

SDL_Flipだけで130FPSってのは遅すぎるのでどこかが間違っていると思われ

とりあえず SDL_SetVideoMode()の戻り値のSDL_SurfaceとBlitしている画像
のSDL_Surfaceのflagsやformatをチェックして期待通りかどうかチェックしれ
813
(2): 808 [sage] 2005/07/05(火) 14:53:21 ID:zWniNiIr(3/10) AAS
>>811
>せめて実行可能なコードを出せよ…
あいすまんかった。

int main(int argc, char* argv[]) {
 SDL_Init(SDL_INIT_VIDEO);
 SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_ANYFORMAT);
 SDL_Surface* temp = SDL_LoadBMP("test.bmp");
 SDL_Surface* surface = SDL_ConvertSurface(temp, screen->format, SDL_HWSURFACE);

 while (1) {
  SDL_BlitSurface(surface, NULL, screen, NULL);
  SDL_Flip(screen);

  SDL_Event event;
  while (SDL_PollEvent(&event))
   if (event.type == SDL_QUIT)
    return 0;

  char buf[64];
  sprintf(buf, "%d fps", CalcFPS());
  SDL_WM_SetCaption(buf, NULL);
 }
 return 0;
}
814: 808 [sage] 2005/07/05(火) 14:53:54 ID:zWniNiIr(4/10) AAS
>>813 の続き

int CalcFPS() {
 static Uint32 count, fps;
 static Uint32 btime;

 if (++count == 60) {
  Uint32 time = SDL_GetTicks();
  fps = 1000 / (float(time - btime) / 60);
  btime = time;
  count = 0;
 }
 return fps;
}
815: 808 [sage] 2005/07/05(火) 14:57:52 ID:zWniNiIr(5/10) AAS
普通にDirectX(draw)でハードウェアサーフェイス作ると500FPSとか軽くでるので
ハードウェアやドライバがおかしいとも思えないし何ででしょうね。
皆さん上のコードでFPSいくつ位でます?
816: 808 [sage] 2005/07/05(火) 15:07:12 ID:zWniNiIr(6/10) AAS
>>811
>のSDL_Surfaceのflagsやformatをチェックして期待通りかどうかチェックしれ
SDL_Surface.format_versionってのがscreenでは2、surfaceでは4になっている以外は同じです。
これが原因ですかね…?
んー。
817: 811 [sage] 2005/07/05(火) 18:34:24 ID:1ZePfTMa(3/3) AAS
>>808
実行してみた.SDL_Flip()のみにして300fpsくらい出た…

CPU : PentiumM 1.1GHz
Video : i855GM (VRAM は Main Memory) の 16bpp

とりあえず毎フレームSDL_WM_SetCaption()するのは無駄なんで
CalcFPS()内のifの中に持って言ったら 400FPSくらいになった…
819
(1): 808 [sage] 2005/07/05(火) 21:16:11 ID:zWniNiIr(7/10) AAS
>>811 818
テストありがとう。超ありがとう。
でもお気楽にハードウェアデバイスが使えると思ったんだが何やら環境依存でそうでもないみたいですね。
DirectXより環境に依存するなんて使う気無くしました。
他のクロスプラトフォームライブラリ探します。
レスありがとう。それに関しては感謝してます。
ありがとう。さようなら。
821: 808 [sage] 2005/07/05(火) 21:55:55 ID:zWniNiIr(8/10) AAS
>>820
820(1): 名前は開発中のものです。 [sage] 2005/07/05(火) 21:42:36 ID:x9lRp/t3(1) AAS
>>819
他にいいのがあれば誰もSDLを使わないよ。
とりあえず、やりたいことが2Dなのか3Dなのか分からんが、
3Dの場合はOpenGLを使うことになるが、WindowsとLinuxでなんの
問題もなく使える。

しょーもないコード書いて勝手にSDLを悪者にするのだけはやめれ。
SDLを馬鹿にしているつもりはないよ。
それどころかSDLは初期化が簡単(ハードウェアを利用するライブラリとしては)なので初心者/入門者には最適だと思います。
また、さくっと作りたい場合は。
ただ、本家で掲載しているコードをほぼそのまんまの形で利用した場合、最低限バックバッファにコンパチブルな
オフスクリーンサーフェイスのフォーマットを選択してくれてもいいように思いました。
Simple directmedia layerのsimpleってなんでしょう?

>しょーもないコード書いて勝手にSDLを悪者にするのだけはやめれ
否定するなら根拠をまず述べるのが筋ってもんです。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s