[過去ログ] SDLスレ (987レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
802(1): 799 [sage] 2005/06/28(火) 01:25:30 ID:xvJWzK7X(1/3) AAS
一日で一レスか。
こりゃ参ったなー。
作りたいものへのモチベーションも下がってきたし、一端とりさげるかな。
803: 802 [sage] 2005/06/28(火) 01:55:33 ID:xvJWzK7X(2/3) AAS
再度検索してみたら、2000年の時点の話だが、対応してないというページを見つけた。
外部リンク:risky-safety.org
804(2): 名前は開発中のものです。 [sage] 2005/06/28(火) 02:06:28 ID:pKbCq+nM(1) AAS
>>799799(3): 名前は開発中のものです。 [sage] 2005/06/27(月) 08:01:33 ID:3Ab5ewvX(1/2) AAS
質問です。
2つあるんですが、
1個目、SDLの標準機能で2枚目のウインドウを作ることってできるんでしょうか?
2個目、SDLの標準機能でC言語標準のscanfやらfgets(from stdin)やらのように、ユーザーに要求を求めるようなことって可能でしょうか?
2個目は1個目ができればハードコードで作ることも可能そうですが、ちょっと面倒な気がします。
よろしくお願いします。
1個目:
FAQだと思うが、改めてソースを見たところ、SDL_VideoInit()がcurrent_videoと言う
グローバル変数にビデオデバイス情報を格納していて、それを切り換えるAPIもない。
ロックせずに使用してるので、スレッド化も無理。
そもそもウィンドウという概念はない。
2個目:
コンソールを使いたいのか?だとすると開発環境によるだろうな。
俺は、MinGWを使ってるがこれだと無理っぽい。cygwinなら出来るだろうが、
cygwin上でSDLを動かしたことないんでよーわからん。
805(2): 名前は開発中のものです。 [sage] 2005/06/28(火) 02:21:39 ID:dyIcBP9c(1/2) AAS
>>799
どこかで既出だろう+試せば判るだろと思って黙ってたんだが。
ひとつめ、二つ以上のウィンドウは出せんとwebのどこかで読んだな。
ソースを見てもグローバル変数(Windows なら HWND SDL_Window)を
使ってそこらじゅうで使いまわしてるから、まず無理だろうと思う。
ふたつめ、起動した時にDOS窓(これも Windows の話だが)が出ているならできる。というかできた。
Windows の場合、設定によってはstdoutをstdout.txtにリダイレクトして、
DOS窓を出さないこともできるが、その場合はできなかった。
ソースは見てないが多分無理だろうな。
806(1): 805 [sage] 2005/06/28(火) 02:30:05 ID:dyIcBP9c(2/2) AAS
と書いてる端から被ったか……。全く食いつきがいいよな俺ら。
>>804と俺で書いてることが微妙に違うが、
ひとつめの違いは>>804が機種独立の部分を見て、
俺が機種依存の部分を見て喋ってるせい。
ふたつめは環境の違いで、俺の環境(VC6)ではどちらも作れる。
MinGWとCygwinはどちらかができるんなら
両方できるんじゃないかと思うがどちらも知らんからわからんなあ。
と、聞かれてもいないが補足しとく。
807: 名前は開発中のものです。 [sage] 2005/06/28(火) 04:03:09 ID:xvJWzK7X(3/3) AAS
>>804-806
レスthx
1個目について、
なるほど、グローバル変数つかってるのか。
そりゃ、切り分けが大変そうだ。
明快な回答に感謝。
2個目に付いて、
えーっと、誤解を招いたようだけど、
要はscanfとか自体を使うのではなく、自前か何かで実装できないかって、話です。
それが、SDL標準であったら良かったんですけど、なさげですね。
2枚目のウインドウがでるなら、そっちのサーフェスとキー入力を捻って入力コンソールを作ることができたんでしょうけど・・・。
あと、
作りたいソフトを超えるソフトを見つけてしまったので一端引くことにしました。
それが、ちょうどイメージしてた物に近かったため、それでいいかなと思っています。
回答ありがとうございました。
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ってのはちょっと遅いですよね?
810: 名前は開発中のものです。 [sage] 2005/07/05(火) 11:23:53 ID:Arb1ZSmv(1) AAS
SDLってイイとか言われているけど
実は描画が遅いんだよね
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をチェックして期待通りかどうかチェックしれ
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がそれほど罪深きコードだとは思わないけどなぁ…。
それとも暗黙の了解的なコーディングがあるんでしょうか?
上下前次1-新書関写板覧索設栞歴
あと 161 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.023s