SDL1.3を試す

 先日のコーディングオフの際にisshikiさんにDirectX9対応のSDL1.3(β?)が出てるよって教えてもらったので自分の環境でも試してみました。


● 最新ソースのダウンロード

以下のエントリーに載ってるURLからダウンロードできます。
[SDL] SDL 1.3 bug hunt contest!


「bug hunt contest」と銘打ってるくらいなのでβ版くらいの位置づけですね。


2009/2/16にダウンロードしたところソースの最新日付は2/9でした。
この日記は2/9版を元に書いています。
※今日(3/3)ダウンロードしたら、ソースの最新日付は2/20になってました。着々と更新されているっぽい。



VC++6.0でビルドするには・・・


いつもC++での開発はVC++6.0使ってます。
「VisualC」フォルダ内のプロジェクトファイルを使えば、そのままビルドできるのですが・・・
今回はVC++6のプロジェクトファイル(dsw)がついてこないようです。


↓のツールを使用してVC++7のファイル(sln)をコンバートしてみました。
VC++7 to VC++6 project converter


prjconverter.exeに SDL.slnをドロップすると SDL.dswが生成されます。これは便利。


あと、DirectX SDK (November 2008)をダウンロード&インストールします。


さて、コンパイルすると↓のようなエラー(他たくさん)が出てきますorz
D:\SDK\SDL-1.3.0-4423\src\libm\e_pow.c(79) : error C4226: 非標準の拡張機能が使用されています : 'huge' は互換性のために残されているキーワードです。
他にもいろいろエラー出てくる。


なんか、VC++6.0は切り捨てられちゃった?
Win2kも切り捨てられてしまったそうだし。さすがのSDLも古い環境までサポートしきれないのか。



● VisualStudio2008 ExpressEdition でビルド


 VS2008EEではうまくビルドできました。


 プロジェクトファイル(.sln)を開くとVisualStudio変換ウィザードが起動するので、そのまま変換。
 あとは、DirectXのヘッダファイルにincludeパスを通せばOK


 ビルドすると(2/9版では)、


2>SDL_gdirender.obj : error LNK2019: 未解決の外部シンボル _SDL_PreMultiplyAlphaBGRA8888 が関数 _GDI_SetTextureBlendMode で参照されました。


とエラーが出るので、「src\video\SDL_alphamult.c」をプロジェクトに追加
これでビルドは完了です。



● で。

fslasht> SDL1.3をVisualStudio2008ExpressEditionでビルドしてみた(最初ビルドとおらなかったけど、プロジェクトに src\video\SDL_alphamult.c追加したら通った)
fslasht> でも、SDL.NETから利用するとnullrefferenceの例外で起動時におちるorz
fslasht> API自体は、1.2の202個から1.3では790へ大幅に増えています。
fslasht> SDL.NETは、tao.sdl.dll を介してsdl.dllを呼び出しているのかな。tao.sdl.xmlを修正したら動くのだろうか・・・
fslasht> tao.sdl.xml読んでみました。関数名や引数が定義されてるんですね。でも、全部シンボルで指定されているので1.3でもそのまま動きそうですが、なんでだめなんだろう・・・
fslasht> ひょっとしたら廃止されたAPIがあるのかなあ。調べてみます、。
fslasht> きゃー、1.3では、SDL_CondBroadcastとかの Cond なんとか系がまるっきり無くなってるorz
fslasht> SDL_GL_Lockとかもない
fslasht> SDL_GetKeyState は SDL_GetKeyboardState になる模様。なんで変えるの〜



というわけで、SDL.NETからはそのままでは使えませんでした。
APIは増えている(202→709個)のですが統廃合も結構あり、完全な後方互換性はないようです。残念。
SDL.NETが対応してくれるのをいい子にして待ってればいいですか?



● おまけ

Codezineで、C#+SDL.NETでゲームを製作する入門記事が掲載されました。


オープンソースのライブラリ「SDL.NET」で始める ゲームプログラミング 〜前編〜
オープンソースのライブラリ「SDL.NET」で始める ゲームプログラミング 〜後編〜


大変わかりやすく、これからゲーム作る方にもお勧めです。
こうしてSDL.NETがメジャーになっていけばいつかは1.3に対応してくれる・・・ハズ