SDLライブラリ-概要

画像
この記事では、クロスプラットフォームマルチメディアアプリケーションを作成するための非常に便利なオープンソースSDLライブラリ(Simple DirectMedia Library)の概要を簡単に説明します。 ハブでは、ほとんど言及されていなかったので、この「ギャップ」を埋めたいと思います。

イントロ


SDLは 、2Dおよび3Dレンダリング、オーディオ再生、入力デバイス(マウス、キーボード、ジョイスティック)の処理などのハードウェア機能にアクセスするためのプラットフォームに依存しない低レベルAPIを提供するツールとして位置付けられています。 Libaは主にクロスプラットフォームゲームの開発に携わる人にとって有用ですが、同じ成功を収めて、たとえばビデオやオーディオプレーヤー、エミュレーターなどのプログラムで使用することができます。 上記の機能に加えて、SDLにはマルチスレッド、ファイル、タイマー、CD / DVDドライブを操作するためのツールがあります。 これにより、グラフィックやサウンドの再生に関連しないプロジェクトでもlibを使用できます。

SDLは多くのプラットフォームに移植されています。 Windows、Linux、およびMac OS(X)に加えて、Solaris、IRIX、* BSDなどにもポートがあります。 完全なリストはプロジェクトのメインページにあり 、以下を含む多くのプログラミング言語へのバインディングもリストしています。 スクリプト化。
GNU LGPLライセンスの下で配布されます。 開発者によると、現在のバージョン1.2.14は多くのバグを修正するためにリリースされたもので、1.2ブランチの最後であり、次のものは1.3になります。

インストールとAPIについて少し


すべてのプラットフォームについて、必要なファイルはオフィスでダウンロードできます。 Linuxの場合は、カブでlibを検索することもできます(少なくともUbuntuではlibsdl-devパッケージで見つけました)。 ソースはアーカイブまたはsvnで入手できます。
SDL自体をインストールする必要はありません。 通常、動的ライブラリの形式で接続されます。プログラムとともに配布するには、単一の.soファイル(.dll)を添付するだけで十分です。

SDLはCで記述されています。インターフェイスは関数とマクロで構成されていますが、そのリストはそれほど大きくなく、学習も難しくありません。 APIプロジェクトwikiでは、関数とデータ型がアルファベット順とカテゴリ別にグループ化されているため、必要なものをほとんど問題なく見つけることができます。

小さな例


以下は、SDLを使用したプログラムの簡単な例です。

#include <SDL/SDL.h>

int main()
{
// SDL (, )
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) < 0)
return 1;
//
SDL_putenv( "SDL_VIDEO_CENTERED=true" );
// . , 800x600@16 OpenGL
SDL_Surface *surface = SDL_SetVideoMode(800, 600, 16, SDL_DOUBLEBUF | SDL_OPENGL);
if (surface == NULL)
return 1;
//
SDL_Event evt;
bool stop = false ;
while (!stop)
{
//
while (SDL_PollEvent(&evt))
{
switch (evt.type)
{
case SDL_KEYDOWN:
// Esc...
if (evt.key.keysym.sym == SDLK_ESCAPE)
stop = true ;
case SDL_QUIT:
// ...
stop = true ;
default :;
}
}
//
// ...
// GL
SDL_GL_SwapBuffers();
}
// SDL
SDL_Quit();
return 0;
}

* This source code was highlighted with Source Code Highlighter .


ロシア語でコメントを書くのは私にとっては珍しいことですが、おそらく誰もが英語が得意ではないので、念のためにそのようにしましょう

コードを確認します。 まず、必要なサブシステムを初期化します。 この場合、これはビデオ、オーディオ、およびタイミングです。 その後、作成されたビデオコンテキストを返すSDL_SetVideoMode()関数を使用して、ビデオモードを個別に設定します。 彼女はまた、パートタイムでレンダリングを行うウィンドウを作成します。 初期化フラグは多数あり、完全なリストはwikiにあります。
予備設定の後、プログラムのメイン作業サイクルに進みます。 各反復で、発生したイベントに関するキューから情報を抽出し、その後フレームバッファを交換します(ダブルバッファリングが有効になっています)。 これら2つのアクションの間に、たとえばアニメーションの別のフレームを描くなど、より意味のあるものを作成できます。 このサイクルは、ウィンドウが閉じられるか、Escキーが押されるまで実行されます。 シャットダウンする前に、すべてのSDLサブシステムを閉じるSDL_Quit()関数を呼び出します。
この例からわかるように、SDL APIは非常にシンプルであり、システムの作業準備は数行で済み、イベント処理サイクルはWindowsプログラムの標準的なメッセージ処理サイクルに似ています。

アウトロ


最後に、いくつかの追加の点に注意します。

以上です。 このレビューは非常に表面的なものであることが判明しましたが、マルチメディアアプリケーションの開発に関心のある分野で、このライブラリについて聞いたことがない人には役立つと思います。

Source: https://habr.com/ru/post/J83927/


All Articles