SDLとは? (その1)

SDLについて、 SDL Introを眺めつつ 紹介したいと思います。所々に私見が紛れこんでいます。

SDLの概要と特徴

SDL(Simple Directmedia Layer)は、画像、音などを 統一的にアクセスするためのAPIの集まりです。 本体は、Sam Lantingaさんが (ほぼ?)ひとりで開発/メンテを行っているようです。 Samさんは Loki Entertainment Softwareの Lead Programmerです。LokiはLinux用のゲームを製作していて、 同社のゲームでもいくつかSDLを採用しているものがあるようです。 SDLはCで書かれており、 GNU LGPL(Lesser General Public License)に 従って配布されています。

統一的という表現を使いましたが、SDLは様々なplatformで 動くというのが大きな特徴です。 Linux, Win32, BeOS, MacOS, Solaris, IRIX, FreeBSD は 正式にサポートされているとannounceされているもので、 さらにNetBSD、OpenBSD、AmigaOS、MacOS Xなどでも動くようです。 1つのソースでこれだけのプラットホームで動く、 しかもグラフィックやオーディオを使ったマルチメディアな プログラムを書くことができるというわけです。

SDLの特徴(続き)

名前の通り、SDLはわりとシンプルなAPI群で、 それだけでなんでも済ませるというのはちょっと難しいですが、 SDLの上で動く ライブラリが沢山 公開されていますのでこれを利用することで、 SDLの持つ「cross-platform」の利点を失うことなく様々なことを 実現できます。

一方で、SDLは、もともとのplatformで使えるものはどんどん使うという 特徴を持っています。例えば、WindowsならDirectX(5以上)が入っていれば それを使って動作しますし、XFree86だったらDGA Extensionが 動くならそれを使うことができます。 逆に、それらが使えないときでも(性能は落ちますが)ちゃんと動く、 というのもSDLの立派なところです。

厳選した機能を高性能で供給し、 足りない分はライブラリやアプリケーションで補う、というのが SDLの理念ではないかなと私は考えています。

「あるものは使う」という理念はライブラリ群にも言えるのではないかと 思います。SDL_imageではjpeglibやlibpngなどを使いますし、 SDL_mixerではMIDIの演奏にtimidityを使いますし、 SDL_ttfではフォントのレンダリングにfreetypeライブラリを使います。 他のproductとの依存性が強くなってしまいますが、 しかし既にあって実際に使われているものを わざわざ再開発するようなことをせず 共有する方が賢いのだ、というのが作者の方々の考えなのではないでしょうか。

SDLで何ができるか

SDLは、 ゲーム、エミュレータ、デモ、それとマルチメディアなアプリケーション (音源、動画プレイヤなど)の開発に用いられているようです。

SDLが扱うのは、Video、Audio、Events(キーボード、マウス、 ウインドウマネージャからのイベントなど)、 CD-ROM(再生/停止など)、Thread、Timerなどです。 具体的にどういうものなのかはIntro見たり実際にプログラムを見たり 書いたりすればすぐに分かると思います。

Endian Independenceというのも、 multi-platformなLibraryならではですね。 例えば、Little Endianのデータを今動いてるplatformの 変数に格納する、とか、逆に変数内のデータをBig Endianで出力する、 といったような処理をplatformに依存せずに行うことができます。 (というよりそういうふうに作らないとmulti-platformで動かない)

SDLで何がうれしいか

UNIXでは

ゲームがまともに動く、しかもWindowsやMacOSに持っていっても 動く(ように書くのが簡単)、というSDLは、 UNIXユーザにとってまさに待ち望んでいたものではないでしょうか。

ゲームみたいな大がかりなものでなくても、たとえばちょっとした 画像を表示したいとか、音を出したい、というような用事があるときに 使うだけでもずいぶん楽です。

またSDLをグラフィック/オーディオ操作用ライブラリと割切って、 Xlibなどと組み合わせてプログラムを書くというのも、 (SDLプログラミング的には誉められたものじゃないでしょうが) アリかなと思います。 少なくともSDLを使わなかったときに比べればportablitiyは ずいぶん上がっているはずですし。

Windowsでは

既に開発環境と知識が整っている DirectX使いな方にはメリットは少ないかもしれませんが...

メインがUNIXという人にとっては、自分がFreeBSDとかで作った アプリが、再コンパイルだけでWindows上で動くようになるというのは 非常に魅力的でしょう。

なお私はDelphiXでDirectXの世界に触れて、入口でひきかえしてきた人間ですが (DelphiXが云々というより、これ書いてもWindowsでしか動かないんだよなー という感覚がずっとあったのがまずかったらしい)、 SDLは非常に親しみやすいと感じました。ので、もうDirectXのことは 考えずにSDLばかりを使うことに決めています。しかも、 SDLを使うことで結果的にDirectXを使っていることにもなっている わけですから、ありがたすぎます。

あと、Windowsのパワーあるれるプログラマのみなさんが DirectXじゃなくてSDLを好んで触ってくれれば UNIXに移植してみんなで楽しむのも楽なんだけどなー、 という誰にとって得なのかよくわからないメリットも私の頭の中にはあります。

SDLに足りないもの

最も言われているのはドキュメント不足です。 以前はテスト用のサンプルプログラムを眺めて試行錯誤して...というのが わりと当然のように行われていました。 (サンプルが豊富で分かりやすいので なんとかなったりするのですが)

しかしMartin Donlonさんを始めとする方々の精力的な 活動でマニュアルもつきましたし、状況はだいぶよくなったのでは ないかと思います。雑誌にも記事が載っているようですし。


戻る