View
4.021
Download
1
Category
Preview:
Citation preview
SDL2 の紹介
nyaocat
自己紹介
本名 : 楠田 真矢
Twitter : @nyaocatサイト : http://nyaocat.jp/
会社員プログラマ。 C++ と Lua と bash が得意。
最近の仕事は Scala と Javascript 。
C++ ポケットリファレンス著者の一人。
SDL2 の紹介
nyaocat
4本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
5本日の内容
SDL で描画に OpenGL を使う
ファイル以外からデータ読み込み
応用 既存のウィンドウ上で SDL
6本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
7SDL2 とは
オープンソースで
クロスプラットフォームな
マルチメディアライブラリ
8SDL2 オープンソース
ライセンス形態は
zlib ライセンス
かなり条件の緩いライセンス
利用したソフトの配布に謝辞や著作権の表示は不要
ソース頒布時に著作権とライセンスの表記が必要
9SDL2 クロスプラットフォーム
公式に6プラットフォームをサポート
Windows
Mac OS X
Linux
iOS
Android
ブラウザ
これだけでなく、他のプラットフォームにも対応
10
デバイス入力
音出力
画面出力
に対応
SDL2 マルチメディア
11SDL2 が吸収する他の差異
イベント機構
ダイアログ
マルチスレッド
共有ライブラリ読み込み
ファイルシステム
電源状態
12SDL2 活用事例
要するにゲームが作れる多くのゲームが開発されている。
賞を取ったゲームも SDL で開発されてたりする。
動画再生ソフトや Android シミュレー
タリッチな UI が不要なソフトなどでも好まれる。
携帯機での標準 GUI ライブラリとして別環境への移植もそこそこ容易なようだ。
13本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
14SDL2 の特徴
C 言語で開発
C++ からも直に扱える。
多数の他言語バインディングが開発されている。
対応環境の多さ前バージョンの SDL も含むと相当数に上る。
機能がシンプル悪く言えば低機能。
ほぼ各プラットフォーム間の差異の吸収のみ。
15SDL2 を拡張するライブラリ
素の SDL のみで開発を行うのは手間だが、
SDL_image SDL_mixer
SDL_ttf SDL_gfx など
SDL の簡素すぎる機能を拡張し、
そこそこ扱いやすくしてくれるライブラリが存在する。
16本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
17SDL2 と類似ライブラリの比較
似た目的のライブラリも多数!
18SDL2 と類似ライブラリの比較
Siv3DC++ 。 DirectX 。 Windows オンリー。
短いコードで記述できる。日本製。
DX ライブラリC++ 。 DirectX 。
Windows と PS4 と PS Vita 。
API は C 言語的。日本製。
19SDL2 と類似ライブラリの比較
CinderC++ 。 Windows, iOS, OS X 。
短いコードで記述できる。
SFMLC++ 。 OpenGL 。
Windows, Linux, Mac OS X 。
多くのプログラミング言語に対応。
20SDL2 と類似ライブラリの比較
openFrameworks Windows 、 Mac OSX 、 Linux 、
iOS 、 Android 。かなり有名。 C++ 。
Irrlicht EngineC++ 。
海外では人気らしい。
21SDL2 と類似ライブラリの比較
ゲーム用途としては、 SDL2 は
別に多機能でも記述が楽でも無い。
GLUT 、 GLFW の方がライブラリとしては近い。
OpenGL の API が直接叩けたりなど。
SDL は、
長い歴史があること、ユーザ数が多いこと、
本体がシンプルで拡張も容易である点が利点。
22おまけ :SDL1.2 との違い
iOS 、 Android サポート
複数ウィンドウ生成に対応
ハードウェアアクセラレーション描画
垂直同期対応
基本図形描画対応
ディスプレイ解像度フルスクリーン
テキスト入力
23本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
24インストール
Windows(VC++, Mingw), Mac(Xcode)公式サイトから
Development Libraries をダウンロード!
*nix 系環境パッケージマネージャから
libsdl2-dev などの名称でダウンロード!
25本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
26初期化
if (SDL_Init(SDL_INIT_VIDEO) != 0) {std::cerr << SDL_GetError() << std::endl;std::exit(1);
}
SDL_Quit();
初期化
終了
27サブシステム初期化
if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0) {std::cerr << SDL_GetError() << std::endl;
}
SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
サブシステム初期化
サブシステム終了
SDL_WasInit(SDL_INIT_JOYSTICK) == SDL_INIT_JOYSTICK;
初期化確認
28本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
29ウィンドウ・レンダラ
SDL_Window* const window = SDL_CreateWindow("Window Title",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,WINDOW_WIDTH, WINDOW_HEIGHT,SDL_WINDOW_FULLSCREEN_DESKTOP);
SDL_Renderer* const renderer = SDL_CreateRenderer( window, 0, SDL_RENDERER_PRESENTVSYNC);
ウィンドウ初期化
レンダラ作成
30画面描画
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderDrawLine(renderer,10, 10, 400, 400);
SDL_RenderPresent(window);
描画色設定
線を描画
ウィンドウに描画を反映
SDL_RenderClear(renderer);
画面クリア
31本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
32キー入力取得
Uint8 const* keys const = SDL_GetKeyboardState(nullptr)if (keys[SDL_SCANCODE_ESCAPE]) { std::exit(0);}
押されてるキーの取得
33本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
34本日の内容
SDL で描画に OpenGL を使う
ファイル以外からデータ読み込み
応用 既存のウィンドウ上で SDL
35SDL で描画に OpenGL を使う
SDL_Window* const window = SDL_CreateWindow("Window Title",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,WINDOW_WIDTH, WINDOW_HEIGHT,SDL_WINDOW_OPENGL);
SDL_GLContext const context = SDL_GL_CreateContext(window);
SDL_GL_SwapWindow(window);
ウィンドウ初期化
OpenGL コンテキストの作成
ウィンドウに描画を反映
36OpenGL を動的に読み込む
if(SDL_GL_LoadLibrary(nullptr) != 0) { std::cerr << SDL_GetError() << std::endl; std::exit(1);}
auto const glActiveTexureARB = reinterpret_cast<void (APIENTRY *)(unsigned int)>( SDL_GL_GetProcAddress("glActiveTextureARB"));
SDL_GL_UnloadLibrary();
OpenGL ライブラリの読み込み
関数を得る
OpenGL ライブラリの解放
37SDL の描画機能と OpenGL の併用
OpenGL ドライバでレンダラを作成することで可能
int render_index = -1;int const num = SDL_GetNumRenderDrivers();for(int i = 0; i < num; ++i) {
SDL_RendererInfo info;if(SDL_GetRenderDriverInfo(i, &info) != 0)
{if(std::strcmp(info.name, "opengl") != 0) {
render_index = i;}
}}if(render_index < 0) std::exit(1);SDL_Renderer* const renderer =
SDL_CreateRenderer(window, render_index, 0);
38本日の内容
SDL で描画に OpenGL を使う
ファイル以外からデータ読み込み
応用 既存のウィンドウ上で SDL
39既存のウィンドウ上で SDL
ウィンドウハンドルを用いて可能
SDL_Window* SDL_CreateWindowFrom(const void* data);
40本日の内容
SDL で描画に OpenGL を使う
ファイル以外からデータ読み込み
応用 既存のウィンドウ上で SDL
41ファイル以外から読み込み
struct SDL_RWops { Sint64 (*size) (SDL_RWops* context); Sint64 (*seek) (SDL_RWops* context, Sint64 offset, int whence); size_t (*read) (SDL_RWops* context, void *ptr, size_t size, size_t maxnum); size_t (*write) (SDL_RWops* context, const void *ptr, size_t size, size_t num); int (*close) (SDL_RWops* context); Uint32 type; union { struct { void *data1; void *data2; } unknown; } hidden;};
42メモリから読み込み
SDL_RWops* SDL_RWFromMem(void* mem, int size)SDL_RWops* SDL_RWFromConstMem(const void* mem, int size)
43本日の内容
SDL で描画に OpenGL を使う
ファイル以外からデータ読み込み
応用 既存のウィンドウ上で SDL
44本日の内容
SDL2 とは
他ライブラリとの比較
SDL2 に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
Recommended