Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
SDL2とは
オープンソースで
クロスプラットフォームな
マルチメディアライブラリ
7
SDL2 オープンソース
ライセンス形態は
zlibライセンス
かなり条件の緩いライセンス
利用したソフトの配布に謝辞や著作権の表示は不要
ソース頒布時に著作権とライセンスの表記が必要
8
SDL2 クロスプラットフォーム
公式に6プラットフォームをサポート
9
Windows
Mac OS X
Linux
iOS
Android
ブラウザ
これだけでなく、他のプラットフォームにも対応
デバイス入力
音出力
画面出力
に対応
SDL2 マルチメディア 10
SDL2が吸収する他の差異 11
イベント機構
ダイアログ
マルチスレッド
共有ライブラリ読み込み
ファイルシステム
電源状態
SDL2 活用事例
要するにゲームが作れる
多くのゲームが開発されている。
賞を取ったゲームもSDLで開発されてたりする。
動画再生ソフトやAndroidシミュレータ
リッチなUIが不要なソフトなどでも好まれる。
携帯機での標準GUIライブラリ...
本日の内容 13
SDL2とは
他ライブラリとの比較
SDL2に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
SDL2の特徴
C言語で開発
C++からも直に扱える。
多数の他言語バインディングが開発されている。
対応環境の多さ
前バージョンのSDLも含むと相当数に上る。
機能がシンプル
悪く言えば低機能。
ほぼ各プラットフォーム間の差異の吸収のみ。
14
SDL2を拡張するライブラリ
素のSDLのみで開発を行うのは手間だが、
SDL_image SDL_mixer
SDL_ttf SDL_gfx など
SDLの簡素すぎる機能を拡張し、
そこそこ扱いやすくしてくれるライブラリが存在する。
15
本日の内容 16
SDL2とは
他ライブラリとの比較
SDL2に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
SDL2と類似ライブラリの比較
似た目的のライブラリも多数!
17
SDL2と類似ライブラリの比較
Siv3D
C++。DirectX。Windowsオンリー。
短いコードで記述できる。日本製。
DXライブラリ
C++。 DirectX。
WindowsとPS4とPS Vita。
APIはC言語的。日本製。
18
SDL2と類似ライブラリの比較
Cinder
C++。Windows, iOS, OS X。
短いコードで記述できる。
SFML
C++。 OpenGL。
Windows, Linux, Mac OS X。
多くのプログラミング言語に対応。
19
SDL2と類似ライブラリの比較
openFrameworks
Windows、Mac OSX、Linux、
iOS、Android。かなり有名。C++。
Irrlicht Engine
C++。
海外では人気らしい。
20
SDL2と類似ライブラリの比較
ゲーム用途としては、SDL2は
別に多機能でも記述が楽でも無い。
GLUT、GLFWの方がライブラリとしては近い。
OpenGLのAPIが直接叩けたりなど。
SDLは、
長い歴史があること、ユーザ数が多いこと、
...
おまけ:SDL1.2との違い
iOS、Androidサポート
複数ウィンドウ生成に対応
ハードウェアアクセラレーション描画
垂直同期対応
基本図形描画対応
ディスプレイ解像度フルスクリーン
テキスト入力
22
本日の内容 23
SDL2とは
他ライブラリとの比較
SDL2に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
インストール
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_QuitSubSyste...
本日の内容 28
SDL2とは
他ライブラリとの比較
SDL2に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
ウィンドウ・レンダラ 29
SDL_Window* const window = SDL_CreateWindow(
"Window Title",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,...
画面描画 30
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderDrawLine(renderer,10, 10, 400, 400);
SDL_RenderPresent(w...
本日の内容 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
SDLで描画にOpenGLを使う 35
SDL_Window* const window = SDL_CreateWindow(
"Window Title",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CEN...
OpenGLを動的に読み込む 36
if(SDL_GL_LoadLibrary(nullptr) != 0) {
std::cerr << SDL_GetError() << std::endl;
std::exit(1);
}
auto co...
SDLの描画機能とOpenGLの併用
OpenGLドライバでレンダラを作成することで可能
37
int render_index = -1;
int const num = SDL_GetNumRenderDrivers();
for(int ...
本日の内容 38
SDLで描画にOpenGLを使う
ファイル以外からデータ読み込み
応用 既存のウィンドウ上でSDL
既存のウィンドウ上でSDL
ウィンドウハンドルを用いて可能
39
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,...
メモリから読み込み 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に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
Upcoming SlideShare
Loading in …5
×

SDL2の紹介

11,431 views

Published on

Boost.勉強会 #19 東京で発表に用いた資料です。

Published in: Technology
  • Dating direct: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

SDL2の紹介

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

×