SDL=Simple DirectMedia Layerでゲームだ
■ このスレッドは過去ログ倉庫に格納されています
無い。改変した SDL でリンク出来るようにしておかないとダメ。 SDL_GL_SetAttributeで色のサイズを5ビットに設定したとき、
ピクセルあたり8ビットのBMPを読み込んでいるとき、
glTexImage2Dでは自動的に5ビットに直されるのでしょうか、
それとも、描画時に勝手に直されるのでしょうか?
もしくは8ビットを自分で5ビットになおさないといけませんか? >>254
LGPLだと作者が翻ってGPL宣言したとたんさかのぼって適用されないのかと心配
>>255
objを同梱するのも嫌なんだけど、SDLは全部DLLなんすか? >>258
> LGPLだと作者が翻ってGPL宣言したとたんさかのぼって適用されないのかと心配
将来のバージョンでGPLになった場合でも、既にLGPLな時にリンクされたバージョンに遡って適用されることはない。
例えば、LGPLの1.2.9を入手して使用してたとして、
作者が1.2.10とかでGPLにライセンス変更するようなことがあったとしても、
1.2.9をLGPLライセンスの元で使用し続けることは可能。
> objを同梱するのも嫌なんだけど、SDLは全部DLLなんすか?
SDL本体はDLL(つか、公式のバイナリを見ればすぐ分かることだと思うが…)。
その他にwindowsなんかの場合SDLmainというのが存在し、これは通常スタティックリンクされるが、
このファイルだけはPublic Domainなのでスタティックリンクしてもソース公開の義務は無い。 LGPLのライブラリって多いから、毛嫌いもしてられないって感じだね。
FSFとしては、LGPLを将来的に無くしてしまうつもりとかあるのかな。非推奨とか言ってるけど。
続いて欲しいな・・・。 >>260
FSFのLGPLは強すぎるGPLに対して好意で設けているわけではない。
きわめて戦略的。GPLが嫌われてるのは連中も認識しているから、
それだと普及の妨げになると判断した時LGPLにする模様。
>>258
>既にLGPLな時にリンクされたバージョンに遡って適用されることはない。
信用できない。 >>261
信用出来ないって、書かれている事が全てだよ。
戦略的だからこそ、信用出来ると思うけどね。Lesser という名前を付けてまで LGPL を
設けなきゃいけない理由は皆知ってるし。無くなれば非難囂々でしょう。
あんまり的外れな議論をしてると GPL 信者が寄って来るよ。
「信用出来ないなら使わなきゃいーじゃん」って。 >>255
>改変した SDL でリンク出来るようにしておかないとダメ。
これはSDLがどのような形になるか不明であるため
ソースコードを提供しなければ履行できないのではないか
たとえば関数の引数が変わればリンクはできないなど
SDL側の改変の幅がわからなければ対応しようもない 互換性失うような改変にまで対応する責任はないよ。
互換性保ったまま改変した SDL に対して、正常にリンク・動作できればいい。
# …っていうか、疑問があったら読もうよ、ライセンス。
# これもちゃんと書いてあったし。 2月17日最終書き込みでDAT落ちしてるっぽい
980超えたからだな
1000いってないから2chミラーサイトに拾われないので
ログは持ってたほうがいいよ やっぱ落ちてたのか。
誰かあっちにパート2立ててくれないかな・・・。
俺の環境じゃなんか新スレ立てに失敗してしまう・・・。 それなりに情報があるから会話が必要ないのかな
これだけ整備されてるとアイデア勝負だから時々絶望する ゲームはアイデアよりバランスと構成勝負
Aba氏とか見て絶望する必要はない。彼は所詮アマチュア。 アイデア+バランス勝負だろ。
プロとアマの差は組織力だけだと思うな。 SDL_ToggleFullScreenって何で役に立たないんだろう FAQにはこう書かれています。
----------------------------------------------------------------------------
Q: Why doesn't SDL_WM_ToggleFullScreen() work on Windows?
A: The semantics of SDL_WM_ToggleFullScreen() are that switching between fullscreen
and windowed mode is transprent to the application.
The display pixels pointer does not change, the display depth does not change, etc.
This cannot be guaranteed on Windows. However,
there is a simple method you can use to change between fullscreen and windowed mode:
flags ^= SDL_FULLSCREEN;
screen = SDL_SetVideoMode(..., flags);
----------------------------------------------------------------------------
Ruby/SDL で mixer の初期化に失敗するのですが、同じ症状で解決された人いましたらご教示よろしくお願いします。
ディストリは CentOS 4.3
$ uname -srvmpio
Linux 2.6.9-34.0.2.EL #1 Fri Jul 7 19:24:57 CDT 2006 i686 i686 i386 GNU/Linux
$ruby -v
ruby 1.8.4 (2005-12-24) [i686-linux]
SDL_mixer-1.2.7 はソースからコンパイルしてインストールしました。
導入しようとしたのは Ruby/SDL 1.1.0 で、
sampleディレクトリ下の playwav.rb を実行すると
/usr/local/lib/ruby/site_ruby/1.8/sdl.rb:220:in `open_imp': Couldn't open audio: Couldn't create mixer lock (SDL::Error)
from /usr/local/lib/ruby/site_ruby/1.8/sdl.rb:220:in `open'
from playwave.rb:7
というエラーが出ます。
SDL_OpenAudio で止まってるようで、簡単なテストコードをCで書いても同じメッセージ(Couldn't create mixer lock)が出ます。 遅レスな上に当てずっぽうだがSDL_mixerが新しすぎるとみた。
もう解決してたらスルーしてくれ。 たった今解決しました。(汗
公式サイトの
ttp://www.libsdl.org/release/SDL-1.2.11-1.i386.rpm
をインストールしなおしたあとで動くようになりました。
ただ、SDL_mixerのconfigure時にsdl-configのパスが間違っていたっぽかったので
そっちだったのかもしれません(それでもconfigureは通るんですよね)。
x) /usr/local/bin/sdl-config
o) /usr/bin/sdl-config
結局具体的に何がどうだったのかいまいち不明です。
なんだか参考にならなそうですみません。
>>279さんの書き込み見る前にニアミスで解決しちゃったんで、ありがとうございます、ではないですけど・・・おさわがせしました〜。
いちおう書いておくと、SDL_mixerのmixer.cの SDL_OpenAudio のとこ(300行付近)↓
で止まってました。
/* Accept nearly any audio format */
if ( SDL_OpenAudio(&desired, &mixer) < 0 ) {
return(-1);
}
日本で、これを使ってゲームを販売している会社はあるの? どっかの企業が作ったライブラリが原型じゃないっけ?
ってことはその原型のライブラリは
その企業では一応使われてたんでないかと ものすごく恥ずかしい質問かもしれないけど・・・
ウィンドウタイトルに日本語は使えないの? >>291
少なくともWindowsでは使えない。
文字列をutf-8に変更した時からみたいだね。
バグ報告は出ているけど、いつ直ることやら。
って思ったら、とりあえずパッチが上がってた。
古いバージョンを使うか、バグ報告どおりに自分で直すと良いかと。
ttp://bugzilla.libsdl.org/show_bug.cgi?id=365 便乗して恥ずかしい質問してみるけど、Alt+F4ってどう実装してる?
メインループのPollEventで、下のようにやってもAltを認識してくれないぽ
環境はwin2k、DevC++(gcc+mingw)、SDL1.2.11
bool PollEvent(){
SDL_Event ev;
while(SDL_PollEvent(&ev)){
switch(ev.type){
case SDL_QUIT:
return false;
break;
case SDL_KEYDOWN:
if((ev.key.keysym.sym == SDLK_F4) && (ev.key.keysym.mod == KMOD_ALT)) return false;
break;
}
}
return true;
} ev.key.keysym.mod & KMOD_ALT 泣いた
サンクスコ
それだとうまくいきました
ビットごとに違うフラグあるんだから全体を==で比較しちゃ駄目ですね SDL_ttfのこの辺って戻り値が参照渡しだけど、もしかしてこの関数内でサーフェス用に確保されたメモリってほったらかしだと解放されないで、新しく確保した領域にポインタが更新されるだけ?
ループの中でテキスト生成させてたら、秒速1MBでメモリ増えてくんだけど(;'A`)
>SDL_Surface *TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg) >>297
SDL_ttfの戻り値は自分で開放するもんだ.
ってかループ中に使うものじゃない. さてこれからC++とSDLで勉強しようと思う俺様が通りますよ
SDL1.2.12になってからVisualC++ 2005 EE SP1でコンパイルしても実行出来なくなったんですが
原因が分かる方居ますか? 1.2.12いれたら -ansiオプションで警告出たのでなんだろと思ったら
SDL/begin_code.hの93,94行目のコメントがC++形式だった
>>303
ほんとだw
svn見てみたらそっちは直ってたよ >>306
さよなら。いってらっしゃい。
↓続きをドゾ SDL使ってゲームを作り始めました。ここで質問なんですが、
SDL_GetKeyState()はゲームのメインループ1回に1度呼び出すのと、
SDL_PollEvent()でSDL_KeyboardEventを拾った時に呼ぶのとどっちがいいんでしょう?
前者では常にそのタイミングでスキャンでき、
後者ではOSがイベントを中継する分だけ(処理落ちが激しいときなどでは)反応が遅れる可能性があるが
キーボードに触れられなければSDL_GetKeyState()が呼ばれないためその分軽い(1msも掛からないと思うけど・・・
ということじゃないかと考えているのですけど、一般的にはどちらが使われる、とかありますか?
あと、SDL_PollEvent()でイベントが何もきていないときにゲームメインループを進めているのですが、
ウィンドウのタイトルバーを右クリックしてポップアップメニューが表示されている間や、
タイトルバーをドラッグしてウィンドウが動いている間などはゲームメインループが進みません。
こういった状態でもゲームメインループをまわすにはどうしたらいいですか?
(Windowsでの話です。) >>308
普通は毎フレーム呼ぶんじゃないかな?
ソース読めばわかるけど SDL_GetKeyState() は実はポインタを返すだけの処理だから
どっちでも大差ないだろうけど.最適化を考えるなら1フレームあたり1回しか
呼ばれない低負荷の関数コールを削ることを考えるよりもどこがボトルネックに
なっているか調べてほかに重い場所を探したらいいと思うよ?
# 実は最初に一回呼んでポインタを保存しておいてループ内ではそれを参照するとかでも
# 動く気がするけどその動作が保証されてるわけじゃないから…まぁ適当にやってくれ >>309
ありがとうございました。ポインタを返すだけだったのか! SDL 1.3の新機能についてRyanさんが書いてる。
ttp://icculus.org/cgi-bin/finger/finger.pl?user=icculus&date=2007-10-07§ion=sdl13
ついにマルチウィンドウが来ますな。
過去互換性も整理する方向みたいね。
いつ頃投入予定なのかな?SDL1.3 マルチウィンドウ出来たら Gtk+ の代わりに使えるかな それはパーツの種類が少ないからムリだと思う。
SDLの上にウィジェット・ツールキットを構築するのはありだと思うけど。
RubyでSDLを弄り始めたんですが、これはスタンドアロン専用ですか?
CGIでは使えない? >>316
CGIと言うか、RubyとかWEBアプリ用と聞いたので、
当然ライブラリとかもWEB上で使えると思ったんだけど・・・ RubyがWEBアプリ用とかいう認識が根本的に間違ってることを理解してくれ
# まぁ向いてる分野ではあるけど > RubyとかWEBアプリ用と聞いたので、
違うよ。全然違うよ。
> 当然ライブラリとかもWEB上で使えると思ったんだけど・・・
なんで?WEB上ってどこで?
普通、クライアントサイドで動かす、SDLを
サーバーで動かす利点は何だろう?
SDLと関係ない話になりそうな流れだな……。
別にもうこれ以上掘り下げなくてよくね? Ruby/SDLで書いたゲームスクリプトを投稿すると
サーバの向こう側に常時待機しているおっさんがそれを遊んで
スコアを返すWebアプリを思いついた
アイデアの権利は放棄するからお前ら自由に実装していいぞ 複数のテキストをOpenGLの画面に渡すためにSDL_ttfを使っているのですが、
TTF_RenderUTF8_Solidして作ったいくつかのSDL_Surfaceを、
SDL_BlitSurfaceで、既にOpenGLのフォーマットにしてある大きなサーフィスにコピーして集めて画面をつくり、
その大きなサーフィスをglTexSubImage2DでOpenGLテクスチャとして更新して表示
という方法で、やりたいことはできたのですが、
テキスト1行1行を別々のテクスチャとして扱いたかったのに加えて、
ここの処理だけSDL側でコピーするのも気持ち悪いな、と思い、
TTF_RenderUTF8_Solidして作ったSDL_Surfaceを
SDL_ConvertSurfaceを用いてOpenGLのフォーマットに変換して、
glTexSubImage2DでOpenGLのテクスチャを部分更新して転送する
という方法に変えたところ、テキストのテクスチャの背景部分が透過されなくなってしまいました。
OpenGLテクスチャ上では、文字部分はα値1でカラー値さまざま かつ 文字の無い部分はα値0で完全に透明
にしたいのですが、どうしたらいいのですか?
もともとの方法では、SDL_BlitSurfaceの時に、TTF_RenderUTF8_Solidの作ったサーフィスの文字の無い部分は
自動的に透過されたのですが、SDL_ConvertSurfaceをする場合は、同じように透過されないのでしょうか? >>325
ConvertSurfaceでできたSDL_Surfaceの pixel 値を
覗いてみて希望の状態になってるか見てみれ >>326
ありがとうございました、解決しました。
覗いてみたところ、透過したいところのαが0、表示したいところのαが255、と、
OpenGL側の透過値と全く反対で扱われていました。
gl側の混合処理で、GL_SRC_ALPHAからGL_ONE_MINUS_SRC_ALPHAにしたらうまくいきました。
解決のヒントを与えてくれてありがとうございました。 補助ライブラリを日本語で紹介してるサイトないですか? >>329
解説が必要なほど複雑なAPIないからなぁ… 325とは逆に作ったサーフェスに全く表示されないのを一晩悩んだ漏れが来ましたよ
FillRectで特定の値書き込んだ所や貼り付けた特定の画像上だけしか重ね貼りした画像表示しなくて、
真っ黒な0でのFillRectと並べてやっと気付いたorz
もう弄りすぎてソースが焼きそば並にぐちゃぐちゃだぜ cairoとの相性いいみたいですね
フォントとか画像ファイル関係はcairoで代用できそう 板違いだったらすいません。
ちょっと質問なんですが、Ruby/SDLを使用しようと思って、必要なものをインスコして、
プログラムを書き、コンパイルしたら、
ALSA lib confmisc.c:数字
ALSA lib conf.c:数字
ALSA lib pcm.c:数字
こういうものが多数出てきて、実行できませんでした。
環境は、Linuxのubuntu7.10を使っています。
SDLやRuby/SDLは元々入っていたものをパッケージャから入れました。
どうしたら実行できるでしょうか? こういうものが多数・・・と手書きするんじゃなくて
可能な限りをコピー&ペーストしなさい
数字の後にもエラーメッセージ続いてたろ? >>335です。
実行できなかったのは、ソースファイルの打ち間違いでした。すいません。
しかし、>>335に書いたエラーが出てから実行されます。
>>336
すいません。VMwarePlayerでLinuxを使っていて、
それではネットにつなげるように設定していなかったので
コピペできませんでした。
ALSA lib confmisc.c:769:(parse_card) cannot find card ''
ALSA lib conf.c:3510:(_snd_config_evaluate) function snd_func_card_driver returned error: No such device
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:3510:(_snd_config_evaluate) function snd_func_concat returned error: No such device
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:3510:(_snd_config_evaluate) function snd_func_refer returned error: No such device
ALSA lib conf.c:3982:(snd_config_expand) Evaluate error: No such device
ALSA lib pcm.c:2144:(snd_pcm_open_noupdate) Unknown PCM default
これが出てたエラーです。 マルチプラットフォームなこのライブラリですが
多少の手直し程度の移植可能(なように作れる)プラットフォームは
どれとどれでしょうか? >>337
サウンドデバイスが見つからないと言っている
>>338
Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. SDL_ttfについて質問です
TTF_RenderText_Solid等をして返ったサーフェースは自分でSDL_FreeSurfaceで開放しなくてはいけませんか? >>340
開放しなくてはいけませんか?(Y/yes) >>340
開放しなくても、プログラムが止まることは無いでしょう(多分)
なので開放しなくても大丈夫です 毎フレームフォントをラスタライズするようなアホプログラムなら直ぐに止まりそうだけどね… >>340
毎フレームフォントをラスタライズかつ開放しないアホプログラムを実行してタスクマネージャのメモリの項を見ましょう
つかやっぱり毎回作っては開放してって重いのかな('A`) サーフェスに文字を詰め込んでいって
毎フレーム自分でレイアウトして描画するようにしたほうがいい気がする
ちょっと面倒だけど作ってしまえば更新頻度とか気にせず使える >>344
毎フレームってことなら当然糞重いでしょ。
サイズにもよるが、メモリの確保&解放だけで結構なボトルネックになるとみた。
既存サーフェスに描画してくれる機能ってあったっけ? 320x224の解像度でフルスクリーンにすると画面が90度回転してしまうんですが、
解像度は変えないか320x240でこれを発生させない解決方法ってないでしょうか?
すっかり忘れました。ごめんなさい。
ハードはThinkPad X60s
Win XP + Mingw GCC + SDLソースインスコ
です。
先生!こんなのありましたけど、昔ながらの行番号BASICからSDLが使えるんですか?
SDL_basic
http://www.libsdl.org/applications.php?match_id=1905 ■ このスレッドは過去ログ倉庫に格納されています