[過去ログ] SDLスレ (987レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
811
(5): 名前は開発中のものです。 [sage] 2005/07/05(火) 14:08:42 ID:1ZePfTMa(1/3) AAS
>>808
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
せめて実行可能なコードを出せよ…

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

とりあえず SDL_SetVideoMode()の戻り値のSDL_SurfaceとBlitしている画像
のSDL_Surfaceのflagsやformatをチェックして期待通りかどうかチェックしれ
812: 811 [sage] 2005/07/05(火) 14:24:14 ID:1ZePfTMa(2/3) AAS
あとバカみたいだと思うだろうけどFPSの計算の仕方とかもチェック
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くらいになった…
818
(1): 名前は開発中のものです。 [sage] 2005/07/05(火) 19:49:15 ID:f1qgE5RI(1) AAS
試しました。確かに

WindowsXP
Pentium 4 2.4GHz
GeForce4 MX 420

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

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

>しょーもないコード書いて勝手にSDLを悪者にするのだけはやめれ
否定するなら根拠をまず述べるのが筋ってもんです。
822
(1): 名前は開発中のものです。 [sage] 2005/07/05(火) 22:59:46 ID:LYpwtNFt(1) AAS
#pragma once
って、非ウィンドウず系でも使えるなりか?
823: 名前は開発中のものです。 [sage] 2005/07/05(火) 23:16:04 ID:zWniNiIr(9/10) AAS
>>822
少なくともgccでは#ifndefを使用したほうがいいかと。
そして激しくスレ違い。
824: 名前は開発中のものです。 [sage] 2005/07/05(火) 23:16:34 ID:iphFkIr5(1) AAS
たしかにそれだけ遅いとJava2Dより遅いってことだから
なんかわけがありそうな気がする・・・
825
(1): 名前は開発中のものです。 [sage] 2005/07/05(火) 23:29:28 ID:l636Cdmy(1) AAS
DirectXもヘンテコなコード書けば、一部のマシンだけでしか動かないコードになると思うがな。
826: 名前は開発中のものです。 [sage] 2005/07/05(火) 23:44:56 ID:zWniNiIr(10/10) AAS
>>825
確かにコンパイラは嘘は付きませんからヘンテコはコードにはそれなりの挙動を見せます。
ですが、>>813がそれほど罪深きコードだとは思わないけどなぁ…。
それとも暗黙の了解的なコーディングがあるんでしょうか?
827: 名前は開発中のものです。 [sage] 2005/07/06(水) 09:30:28 ID:e9o9xwuh(1) AAS
>> 808
そのコードだとどちらのサーフェイスもシステムメモリに取られているだろう罠
811が言うように SDL_Surface の flags をチェックしてみ
828: 818 [sage] 2005/07/06(水) 20:18:02 ID:mO4Tn2rF(1) AAS
確かに、/test/testvidinfo.cの
void PrintFlags(Uint32 flags)を使って

PrintFlags(screen->flags);
printf("\n");
PrintFlags(surface->flags);
printf("\n");
とやると

0x00000000 SDL_SWSURFACE
0x00000000 SDL_SWSURFACE
となります。


SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32, SDL_FULLSCREEN | SDL_DOUBLEBUF);
にすると

0xc0000001 SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF
0x00000001 SDL_HWSURFACE
となり、Blit & Flipで

30000 fps
になりました。(合ってるのかな?)
829: 名前は開発中のものです。 [sage] 2005/07/18(月) 22:07:17 ID:Tgmwb20q(1) AAS
Irrlicht初心者質問スレ
2chスレ:tech
でも聞いてみたのですが、反応が無いのでこちらでも聞いてみます。マルチすいません。

Irrlichtで描画系、その他(音、入力関係とか)はSDLと組み合わせて使うことって可能でしょうか?
あと、もし可能なんだとしたら、サンプルとかあると嬉しいのですが、ご存じの方いませんか?
830: 名前は開発中のものです。 [sage] 2005/07/20(水) 00:36:00 ID:a4NCqugX(1) AAS
SDL_MixerでBGMのクロスフェードって可能でしょうか?
831: 名前は開発中のものです。 [sage] 2005/07/20(水) 05:03:25 ID:KNwpKu9v(1) AAS
Channelを1つBGMとして使えば行けるんで無いかしら。
832: 名前は開発中のものです。 [sage] 2005/07/20(水) 19:24:07 ID:oHYMFGyh(1) AAS
~~~~~~\   /~~~~~~
     \/
     /\
    /    \

じゃなくて

~~~~~~\        /~~~~~~
     \     /
      \   /
        \/
にする!
833: 名前は開発中のものです。 [sage] 2005/07/20(水) 20:00:00 ID:eQOHDI/N(1) AAS
SDL_Mixerはシンプルだけど、こまかいことは苦手
834: 名前は開発中のものです。 [sage] 2005/07/20(水) 21:06:55 ID:J6BwLsDL(1) AAS
~~~~~~\   /~~~~~~
     \/
     /\
    /    \
   ~~~~~~~~~~~~  ←この部分を合成
835
(1): 名前は開発中のものです。 [sage] 2005/07/25(月) 19:06:53 ID:1zvi2dmP(1) AAS
SDLを使って、ゲームを作ろうと思うのですが、
Win上で使える入力補完機能のあるIDEはありませんか?
1-
あと 152 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.022s