Submit Search
SDL2の紹介
Download as PPTX, PDF
8 likes
16,813 views
N
nyaocat
Boost.勉強会 #19 東京で発表に用いた資料です。
Technology
Read more
1 of 44
Download now
Downloaded 26 times
1
2
3
4
5
6
7
8
Most read
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Most read
31
32
33
34
35
36
37
38
39
40
41
42
Most read
43
44
More Related Content
PDF
Tackling Complexity
Yoshitaka Kawashima
PPTX
C#とILとネイティブと
信之 岩永
PDF
ゲーム開発者のための C++11/C++14
Ryo Suzuki
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
PDF
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
PDF
闇魔術を触ってみた
Satoshi Sato
PDF
プログラミングコンテストでの動的計画法
Takuya Akiba
PDF
できる!並列・並行プログラミング
Preferred Networks
Tackling Complexity
Yoshitaka Kawashima
C#とILとネイティブと
信之 岩永
ゲーム開発者のための C++11/C++14
Ryo Suzuki
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
闇魔術を触ってみた
Satoshi Sato
プログラミングコンテストでの動的計画法
Takuya Akiba
できる!並列・並行プログラミング
Preferred Networks
What's hot
(20)
PDF
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
PPTX
Redisの特徴と活用方法について
Yuji Otani
PPTX
純粋関数型アルゴリズム入門
Kimikazu Kato
PDF
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
PPTX
世界一わかりやすいClean Architecture
Atsushi Nakamura
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
PDF
Pythonによる黒魔術入門
大樹 小倉
PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
PDF
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
PDF
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
Kazuhito Miura
PDF
DockerとPodmanの比較
Akihiro Suda
PDF
イミュータブルデータモデルの極意
Yoshitaka Kawashima
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
PDF
規格書で読むC++11のスレッド
Kohsuke Yuasa
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
PDF
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
PDF
BERT入門
Ken'ichi Matsui
PDF
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
You_Kinjoh
PDF
キメるClojure
Yoshitaka Kawashima
PDF
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
Redisの特徴と活用方法について
Yuji Otani
純粋関数型アルゴリズム入門
Kimikazu Kato
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
世界一わかりやすいClean Architecture
Atsushi Nakamura
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Pythonによる黒魔術入門
大樹 小倉
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
Kazuhito Miura
DockerとPodmanの比較
Akihiro Suda
イミュータブルデータモデルの極意
Yoshitaka Kawashima
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
規格書で読むC++11のスレッド
Kohsuke Yuasa
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
BERT入門
Ken'ichi Matsui
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
You_Kinjoh
キメるClojure
Yoshitaka Kawashima
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
Ad
SDL2の紹介
1.
SDL2の紹介 nyaocat
2.
自己紹介 本名 : 楠田
真矢 Twitter: @nyaocat サイト : http://nyaocat.jp/ 会社員プログラマ。C++ と Lua と bash が得意。 最近の仕事は Scala と Javascript。 C++ポケットリファレンス著者の一人。
3.
SDL2の紹介 nyaocat
4.
本日の内容 4 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
5.
本日の内容 5 SDLで描画にOpenGLを使う ファイル以外からデータ読み込み 応用 既存のウィンドウ上でSDL
6.
本日の内容 6 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
7.
SDL2とは オープンソースで クロスプラットフォームな マルチメディアライブラリ 7
8.
SDL2 オープンソース ライセンス形態は zlibライセンス かなり条件の緩いライセンス 利用したソフトの配布に謝辞や著作権の表示は不要 ソース頒布時に著作権とライセンスの表記が必要 8
9.
SDL2 クロスプラットフォーム 公式に6プラットフォームをサポート 9 Windows Mac OS
X Linux iOS Android ブラウザ これだけでなく、他のプラットフォームにも対応
10.
デバイス入力 音出力 画面出力 に対応 SDL2 マルチメディア 10
11.
SDL2が吸収する他の差異 11 イベント機構 ダイアログ マルチスレッド 共有ライブラリ読み込み ファイルシステム 電源状態
12.
SDL2 活用事例 要するにゲームが作れる 多くのゲームが開発されている。 賞を取ったゲームもSDLで開発されてたりする。 動画再生ソフトやAndroidシミュレータ リッチなUIが不要なソフトなどでも好まれる。 携帯機での標準GUIライブラリとして 別環境への移植もそこそこ容易なようだ。 12
13.
本日の内容 13 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
14.
SDL2の特徴 C言語で開発 C++からも直に扱える。 多数の他言語バインディングが開発されている。 対応環境の多さ 前バージョンのSDLも含むと相当数に上る。 機能がシンプル 悪く言えば低機能。 ほぼ各プラットフォーム間の差異の吸収のみ。 14
15.
SDL2を拡張するライブラリ 素のSDLのみで開発を行うのは手間だが、 SDL_image SDL_mixer SDL_ttf SDL_gfx
など SDLの簡素すぎる機能を拡張し、 そこそこ扱いやすくしてくれるライブラリが存在する。 15
16.
本日の内容 16 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
17.
SDL2と類似ライブラリの比較 似た目的のライブラリも多数! 17
18.
SDL2と類似ライブラリの比較 Siv3D C++。DirectX。Windowsオンリー。 短いコードで記述できる。日本製。 DXライブラリ C++。 DirectX。 WindowsとPS4とPS Vita。 APIはC言語的。日本製。 18
19.
SDL2と類似ライブラリの比較 Cinder C++。Windows, iOS, OS
X。 短いコードで記述できる。 SFML C++。 OpenGL。 Windows, Linux, Mac OS X。 多くのプログラミング言語に対応。 19
20.
SDL2と類似ライブラリの比較 openFrameworks Windows、Mac OSX、Linux、 iOS、Android。かなり有名。C++。 Irrlicht Engine C++。 海外では人気らしい。 20
21.
SDL2と類似ライブラリの比較 ゲーム用途としては、SDL2は 別に多機能でも記述が楽でも無い。 GLUT、GLFWの方がライブラリとしては近い。 OpenGLのAPIが直接叩けたりなど。 SDLは、 長い歴史があること、ユーザ数が多いこと、 本体がシンプルで拡張も容易である点が利点。 21
22.
おまけ:SDL1.2との違い iOS、Androidサポート 複数ウィンドウ生成に対応 ハードウェアアクセラレーション描画 垂直同期対応 基本図形描画対応 ディスプレイ解像度フルスクリーン テキスト入力 22
23.
本日の内容 23 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
24.
インストール Windows(VC++, Mingw), Mac(Xcode) 公式サイトから Development
Librariesをダウンロード! *nix系環境 パッケージマネージャから libsdl2-dev などの名称でダウンロード! 24
25.
本日の内容 25 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
26.
初期化 26 if (SDL_Init(SDL_INIT_VIDEO)
!= 0) { std::cerr << SDL_GetError() << std::endl; std::exit(1); } SDL_Quit(); 初期化 終了
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 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
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 SDL_SetRenderDrawColor(renderer, 0,
0, 0, 255); SDL_RenderDrawLine(renderer,10, 10, 400, 400); SDL_RenderPresent(window); 描画色設定 線を描画 ウィンドウに描画を反映 SDL_RenderClear(renderer); 画面クリア
31.
本日の内容 31 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
32.
キー入力取得 32 Uint8 const*
keys const = SDL_GetKeyboardState(nullptr) if (keys[SDL_SCANCODE_ESCAPE]) { std::exit(0); } 押されてるキーの取得
33.
本日の内容 33 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
34.
本日の内容 34 SDLで描画にOpenGLを使う ファイル以外からデータ読み込み 応用 既存のウィンドウ上でSDL
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.
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.
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 SDLで描画にOpenGLを使う ファイル以外からデータ読み込み 応用 既存のウィンドウ上でSDL
39.
既存のウィンドウ上でSDL ウィンドウハンドルを用いて可能 39 SDL_Window* SDL_CreateWindowFrom(const void* data);
40.
本日の内容 40 SDLで描画にOpenGLを使う ファイル以外からデータ読み込み 応用 既存のウィンドウ上でSDL
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 SDL_RWops* SDL_RWFromMem(void*
mem, int size) SDL_RWops* SDL_RWFromConstMem(const void* mem, int size)
43.
本日の内容 43 SDLで描画にOpenGLを使う ファイル以外からデータ読み込み 応用 既存のウィンドウ上でSDL
44.
本日の内容 44 SDL2とは 他ライブラリとの比較 SDL2に関連する応用的な話題 初期化 入力 紹介 実践 応用 インストール 簡単な描画 特徴
Editor's Notes
#2:
オープンソースなクロスプラットフォームマルチメディアライブラリであるSDL2の紹介
#3:
最近24歳になった サイトには自作wikiを使用 つくりかけてはすぐ飽きて放置する性質。 最近はバイナリハックスよんでバイナリにはまってる
#4:
改めて
#5:
本日の内容です 最初にSDL2自体の紹介を、次に簡単な使い方をごく一部、最後に応用的なことを少々話します。
#6:
応用的な内容です。
#7:
ではまず最初に。
#8:
この一言で紹介が済んでしまう 急に意識高くなったわけではなく、ちょうどよい日本語訳がない。 なお、Simple DirecMedia Layerが正式名称 libsdl.org
#9:
ちなみに、前のバージョンである SDL1.2 では GNU LGPL ライセンスだった。そのため、もっぱらDSO(DLL)として利用されていたと聞く。もっとも、SDL2でもスタティックリンクライブラリをビルドするのが難しいのと、別にスタティックリンクにする利点もないのであまりそうされてはいないのではないか。
#10:
他プラットフォーム対応はソースコード中に見ることができる。 Haiku(OpenBeOS)、Mir(displayProtocol),wayland(displayProtocol),Pandora(オープンな携帯ゲーム機、組み込みLinuxマシン。GP2Xの後継)、PSP(PSP)、raspberry pi(小型linuxボード)
#11:
デバイスは、マウス、キーボード、ゲームパッド、ジョイスティック。 音はかなり自由に好きに波形からいじれる。 画面は対応プラットフォームにより様々だが、ハードウェアアクセラレータも利用できる。
#12:
イベント機構はシンプルなもの。C言語なので……。マルチスレッドもシンプルだが一応ミューテックス条件変数アトミック操作など一通りはそろっている。C++的にはstd::threadを使えばよいのでまぁいらないですが。電源状態は取得のこと。
#13:
公式サイトのトップページでSDL製のゲームがランダムに紹介される。Steamのクロスプラットフォーム対応ゲームで多いらしい? エミュレータでも使用例あり。携帯機はpandoraとかgp2x(移植)とか。最後に話すがビデオ層の拡張さえすればよいので比較的楽。SDLをラップして作られたゲームライブラリなども。
#15:
公式では多言語対応は行っていない。Ada,C#,Lua,Ocaml,Pascal,Pythonが紹介されてる。erlang,ruby,commonlispなどもある。とにかく素直なC言語なので楽。 残念ながら前バージョンのSDLについてはサイトからドキュメントが消失してるので詳細を上げられない。機能のシンプルさは本当にシンプルなので、多分色々な人がついついラッピングしたくなるし実際多くのライブラリがあふれてる。
#16:
というかゲーム用途ならばimage, mixer はほぼ必須になるかもしれない。ttfは文字列描画を行わせる機能だが、毎回文字列を描画するのにはむかない、遅い欠点あり。まぁOpenGLつかってるとそうなりそうですが。SDL1.2用だがそこを改良したSDL_kanjiがあったりした。ADCII文字のみならばgfxに固定フォントで描画する巻子が容易されている。gfxは便利関数群みたいなライブラリで、FPSタイマや円の描画などがある。
#19:
DXライブラリ、それもはやDXじゃないやん
#21:
ofはネーミングがややこしいのが個人的に気にかかる。最初はこれ自体がライブラリなのだと認識できなかった。芸術大学などでも使われているらしい。
#22:
私は大学のOpenGLの課題のときにSDL1.2を使いました。歴史は具体的な年数がいまいちわからず……
#23:
SDL1.2のときはとくに描画機能が弱く、ハードウェアアクセラレータなし、垂直同期なし、画素集合の転送しかできなかった。もっとも、それだけで作られたゲームも aba games で公開されてて普通に遊べるんですが。テキスト入力とは、画面上でテキスト入力ボックスを出してユーザ環境のIMEを利用して入力させることができる機能。すごい。まだ試してない。複数ウィンドウ対応はemscriptenやandroid、iosではたぶんうごかないんでしょう。
#25:
構成プロパティの追加のインクルードディレクトリ、ライブラリディレクトリに設定し、追加のインストールライブラリで sdl を設定。*nix系環境ならばソースからコンパイルしてインストールももちろん良い。sdl2-configかpkg-config SDL2 を使う。pkg-configの方が、sdl_imageなども一括で指定できるしおすすめ。
#27:
システム部分にはSDL_INIT_TIMERタイマ サブシステムSDL_INIT_AUDIOオーディオ サブシステムSDL_INIT_VIDEOビデオ サブシステムSDL_INIT_JOYSTICKジョイスティック サブシステムSDL_INIT_HAPTICハプティクス(感覚フィードバック) サブシステムSDL_INIT_GAMECONTROLLERコントローラー サブシステムSDL_INIT_EVENTSが入れられる。全部指定ももちろん可能。
#28:
一見使い道が思いつかないかもしれないが例えばジョイスティックを終了して再度初期化すると起動中に新しく繋がれたジョイスティックとかも検知できる
#30:
移行レンダラ経由で描画を行うことになる。ウィンドウ初期化、レンダラ作成を一括で行う関数もあるがそちらだとパラメータを与えられない。
#33:
イベント形式で入力を受け取ることもできる
#36:
あとはOpenGLの関数がガンガン使える。SDL1.2のときはこっちがむしろ主流な描画方法扱いだった。コンテキストは切り替えたりもできるが特殊なことをするのでもないかぎり変数に保持せずともよいっぽい
#37:
OpenGLのうむを起動後にチェックして使うかどうかを決めるのには良いかもしれないが面倒だと思う
#38:
基本的に3Dだがインターフェースを2Dで出したいときに便利かもしれない。glの設定によってはうまくいかないかもしれないがいまいち詳細不明
#40:
これを使って wxWidgets と組み合わせて UI つきの SDL とかもくめたりする。少々バグがまだのこっていたり、OSや環境依存の指定が必要になることもある。面白いが絶対必要でもないかぎりやらない方がよい。gtk::socketににたようなのがあるのでそれと組み合わせ可能。
#45:
ビデオドライバを拡張する話,love2dの話
Download