9
5

More than 3 years have passed since last update.

SDL2を少しだけ触ってみた

Posted at

某技術書典で購入した本にSDL2を使用するページがあったのと多分今後も使うことになると思うので、メモついでに環境構築手順とかを書き残しておこうと思う。

SDLとは

  • Simple DirectMedia Layerの略
  • SDL2というのはメジャーバージョンの数字だと思う
  • SDL 2.0のライセンスはzlib license(バージョン1.XはLGPLライセンスだったっぽい)
  • 音声・入力・グラフィクスあたりの制御をサポートしてくれる
  • クロスプラットフォームで複数OSに対応
  • Cで書かれたオープンソース

昔触ったときは単純にOpenGLの拡張ライブラリに変わる便利系ライブラリという認識だったけど、一概にそうとも言い切れないっぽい。
調べた感じだとVulkanなんかにも対応しているようなので、やっぱり今後もお世話になる気がした。
詳しくは日本語リファレンスがあるのでそちらを参照するといいかも(http://sdl2referencejp.osdn.jp/)

開発環境

OS Windows10
エディタ Visual Studio 2019
SDL SDL2-2.0.10

環境構築手順

ビルド

  1. ソースコード配布ページからコードをダウンロード(zip落とした)
  2. zip解凍してVisualC\SDL.sln開く
  3. ソリューションのビルド実行
  4. VisualC\Win32(Debug or Release)フォルダ直下にSDL2.libが生成されているので使用するプロジェクトに突っ込む
  5. 該当のプロジェクト側で良い感じに設定する

実際のコードは「SDL2 入門」とかで調べると関数の使い方から何をしているかまで細かく書いてあるのでそっちを参照する感じで。

わからなかったところ

SDLmainとは?

各種セットアップが終わった時点で一旦ビルドをかけてみたところ、エントリーポイントの未定義でおこられた。
SDLビルド時に一緒に出力されたSDL2main.libを追加することで対処できた。
原因としてはSDL_main.hでmainをSDLmainという名前に置き換えるマクロが定義されていて、実際のエントリポイント自体は別ファイルに記述されていた。そのエントリポイントの中身でSDL2main.libに定義されている関数が使用されていたりでエラーを吐いていたっぽい。
じゃあSDL2main.libとはなんなのかという話だが、ユーザー側でWinMain関数を定義しなくてもコードが組めるようになるというもの。要はWindowsに依存しないコードを組める便利なもの。(という認識...)
詳細はSDL_windows_main.cファイルというのがsrc/main/windowsフォルダ直下に存在するので是非目を通して欲しい。

サブシステム

SDLはサブシステムという概念が存在していて、上記で紹介した音声や入力、グラフィックなどがそれぞれ該当する

SDL_init関数の引数

基本SDL_INIT_EVERYTHINGですべてのサブシステムを初期化してくれるっぽい。
個別に指定することもできるけど今の所使う場面に出会っていないので、特に調べていない。

SDL_CreateWindow関数

文字通りウィンドウを作成してくれる

引数名 概要
title ウィンドウのタイトル
x ウィンドウの座標(Define)
y ウィンドウのY座標(Define)
w ウィンドウの横幅(px)
h ウィンドウの縦幅(px)
flags SDL_WindowFlags

戻り地 SDL_Window*

SDL_CreateRenderer関数

レンダリングコンテキストを作成してくれる

引数名 概要
window SDL_CreateWindowで作成した戻り値
index ドライバの指定 -1をセットすることでいい感じにやってくれる
flags SDL_RendererFlags

SDL_RenderClear関数

現在のレンダーターゲットを色で塗りつぶして消去する
SDL_SetRenderDrawColorで色指定が可能っぽい

SDL_RenderPresent関数

レンダリングの結果を画面に反映する
ダブルバッファとかそういうアレだと思っている

その他参考にしたページ

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5