SlideShare a Scribd company logo
1 of 44
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ライブラリとして
別環境への移植もそこそこ容易なようだ。
12
本日の内容 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は、
長い歴史があること、ユーザ数が多いこと、
本体がシンプルで拡張も容易である点が利点。
21
おまけ:SDL1.2との違い
iOS、Androidサポート
複数ウィンドウ生成に対応
ハードウェアアクセラレーション描画
垂直同期対応
基本図形描画対応
ディスプレイ解像度フルスクリーン
テキスト入力
22
本日の内容 23
SDL2とは
他ライブラリとの比較
SDL2に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴
インストール
Windows(VC++, Mingw), Mac(Xcode)
公式サイトから
Development Librariesをダウンロード!
*nix系環境
パッケージマネージャから
libsdl2-dev などの名称でダウンロード!
24
本日の内容 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
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コンテキストの作成
ウィンドウに描画を反映
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ライブラリの解放
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
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, 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に関連する応用的な話題
初期化
入力
紹介
実践
応用
インストール
簡単な描画
特徴

More Related Content

What's hot

中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装MITSUNARI Shigeo
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライドCEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライドToshiyasu Miyabe
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編Unity Technologies Japan K.K.
 
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングシェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングSho Hosoda
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカットTsubasa Hirakawa
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門増田 亨
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
型安全性入門
型安全性入門型安全性入門
型安全性入門Akinori Abe
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 

What's hot (20)

ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライドCEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
 
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングシェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカット
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 

Similar to SDL2の紹介

Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後Kota Mizushima
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!K Kinzal
 
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...Insight Technology, Inc.
 
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosXcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosTomohiro Kumagai
 
Xcode4 project template (slide)
Xcode4 project template (slide)Xcode4 project template (slide)
Xcode4 project template (slide)Wataru Kimura
 
プロダクトにおけるScala
プロダクトにおけるScalaプロダクトにおけるScala
プロダクトにおけるScalaYuto Suzuki
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5Jiro Hiraiwa
 
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話hirotakanosato
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekKazuhiro Sera
 
MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめKenichi Sonoda
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作terurou
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.jsYuto Suzuki
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5Takahiro YAMADA
 
Xcodeにおけるライブラリの活用
Xcodeにおけるライブラリの活用Xcodeにおけるライブラリの活用
Xcodeにおけるライブラリの活用teencoders
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 

Similar to SDL2の紹介 (20)

Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
 
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosXcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
 
Xcode4 project template (slide)
Xcode4 project template (slide)Xcode4 project template (slide)
Xcode4 project template (slide)
 
プロダクトにおけるScala
プロダクトにおけるScalaプロダクトにおけるScala
プロダクトにおけるScala
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
 
Spring4Dの紹介
Spring4Dの紹介Spring4Dの紹介
Spring4Dの紹介
 
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
 
MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめ
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
Xcodeにおけるライブラリの活用
Xcodeにおけるライブラリの活用Xcodeにおけるライブラリの活用
Xcodeにおけるライブラリの活用
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 

Recently uploaded

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

SDL2の紹介

Editor's Notes

  1. オープンソースなクロスプラットフォームマルチメディアライブラリであるSDL2の紹介
  2. 最近24歳になった サイトには自作wikiを使用 つくりかけてはすぐ飽きて放置する性質。 最近はバイナリハックスよんでバイナリにはまってる
  3. 改めて
  4. 本日の内容です 最初にSDL2自体の紹介を、次に簡単な使い方をごく一部、最後に応用的なことを少々話します。
  5. 応用的な内容です。
  6. ではまず最初に。
  7. この一言で紹介が済んでしまう 急に意識高くなったわけではなく、ちょうどよい日本語訳がない。 なお、Simple DirecMedia Layerが正式名称 libsdl.org
  8. ちなみに、前のバージョンである SDL1.2 では GNU LGPL ライセンスだった。そのため、もっぱらDSO(DLL)として利用されていたと聞く。もっとも、SDL2でもスタティックリンクライブラリをビルドするのが難しいのと、別にスタティックリンクにする利点もないのであまりそうされてはいないのではないか。
  9. 他プラットフォーム対応はソースコード中に見ることができる。 Haiku(OpenBeOS)、Mir(displayProtocol),wayland(displayProtocol),Pandora(オープンな携帯ゲーム機、組み込みLinuxマシン。GP2Xの後継)、PSP(PSP)、raspberry pi(小型linuxボード)
  10. デバイスは、マウス、キーボード、ゲームパッド、ジョイスティック。 音はかなり自由に好きに波形からいじれる。 画面は対応プラットフォームにより様々だが、ハードウェアアクセラレータも利用できる。
  11. イベント機構はシンプルなもの。C言語なので……。マルチスレッドもシンプルだが一応ミューテックス条件変数アトミック操作など一通りはそろっている。C++的にはstd::threadを使えばよいのでまぁいらないですが。電源状態は取得のこと。
  12. 公式サイトのトップページでSDL製のゲームがランダムに紹介される。Steamのクロスプラットフォーム対応ゲームで多いらしい? エミュレータでも使用例あり。携帯機はpandoraとかgp2x(移植)とか。最後に話すがビデオ層の拡張さえすればよいので比較的楽。SDLをラップして作られたゲームライブラリなども。
  13. 公式では多言語対応は行っていない。Ada,C#,Lua,Ocaml,Pascal,Pythonが紹介されてる。erlang,ruby,commonlispなどもある。とにかく素直なC言語なので楽。 残念ながら前バージョンのSDLについてはサイトからドキュメントが消失してるので詳細を上げられない。機能のシンプルさは本当にシンプルなので、多分色々な人がついついラッピングしたくなるし実際多くのライブラリがあふれてる。
  14. というかゲーム用途ならばimage, mixer はほぼ必須になるかもしれない。ttfは文字列描画を行わせる機能だが、毎回文字列を描画するのにはむかない、遅い欠点あり。まぁOpenGLつかってるとそうなりそうですが。SDL1.2用だがそこを改良したSDL_kanjiがあったりした。ADCII文字のみならばgfxに固定フォントで描画する巻子が容易されている。gfxは便利関数群みたいなライブラリで、FPSタイマや円の描画などがある。
  15. DXライブラリ、それもはやDXじゃないやん
  16. ofはネーミングがややこしいのが個人的に気にかかる。最初はこれ自体がライブラリなのだと認識できなかった。芸術大学などでも使われているらしい。
  17. 私は大学のOpenGLの課題のときにSDL1.2を使いました。歴史は具体的な年数がいまいちわからず……
  18. SDL1.2のときはとくに描画機能が弱く、ハードウェアアクセラレータなし、垂直同期なし、画素集合の転送しかできなかった。もっとも、それだけで作られたゲームも aba games で公開されてて普通に遊べるんですが。テキスト入力とは、画面上でテキスト入力ボックスを出してユーザ環境のIMEを利用して入力させることができる機能。すごい。まだ試してない。複数ウィンドウ対応はemscriptenやandroid、iosではたぶんうごかないんでしょう。
  19. 構成プロパティの追加のインクルードディレクトリ、ライブラリディレクトリに設定し、追加のインストールライブラリで sdl を設定。*nix系環境ならばソースからコンパイルしてインストールももちろん良い。sdl2-configかpkg-config SDL2 を使う。pkg-configの方が、sdl_imageなども一括で指定できるしおすすめ。
  20. システム部分にはSDL_INIT_TIMERタイマ サブシステムSDL_INIT_AUDIOオーディオ サブシステムSDL_INIT_VIDEOビデオ サブシステムSDL_INIT_JOYSTICKジョイスティック サブシステムSDL_INIT_HAPTICハプティクス(感覚フィードバック) サブシステムSDL_INIT_GAMECONTROLLERコントローラー サブシステムSDL_INIT_EVENTSが入れられる。全部指定ももちろん可能。
  21. 一見使い道が思いつかないかもしれないが例えばジョイスティックを終了して再度初期化すると起動中に新しく繋がれたジョイスティックとかも検知できる
  22. 移行レンダラ経由で描画を行うことになる。ウィンドウ初期化、レンダラ作成を一括で行う関数もあるがそちらだとパラメータを与えられない。
  23. イベント形式で入力を受け取ることもできる
  24. あとはOpenGLの関数がガンガン使える。SDL1.2のときはこっちがむしろ主流な描画方法扱いだった。コンテキストは切り替えたりもできるが特殊なことをするのでもないかぎり変数に保持せずともよいっぽい
  25. OpenGLのうむを起動後にチェックして使うかどうかを決めるのには良いかもしれないが面倒だと思う
  26. 基本的に3Dだがインターフェースを2Dで出したいときに便利かもしれない。glの設定によってはうまくいかないかもしれないがいまいち詳細不明
  27. これを使って wxWidgets と組み合わせて UI つきの SDL とかもくめたりする。少々バグがまだのこっていたり、OSや環境依存の指定が必要になることもある。面白いが絶対必要でもないかぎりやらない方がよい。gtk::socketににたようなのがあるのでそれと組み合わせ可能。
  28. ビデオドライバを拡張する話,love2dの話