Submit Search
Upload
SDL2の紹介
•
Download as PPTX, PDF
•
8 likes
•
16,225 views
N
nyaocat
Follow
Boost.勉強会 #19 東京で発表に用いた資料です。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 44
Download now
Recommended
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター
Unity Technologies Japan K.K.
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
Recommended
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター
Unity Technologies Japan K.K.
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
ドロネー三角形分割
ドロネー三角形分割
Yusuke Matsushita
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
直交領域探索
直交領域探索
okuraofvegetable
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
Toshiyasu Miyabe
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
Unity Technologies Japan K.K.
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
Sho Hosoda
初めてのグラフカット
初めてのグラフカット
Tsubasa Hirakawa
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
型安全性入門
型安全性入門
Akinori Abe
Marp Tutorial
Marp Tutorial
Rui Watanabe
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
Scalaの現状と今後
Scalaの現状と今後
Kota Mizushima
Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
More Related Content
What's hot
ドロネー三角形分割
ドロネー三角形分割
Yusuke Matsushita
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
直交領域探索
直交領域探索
okuraofvegetable
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
Toshiyasu Miyabe
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
Unity Technologies Japan K.K.
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
Sho Hosoda
初めてのグラフカット
初めてのグラフカット
Tsubasa Hirakawa
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
型安全性入門
型安全性入門
Akinori Abe
Marp Tutorial
Marp Tutorial
Rui Watanabe
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
What's hot
(20)
ドロネー三角形分割
ドロネー三角形分割
中3女子でもわかる constexpr
中3女子でもわかる constexpr
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
メタプログラミングって何だろう
メタプログラミングって何だろう
闇魔術を触ってみた
闇魔術を触ってみた
直交領域探索
直交領域探索
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
プログラムを高速化する話
プログラムを高速化する話
ウェーブレット木の世界
ウェーブレット木の世界
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
初めてのグラフカット
初めてのグラフカット
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
型安全性入門
型安全性入門
Marp Tutorial
Marp Tutorial
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Similar to SDL2の紹介
Scalaの現状と今後
Scalaの現状と今後
Kota Mizushima
Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
Scalaの現状と課題
Scalaの現状と課題
Kota Mizushima
Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
Java 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 ~...
Insight Technology, Inc.
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
Tomohiro Kumagai
Xcode4 project template (slide)
Xcode4 project template (slide)
Wataru Kimura
プロダクトにおけるScala
プロダクトにおけるScala
Yuto Suzuki
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
Spring4Dの紹介
Spring4Dの紹介
Shinya Okano
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話
hirotakanosato
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro Sera
MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめ
Kenichi Sonoda
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
terurou
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
Xcodeにおけるライブラリの活用
Xcodeにおけるライブラリの活用
teencoders
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke Shiratori
Similar to SDL2の紹介
(20)
Scalaの現状と今後
Scalaの現状と今後
Scalaでのプログラム開発
Scalaでのプログラム開発
Scalaの現状と課題
Scalaの現状と課題
Scala.jsはじめました!
Scala.jsはじめました!
Java 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 ~...
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
Xcode4 project template (slide)
Xcode4 project template (slide)
プロダクトにおけるScala
プロダクトにおけるScala
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Spring4Dの紹介
Spring4Dの紹介
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめ
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Xcodeにおけるライブラリの活用
Xcodeにおけるライブラリの活用
Beginners 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...
Toru Tamaki
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
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
Toru Tamaki
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
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...
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
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
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
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
オープンソースなクロスプラットフォームマルチメディアライブラリであるSDL2の紹介
最近24歳になった サイトには自作wikiを使用 つくりかけてはすぐ飽きて放置する性質。 最近はバイナリハックスよんでバイナリにはまってる
改めて
本日の内容です 最初にSDL2自体の紹介を、次に簡単な使い方をごく一部、最後に応用的なことを少々話します。
応用的な内容です。
ではまず最初に。
この一言で紹介が済んでしまう 急に意識高くなったわけではなく、ちょうどよい日本語訳がない。 なお、Simple DirecMedia Layerが正式名称 libsdl.org
ちなみに、前のバージョンである SDL1.2 では GNU LGPL ライセンスだった。そのため、もっぱらDSO(DLL)として利用されていたと聞く。もっとも、SDL2でもスタティックリンクライブラリをビルドするのが難しいのと、別にスタティックリンクにする利点もないのであまりそうされてはいないのではないか。
他プラットフォーム対応はソースコード中に見ることができる。 Haiku(OpenBeOS)、Mir(displayProtocol),wayland(displayProtocol),Pandora(オープンな携帯ゲーム機、組み込みLinuxマシン。GP2Xの後継)、PSP(PSP)、raspberry pi(小型linuxボード)
デバイスは、マウス、キーボード、ゲームパッド、ジョイスティック。 音はかなり自由に好きに波形からいじれる。 画面は対応プラットフォームにより様々だが、ハードウェアアクセラレータも利用できる。
イベント機構はシンプルなもの。C言語なので……。マルチスレッドもシンプルだが一応ミューテックス条件変数アトミック操作など一通りはそろっている。C++的にはstd::threadを使えばよいのでまぁいらないですが。電源状態は取得のこと。
公式サイトのトップページでSDL製のゲームがランダムに紹介される。Steamのクロスプラットフォーム対応ゲームで多いらしい? エミュレータでも使用例あり。携帯機はpandoraとかgp2x(移植)とか。最後に話すがビデオ層の拡張さえすればよいので比較的楽。SDLをラップして作られたゲームライブラリなども。
公式では多言語対応は行っていない。Ada,C#,Lua,Ocaml,Pascal,Pythonが紹介されてる。erlang,ruby,commonlispなどもある。とにかく素直なC言語なので楽。 残念ながら前バージョンのSDLについてはサイトからドキュメントが消失してるので詳細を上げられない。機能のシンプルさは本当にシンプルなので、多分色々な人がついついラッピングしたくなるし実際多くのライブラリがあふれてる。
というかゲーム用途ならばimage, mixer はほぼ必須になるかもしれない。ttfは文字列描画を行わせる機能だが、毎回文字列を描画するのにはむかない、遅い欠点あり。まぁOpenGLつかってるとそうなりそうですが。SDL1.2用だがそこを改良したSDL_kanjiがあったりした。ADCII文字のみならばgfxに固定フォントで描画する巻子が容易されている。gfxは便利関数群みたいなライブラリで、FPSタイマや円の描画などがある。
DXライブラリ、それもはやDXじゃないやん
ofはネーミングがややこしいのが個人的に気にかかる。最初はこれ自体がライブラリなのだと認識できなかった。芸術大学などでも使われているらしい。
私は大学のOpenGLの課題のときにSDL1.2を使いました。歴史は具体的な年数がいまいちわからず……
SDL1.2のときはとくに描画機能が弱く、ハードウェアアクセラレータなし、垂直同期なし、画素集合の転送しかできなかった。もっとも、それだけで作られたゲームも aba games で公開されてて普通に遊べるんですが。テキスト入力とは、画面上でテキスト入力ボックスを出してユーザ環境のIMEを利用して入力させることができる機能。すごい。まだ試してない。複数ウィンドウ対応はemscriptenやandroid、iosではたぶんうごかないんでしょう。
構成プロパティの追加のインクルードディレクトリ、ライブラリディレクトリに設定し、追加のインストールライブラリで sdl を設定。*nix系環境ならばソースからコンパイルしてインストールももちろん良い。sdl2-configかpkg-config SDL2 を使う。pkg-configの方が、sdl_imageなども一括で指定できるしおすすめ。
システム部分にはSDL_INIT_TIMERタイマ サブシステムSDL_INIT_AUDIOオーディオ サブシステムSDL_INIT_VIDEOビデオ サブシステムSDL_INIT_JOYSTICKジョイスティック サブシステムSDL_INIT_HAPTICハプティクス(感覚フィードバック) サブシステムSDL_INIT_GAMECONTROLLERコントローラー サブシステムSDL_INIT_EVENTSが入れられる。全部指定ももちろん可能。
一見使い道が思いつかないかもしれないが例えばジョイスティックを終了して再度初期化すると起動中に新しく繋がれたジョイスティックとかも検知できる
移行レンダラ経由で描画を行うことになる。ウィンドウ初期化、レンダラ作成を一括で行う関数もあるがそちらだとパラメータを与えられない。
イベント形式で入力を受け取ることもできる
あとはOpenGLの関数がガンガン使える。SDL1.2のときはこっちがむしろ主流な描画方法扱いだった。コンテキストは切り替えたりもできるが特殊なことをするのでもないかぎり変数に保持せずともよいっぽい
OpenGLのうむを起動後にチェックして使うかどうかを決めるのには良いかもしれないが面倒だと思う
基本的に3Dだがインターフェースを2Dで出したいときに便利かもしれない。glの設定によってはうまくいかないかもしれないがいまいち詳細不明
これを使って wxWidgets と組み合わせて UI つきの SDL とかもくめたりする。少々バグがまだのこっていたり、OSや環境依存の指定が必要になることもある。面白いが絶対必要でもないかぎりやらない方がよい。gtk::socketににたようなのがあるのでそれと組み合わせ可能。
ビデオドライバを拡張する話,love2dの話
Download now