SlideShare a Scribd company logo
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

CRC-32
CRC-32CRC-32
CRC-32
7shi
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
gree_tech
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
Yuki Mizuno
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
7shi
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Tomoya Hibi
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
 
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれいまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
lestrrat
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
信之 岩永
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
 
マーク&スイープ勉強会
マーク&スイープ勉強会マーク&スイープ勉強会
マーク&スイープ勉強会
7shi
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
 

What's hot (20)

CRC-32
CRC-32CRC-32
CRC-32
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれいまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
Java8でRDBMS作ったよ
Java8でRDBMS作ったよJava8でRDBMS作ったよ
Java8でRDBMS作ったよ
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
マーク&スイープ勉強会
マーク&スイープ勉強会マーク&スイープ勉強会
マーク&スイープ勉強会
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 

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
 
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 ~...
Insight Technology, Inc.
 
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosXcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
Tomohiro Kumagai
 
Xcode4 project template (slide)
Xcode4 project template (slide)Xcode4 project template (slide)
Xcode4 project template (slide)
Wataru Kimura
 
プロダクトにおけるScala
プロダクトにおけるScalaプロダクトにおけるScala
プロダクトにおけるScala
Yuto Suzuki
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
 
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話
hirotakanosato
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro 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.js
Yuto Suzuki
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
Xcodeにおけるライブラリの活用
Xcodeにおけるライブラリの活用Xcodeにおけるライブラリの活用
Xcodeにおけるライブラリの活用
teencoders
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke 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

FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 

Recently uploaded (16)

FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 

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の話