SlideShare ist ein Scribd-Unternehmen logo
1 von 173
Downloaden Sie, um offline zu lesen
Copyright Drecom Co., Ltd. All Rights Reserved. 1
Cocos2d-x と社内基盤の付き合い方
∼アップストリームファーストを目指して∼
株式会社ドリコム
高橋成人
木元将輝
Copyright Drecom Co., Ltd. All Rights Reserved. 2
理想な付き合い方
photo by Brett  Sayer
付き合い方
Copyright Drecom Co., Ltd. All Rights Reserved. 3
難しい
photo by greg  westfall
難しい!
Copyright Drecom Co., Ltd. All Rights Reserved. 4
痩せたこともありました
photo by Hometown  Beauty
痩せちゃうこともありました
Copyright Drecom Co., Ltd. All Rights Reserved. 5
自社メンテも考えました
自社メンテも
してみました
photo by Florian  F
色々あったけど
共に歩むことにしました。
photo by Aurélien  Buttin
Copyright Drecom Co., Ltd. All Rights Reserved. 7
Cocos2d-x の話です、念のため
Copyright Drecom Co., Ltd. All Rights Reserved. 8
アップストリームへの道のりの話
photo by Kevin  Dinkel
今日の話は
アップストリーム開発
へ至る道のり
Copyright Drecom Co., Ltd. All Rights Reserved. 9
目的
lCocos2d-x のアップストリーム
開発を採用した理由を展開
l他の方がどう付き合っていってい
るか共有したい
Copyright Drecom Co., Ltd. All Rights Reserved. 10
Agenda
lモバイルゲームと社内基盤
l次の社内基盤
lオープンソースとの付き合い方
lCocos2d-x を利用する
Copyright Drecom Co., Ltd. All Rights Reserved. 11
Agenda
lモバイルゲームと社内基盤
l次の社内基盤
lオープンソースとの付き合い方
lCocos2d-x を利用する
Copyright Drecom Co., Ltd. All Rights Reserved. 12
社内基盤その名は
Bisque
Copyright Drecom Co., Ltd. All Rights Reserved. 13
l2013年開発開始
Copyright Drecom Co., Ltd. All Rights Reserved. 14
Bisque の目的
lネイティブシフト
lネイティブ環境の整備
Copyright Drecom Co., Ltd. All Rights Reserved. 15
bisque 以前のネイティブ開発環境
liOS
- Cocos2d-iphone
lAndroid
- Cocos2d-android
Copyright Drecom Co., Ltd. All Rights Reserved. 16
bisque 以前のネイティブ開発環境(2)
l言語が違う
- Objective-C
- Java
l開発効率が良くない
Copyright Drecom Co., Ltd. All Rights Reserved. 17
次のフレームワーク
Copyright Drecom Co., Ltd. All Rights Reserved. 18
Cocos2d-x 対応プラットフォーム
iOS
Copyright Drecom Co., Ltd. All Rights Reserved. 19
Cocos2d-x 特徴
H/W アクセラレータ ネイティブコード
高速 高速
Copyright Drecom Co., Ltd. All Rights Reserved. 20
なぜ選ばれたの?
Android
iOS
閲覧可能
改変可能
コスト削減
オープンソース
Copyright Drecom Co., Ltd. All Rights Reserved. 21
満たせたのは Cocos2d-x でした
v2.0.4 採用
Copyright Drecom Co., Ltd. All Rights Reserved. 22
Cocos2d-x の長所と短所
ゲーム以外の機能
ほぼゼロレイヤ階層
レンダリング
画像フォーマットの表示
ゲーム機能に特化
Copyright Drecom Co., Ltd. All Rights Reserved. 23
短所を補う
UIウィジェット
速度
アプリ内課金
暗号処理
サウンド・システム
演出
足りない
未熟
レイヤ階層
レンダリング
画像フォーマットの表示
ゲーム機能に特化
Copyright Drecom Co., Ltd. All Rights Reserved. 24
当時の切り札
WebView
Webゲームで培ったノウハウ
レンダリング、レイアウト
Copyright Drecom Co., Ltd. All Rights Reserved. 25
bisqueで担保
足りないもの
UIウィジェット
速度
アプリ内課金
暗号処理
足りないもの
足りないもの
サウンド
システム
演出
未熟なもの 足りないものUX向上
足りないもの
切り札
WebView
Copyright Drecom Co., Ltd. All Rights Reserved.
Copyright Drecom Co., Ltd. All Rights Reserved. 26
崖っぷちバスターズ® で利用しています
崖っぷちバスターズ®は、壁を壊して、敵を崖から突き落す、新感覚
のぶっ放し協力バトルゲームです。GPS連動したエリアバトルでス
コアランキングを競い、エリアNo.1になることで、そのエリアを制
圧しながら拡大していくことができます。また、最大4人で遊べるマ
ルチプレイ機能を搭載!仲間と連携して必殺技を繰り出せば、敵に大
ダメージを与えることができます。手に汗握るバトルが繰り広げら
れる、「みんなで遊べるゲーム」の決定版です。
Copyright Drecom Co., Ltd. All Rights Reserved. 27
Bisque の目的
lネイティブシフト
- ⃝ ネイティブアプリのリリース
lネイティブ環境の整備
- ⃝ Cocos2d-x でコスト削減
- ⃝ 足りない機能は追加
photo by Erik  Schepers
2015年
次のフェーズへ
Copyright Drecom Co., Ltd. All Rights Reserved. 29
新たなる要望
利用する機能を選びたい
ライセンス
未使用 3rd party libは表記を避けたい
1
パーミッション
未使用機能の許可を避けたい
パッケージサイズのシェイプアップ
少しでもサイズを減らしたい
Copyright Drecom Co., Ltd. All Rights Reserved. 30
新たなる要望
ゲーム以外のアプリでの活用
暗号化処理のみを利用したい
2
Cocos2d-x を新しくしたい
v2.0.4 は既に3年前(!)
3
Copyright Drecom Co., Ltd. All Rights Reserved. 31
• UIWidgetというのができた
• レンダリング性能の向上
• 3D 演出の追加
• C++11
Cocos2d-x の状況
v2 v3
新しい演出や体験• 古い
• 情報自体が
もう少ない
• 開発スピード
低下
Copyright Drecom Co., Ltd. All Rights Reserved. 32
状況整理
機能選択
ゲーム以外の
アプリで利用
バージョン
アップ
機能全部載せ
Cocos2d-x付のコードを含んだ
バイナリ△
バージョン v2.0.4 固定
Copyright Drecom Co., Ltd. All Rights Reserved. 33
Agenda
lモバイルゲームと社内基盤
l次の社内基盤
lオープンソースとの付き合い方
lCocos2d-x を利用する
Copyright Drecom Co., Ltd. All Rights Reserved. 34
現状の bisque 構成
bisque
課金 sqlite3
サウンド 暗号処理
v2.0.4
Copyright Drecom Co., Ltd. All Rights Reserved. 35
現状の bisque 構成
lbisque ソースファイル
- Cocos2d-x の proj ファイルで管理
lbisque 機能
- ソースコードはモジュール化済み
- ビルド周りは一枚岩状態
- 機能選択はできるが、ちょっと面倒
Copyright Drecom Co., Ltd. All Rights Reserved. 36
bisque 機能の分離
課金 sqlite3
サウンド 暗号処理
bisque
core
v2.0.4
Copyright Drecom Co., Ltd. All Rights Reserved. 37
bisque 機能の分離(2)
l機能の分離
- 必須機能を Core 化
- 選択可能機能をモジュール化
lBisque の Core 部分と機能毎に
proj ファイルを用意
l欲しい機能だけ選べる
Copyright Drecom Co., Ltd. All Rights Reserved. 38
Cocos2d-x からの独立
課金 sqlite3
サウンド 暗号処理
bisque
v2.0.4
core
Copyright Drecom Co., Ltd. All Rights Reserved. 39
Cocos2d-x からの独立(2)
lBisque Core の proj ファイルを
別管理
lCocos2d-x と分離し、bisque
と Cocos2-d x を同列モジュー
ル化にした
Copyright Drecom Co., Ltd. All Rights Reserved. 40
before
bisque
課金 sqlite3
サウンド 暗号処理
v2.0.4
Copyright Drecom Co., Ltd. All Rights Reserved. 41
after
課金 sqlite3
サウンド 暗号処理
bisque
core
v2.0.4
Copyright Drecom Co., Ltd. All Rights Reserved. 42
モジュール化
lbisque core と Cocos2d-x を同
列モジュール化し、対等な立場へ
lbisque 内でも一部機能をサブモ
ジュールとして選択できるように
した。
Copyright Drecom Co., Ltd. All Rights Reserved. 43
例: sqlite3 使わないよ
課金 sqlite3
サウンド 暗号処理
bisque
core
v2.0.4
Copyright Drecom Co., Ltd. All Rights Reserved. 44
sqlite3 さようなら
課金
サウンド 暗号処理
bisque
core
v2.0.4
Copyright Drecom Co., Ltd. All Rights Reserved. 45
例: 暗号処理だけ使いたいよ
課金 sqlite3
サウンド 暗号処理
bisque
core
v2.0.4
Copyright Drecom Co., Ltd. All Rights Reserved. 46
Cocos2d-x さようなら
課金 sqlite3
サウンド 暗号処理
bisque
core
Copyright Drecom Co., Ltd. All Rights Reserved. 47
利用しない機能さようなら
暗号処理
bisque
core
Copyright Drecom Co., Ltd. All Rights Reserved. 48
暗号処理こんにちは
暗号処理
bisque
core
Copyright Drecom Co., Ltd. All Rights Reserved. 49
Cocos2d-x と疎結合になったので…
課金 sqlite3
サウンド 暗号処理
bisque
v2.0.4
core
Copyright Drecom Co., Ltd. All Rights Reserved. 50
例: こういうのも悪くない
課金 sqlite3
サウンド 暗号処理
bisque
core
Copyright Drecom Co., Ltd. All Rights Reserved. 51
例: 大変そうだけどもこういうのもあり
課金 sqlite3
サウンド 暗号処理
bisque
core
Copyright Drecom Co., Ltd. All Rights Reserved. 52
フレームワークの選択肢が広がる!!
課金 sqlite3
サウンド 暗号処理
bisque
core
Copyright Drecom Co., Ltd. All Rights Reserved. 53
もちろんバージョンアップも楽に!
課金 sqlite3
サウンド 暗号処理
bisque
v3.x
core
Copyright Drecom Co., Ltd. All Rights Reserved. 54
コンセプト
機能選択
ゲーム以外の
アプリで利用
バージョン
アップ
サブモジュール化で
利用機能を選択可能に⃝
バージョン v2.0.4 固定
bisque 独立により
必要最低限のバイナリ⃝
Copyright Drecom Co., Ltd. All Rights Reserved. 55
残りタスク
機能選択
ゲーム以外の
アプリで利用
バージョン
アップ
⃝
バージョン v2.0.4 固定
サブモジュール化で
利用機能を選択可能に
bisque 独立により
必要最低限のバイナリ⃝
あとは Cocos2d-x の
バージョンアップだけ!
これは簡単そう!
photo by Paul  Hocksenar
Copyright Drecom Co., Ltd. All Rights Reserved. 57
Cocos2d-x バージョン要望
EngRD RD
バージョン
固定したい
運用中アプリ
の安定化
最新を
使いたい
最新機能
の調査
すべての
バージョン
アプリ開発者
へ機能提供
photo by Paul  Hocksenar
バージョンアップだけじゃ
足りなかったよ…
Copyright Drecom Co., Ltd. All Rights Reserved. 59
バージョン選択が必要だ
機能選択
ゲーム以外の
アプリで利用
バージョン
選択
⃝
バージョン v2.0.4 固定
サブモジュール化で
利用機能を選択可能に
必要最低限のバイナリ⃝
Copyright Drecom Co., Ltd. All Rights Reserved. 60
バージョン選択要件
l全バージョンを選択できる
l全バージョンに自社機能を簡単に
入れられる
l上記2つを低コストで実現できる
Copyright Drecom Co., Ltd. All Rights Reserved. 61
バージョン選択状況
lCocos2d-x のメインストリーム
は常に変化し続ける
lCocos2d-x のソースコードを変
更するとバージョンアップ時に支
障をきたす
lかと言って変更しないわけには…
photo by Jason  Corneveaux
自社の機能を追加しながら、
メインストリームの最新を
追いかけるうまい方法って
あるの?
Copyright Drecom Co., Ltd. All Rights Reserved. 63
あるんです
Copyright Drecom Co., Ltd. All Rights Reserved.
Copyright Drecom Co., Ltd. All Rights Reserved. 64
Linux
Copyright Drecom Co., Ltd. All Rights Reserved.
• オープンソース(GPL v2)
• 複数アーキテクチャ対応
• 世界で最も成功している OSS
プロジェクトの一つ
Copyright Drecom Co., Ltd. All Rights Reserved. 65
Linux
Copyright Drecom Co., Ltd. All Rights Reserved.
リリース間隔
2∼3ヶ月
変更コード
200万行以上
参加企業
200社以上
アップストリーム開発
Copyright Drecom Co., Ltd. All Rights Reserved. 66
Agenda
lモバイルゲームと社内基盤
l次の社内基盤
lオープンソースとの付き合い方
lCocos2d-x を利用する
Copyright Drecom Co., Ltd. All Rights Reserved. 67
アップストリーム開発
オープンソースソフトウェアに対して
企業が行ったソースコード修正を
元のオープンソースプロジェクトに
還流させるプロセス
アップストリームファーストは還流を
第一優先で考えること
photo by Alan  Doyle
アップストリームへ還流
(イメージ図)
Copyright Drecom Co., Ltd. All Rights Reserved. 69
アップストリーム開発
自社特有の処理は自社でメンテナンスし
汎用化可能なソースコードを還流する
リリースを追いながら自社の処理も
追加できる開発手法
Copyright Drecom Co., Ltd. All Rights Reserved. 70
アップストリーム開発
修正を還流するためメインストリーム
の最新を追いかける必要があり、
バージョン変更のコストを下げるのが
必須になる
バージョン変更のコストを抑えられる
Copyright Drecom Co., Ltd. All Rights Reserved. 71
自社でメンテナンス
Copyright Drecom Co., Ltd. All Rights Reserved. 72
自社でメンテナンス
l追加した処理をメンテし続ける
lアップストリームが verup
- 自社の変更点をすべて移行
- 時間がたつほど移行対象が増える
lこれはうまく行った例
Copyright Drecom Co., Ltd. All Rights Reserved. 73
自社でメンテナンス(2)
Copyright Drecom Co., Ltd. All Rights Reserved. 74
自社でメンテナンス(3)
lバージョンアップがうまくいくと
は限らない
l同じバージョンを使い続ける可能
性も…
lバージョンアップは新しいフレー
ムワークを作成する時
Copyright Drecom Co., Ltd. All Rights Reserved. 75
自社でメンテナンス(4)
lメリット
- 変更のスピードが速い
- やりたい放題
lデメリット
- 変更すればするほど verup が困難
- 独自フレームワーク化
- 新機能が利用できない
Copyright Drecom Co., Ltd. All Rights Reserved. 76
アップストリーム開発
Copyright Drecom Co., Ltd. All Rights Reserved. 77
アップストリーム開発(2)
l自社の処理をメインラインへ還流
l対象プロジェクトが verup
- 最小限の自社の変更点を移行
- 移行対象は減らせる
Copyright Drecom Co., Ltd. All Rights Reserved. 78
アップストリーム開発(3)
l新機能を利用可能
l最新版を追える状況になる
lバージョンアップは Cocos2d-x
を利用する過程でしかない
Copyright Drecom Co., Ltd. All Rights Reserved. 79
アップストリーム開発(4)
lメリット
- 最新版を追いやすい
- 新機能が利用可能
- (受け入れられれば)メンテコスト減
lデメリット
- 追い続けなければいけない
- 反映されるまで遅い(保障もなし)
photo by Sudhamshu  Hebbar
アップストリーム開発
採用基準
はどうやった?
Copyright Drecom Co., Ltd. All Rights Reserved. 81
アップストリーム開発採用判断基準
lオープンさ
l機能追加の頻度
lプロジェクトの熱量
lスポンサー
Copyright Drecom Co., Ltd. All Rights Reserved. 82
はどう?
オープンさ
どうして?
プロジェクトの進捗が見えるのでプロジェクト
の方向性を見通しやすい。そのため追いかけや
すい環境になる。
Trello でリリースのロードマップ提示
github 上で進捗管理
オープンさは十分
Copyright Drecom Co., Ltd. All Rights Reserved. 83
はどう?
追加機能の頻度
どうして?
機能追加があるからこそアップストリームを追
う利点がある。追加機能がないのであれば追う
必要はない。
バージョンアップ時に5∼10万行追加
新機能・新プラットフォームの対応
最新版を追う利点はある
Copyright Drecom Co., Ltd. All Rights Reserved. 84
はどう?
プロジェクトの熱量
どうして?
参加する開発者が多いことで機能追加の勢いや
品質の高さにも影響する。
github の Pull Request が 100件以上
Cocos2d-x のフォーラムも活発
Copyright Drecom Co., Ltd. All Rights Reserved. 85
はどう?
スポンサー
どうして?
実績がないと契約されない。(お金👌の関係 is
シビア)安定したプロダクト運用を要求される。
数が多いに越したことはない。
SoC メーカから携帯端末メーカ、パブリッ
シャーまでスポンサー、パートナーシップを組
んでいる。
photo by Brett  Sayer
Cocos2d-x とは どう付き合っている?
Copyright Drecom Co., Ltd. All Rights Reserved. 87
github 自社gitlab
clone
pull
Cocos2d-x と付き合うブランチ戦略
Copyright Drecom Co., Ltd. All Rights Reserved. 88
Cocos2d-x と付き合うブランチ戦略(2)
lgithub から clone, pull してリポ
ジトリを同期する
l自社ブランチをリリースタグから
作成、変更点追加
l前ブランチから変更点を merge
lリリース毎に繰り返す
Copyright Drecom Co., Ltd. All Rights Reserved. 89
ブランチ戦略の利点
lgithub と同期しながら変更点を
自社で管理し続けられる
lgit リポジトリが同期しているの
で Cocos2d-x メインストリーム
へ送付する Pull request 作成が
低コストになる
Copyright Drecom Co., Ltd. All Rights Reserved. 90
アプリケーションでの利用方法
アプリ自社gitlab
Classes
Resources
proj 群
cocos2dsubmodule v3.3v3.4v3.5
Copyright Drecom Co., Ltd. All Rights Reserved. 91
アプリケーションでの利用方法(2)
lアプリ内の Cocos2d-x ディレク
トリを git サブモジュールとして
扱う
l利用したいバージョンのブランチ
を指定する
Copyright Drecom Co., Ltd. All Rights Reserved. 92
この利用方法の利点
lアプリケーション側で利用する
Cocos2d-x のバージョン変更が
気軽になる。
lアプリケーションを開発しつつ
Cocos2d-x のソース修正が可能
Pull Request 作成が低コストに
なる
Copyright Drecom Co., Ltd. All Rights Reserved. 93
アップストリーム開発を採用したので
lCocos2d-x の最新版が利用可能
lバージョンも利用可能な土壌が出
来上がった。
l変更を還流するので社外の人もハ
ッピー(になる予定)
Copyright Drecom Co., Ltd. All Rights Reserved. 94
バージョン
選択
アップストリームで
バージョン選択可能に⃝
コンセプト
機能選択
ゲーム以外の
アプリで利用
⃝
サブモジュール化で
利用機能を選択可能に
⃝
bisque 独立により
必要最低限のバイナリ
Copyright Drecom Co., Ltd. All Rights Reserved. 95
Agenda
lモバイルゲームと社内基盤
l次の社内基盤
lオープンソースとの付き合い方
lCocos2d-x を利用する
Copyright Drecom Co., Ltd. All Rights Reserved. 96
アップストリーム開発
Copyright Drecom Co., Ltd. All Rights Reserved. 97
Cocos2d-x 2.xから3.xで大きく変化した事
Copyright Drecom Co., Ltd. All Rights Reserved. 98
・C++11準拠
・3D機能
・描画処理
・ローカルストレージ機能
・スクリプト関連
Copyright Drecom Co., Ltd. All Rights Reserved. 99
・C++11準拠
・3D機能
・描画処理
・ローカルストレージ機能
・スクリプト関連
・C++11準拠
Copyright Drecom Co., Ltd. All Rights Reserved. 100
・C++11準拠
・3D機能
・描画処理
・ローカルストレージ機能
・スクリプト関連
・3D機能
Copyright Drecom Co., Ltd. All Rights Reserved. 101
・C++11準拠
・3D機能
・描画処理
・ローカルストレージ機能
・スクリプト関連
・描画処理
Copyright Drecom Co., Ltd. All Rights Reserved. 102
・C++11準拠
・3D機能
・描画処理
・ローカルストレージ機能
・スクリプト関連
・ローカスストレージ機能
Copyright Drecom Co., Ltd. All Rights Reserved. 103
・C++11準拠
・3D機能
・描画処理
・ローカルストレージ機能
・スクリプト関連・スクリプト関連
Copyright Drecom Co., Ltd. All Rights Reserved. 104
・C++11準拠
・3D機能
・描画処理
・ローカルストレージ機能
・スクリプト関連
他にも色々
FileUtil
Font
MathLib
3D Socket
MySQL
ScriptBind
Copyright Drecom Co., Ltd. All Rights Reserved. 105
・C++11準拠
・3D機能
・描画処理
・ローカルストレージ機能
・スクリプト関連
・描画処理
Copyright Drecom Co., Ltd. All Rights Reserved. 106
Director
drawScene()
Scene
addChild()
visit()
Sprite
visit()
draw()
OpenGL  ES API
glDrawArrays()version2
Copyright Drecom Co., Ltd. All Rights Reserved. 107
Director
drawScene()
render()
Scene
addChild()
visit()
render()
Sprite
visit()
draw()
Renderer
addCommand()
render()
drawXXXX()
OpenGL  ES API
glDrawElements()
version3
Copyright Drecom Co., Ltd. All Rights Reserved. 108
Director
drawScene()
render()
Scene
addChild()
visit()
render()
Sprite
visit()
draw()
Renderer
addCommand()
render()
drawXXXX()
OpenGL  ES API
glDrawElements()
RenderCommand
RenderCommand
version3
Copyright Drecom Co., Ltd. All Rights Reserved. 109
Director
drawScene()
render()
Scene
addChild()
visit()
render()
Sprite
visit()
draw()
Renderer
addCommand()
render()
drawXXXX()
OpenGL  ES API
glDrawArrays()
glDrawElements()
RenderCommand
RenderCommand
version2
version3
Copyright Drecom Co., Ltd. All Rights Reserved. 110
・Rendererクラスの追加
・Drawメソッドの変更
・Draw Callに関する変更
Copyright Drecom Co., Ltd. All Rights Reserved. 111
・Draw Callに関する変更
・基本的にglDrawArraysはglDrawElementsへ変更
Copyright Drecom Co., Ltd. All Rights Reserved. 112
・Draw Callに関する変更
・基本的にglDrawArraysはglDrawElementsへ変更
・VAO/VBOの積極的な利用
Copyright Drecom Co., Ltd. All Rights Reserved. 113
・Rendererクラスの追加
・RendererにQueueされたRenderCommandを
まとめてソート、実行する描画処理
Renderer
RenderCommand
RenderCommand
RenderCommand
Sprite::draw()
OpenGL  ES  API
glDrawElements()
Sprite::draw()
Sprite::draw()
Copyright Drecom Co., Ltd. All Rights Reserved. 114
・Rendererクラスの追加
・RendererにQueueされたRenderCommandを
まとめてソート、実行する描画処理
・RenderCommandによる振る舞いの変化
Copyright Drecom Co., Ltd. All Rights Reserved. 115
・Rendererクラスの追加
・RendererにQueueされたRenderCommandを
まとめてソート、実行する描画処理
・RenderCommandによる振る舞いの変化
TrianglesCommand CustomCommand BatchCommand
GroupCommand MeshCommand QuadCommand
Copyright Drecom Co., Ltd. All Rights Reserved. 116
・Rendererクラスの追加
・RendererにQueueされたRenderCommandを
まとめてソート、実行する描画処理
・RenderCommandによる振る舞いの変化
・Global/Local Z Orderの概念
Copyright Drecom Co., Ltd. All Rights Reserved. 117
・Drawメソッドの変更
・RendererのQueueに対してRenderCommandを追加
Sprite::draw() glDrawArrays()
version2
Copyright Drecom Co., Ltd. All Rights Reserved. 118
・Drawメソッドの変更
・RendererのQueueに対してRenderCommandを追加
Sprite::draw() glDrawArrays()
RendererSprite::draw() glDrawElements()
version2
version3
Copyright Drecom Co., Ltd. All Rights Reserved. 119
・Drawメソッドの変更
・RendererのQueueに対してRenderCommandを追加
・CustomCommandによるコールバック処理
Renderer
Sprite::draw()
Sprite::callback()
glDrawElements()
Copyright Drecom Co., Ltd. All Rights Reserved. 120
・Rendererクラスの追加
・Drawメソッドの変更
・Draw Callに関する変更
Copyright Drecom Co., Ltd. All Rights Reserved. 121
Cocos2d-xを利用する上での
パフォーマンス・チューニング
Copyright Drecom Co., Ltd. All Rights Reserved. 122
・アップストリーム開発を行う上で
・メインストリームに対応していく
Copyright Drecom Co., Ltd. All Rights Reserved. 123
・アップストリーム開発を行う上で
・メインストリームに対応していく
・原則としてCocos2d-xのソースコードには
手を入れない
Copyright Drecom Co., Ltd. All Rights Reserved. 124
・アップストリーム開発を行う上で
・メインストリームに対応していく
・原則としてCocos2d-xのソースコードには
手を入れない
・バグ修正やチューニングはpull request等で
積極的に展開していく
Copyright Drecom Co., Ltd. All Rights Reserved. 125
・Cocos2d-xとの付き合い方
・そもそもCocos2d-x自体はパフォーマンス重視
というよりも実装コストの軽減や汎用性を
重視している
Copyright Drecom Co., Ltd. All Rights Reserved. 126
・Cocos2d-xとの付き合い方
・そもそもCocos2d-x自体はパフォーマンス重視
というよりも実装コストの軽減や汎用性を
重視している
・Cocos2d-xの機能を最大限に利用しながら
パフォーマンスの改善を目指す
Copyright Drecom Co., Ltd. All Rights Reserved. 127
・パフォーマンス・チューニング上の前提
・Cocos2d-xで実装されている機能を利用する為、
グラフィックスAPIはOpenGL ESを利用
Copyright Drecom Co., Ltd. All Rights Reserved. 128
・パフォーマンス・チューニング上の前提
・Cocos2d-xで実装されている機能を利用する為、
グラフィックスAPIはOpenGL ESを利用
iOS
AppleA7
Metal
Android
-­
Vulkan
Copyright Drecom Co., Ltd. All Rights Reserved. 129
・パフォーマンス・チューニング上の前提
・Cocos2d-xで実装されている機能を利用する為、
グラフィックスAPIはOpenGL ESを利用
・2Dのコマ割りアニメーションによる表現手法に
対して問題と成り得る箇所を探る
Copyright Drecom Co., Ltd. All Rights Reserved. 130
・CPU側の問題
・GPU側の問題
・CPU/GPU共通の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 131
・CPU側の問題
・Draw Callの問題
Copyright Drecom Co., Ltd. All Rights Reserved. 132
・CPU側の問題
・Draw Callの問題
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glUseProgram(program);
glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat);
glUniform1i(utxt, BQBORDER_SAMPLER);
glBindTexture(GL_TEXTURE_2D, texture[i]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[i]);
glEnableVertexAttribArray(kCCVertexAttrib_Position);
glEnableVertexAttribArray(kCCVertexAttrib_Color);
glEnableVertexAttribArray(kCCVertexAttrib_TexCoords);
glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao);
glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDrawElements
Copyright Drecom Co., Ltd. All Rights Reserved. 133
・CPU側の問題
・Draw Callの問題
Draw Callに関するOpenGL ESのAPIは
呼び出し回数がボトルネックに繋がる為
呼び出し回数を抑える
Copyright Drecom Co., Ltd. All Rights Reserved. 134
・CPU側の問題
・Draw Callの問題
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glUseProgram(program);
glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat);
glUniform1i(utxt, BQBORDER_SAMPLER);
glBindTexture(GL_TEXTURE_2D, texture[i]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[i]);
glEnableVertexAttribArray(kCCVertexAttrib_Position);
glEnableVertexAttribArray(kCCVertexAttrib_Color);
glEnableVertexAttribArray(kCCVertexAttrib_TexCoords);
glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao);
glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
Copyright Drecom Co., Ltd. All Rights Reserved. 135
・CPU側の問題
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glUseProgram(program);
glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat);
glUniform1i(utxt, BQBORDER_SAMPLER);
glBindTexture(GL_TEXTURE_2D, texture[i]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[i]);
glEnableVertexAttribArray(kCCVertexAttrib_Position);
glEnableVertexAttribArray(kCCVertexAttrib_Color);
glEnableVertexAttribArray(kCCVertexAttrib_TexCoords);
glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao);
glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
・Draw Callの問題(Cocos2d-x)
glDrawElements
Copyright Drecom Co., Ltd. All Rights Reserved. 136
・CPU側の問題
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glUseProgram(program);
glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat);
glUniform1i(utxt, BQBORDER_SAMPLER);
glBindTexture(GL_TEXTURE_2D, texture[i]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[i]);
glEnableVertexAttribArray(kCCVertexAttrib_Position);
glEnableVertexAttribArray(kCCVertexAttrib_Color);
glEnableVertexAttribArray(kCCVertexAttrib_TexCoords);
glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao);
glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
・Draw Callの問題(Cocos2d-x)
glDrawElements
Texture  /  Shader
Copyright Drecom Co., Ltd. All Rights Reserved. 137
・CPU側の問題
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glUseProgram(program);
glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat);
glUniform1i(utxt, BQBORDER_SAMPLER);
glBindTexture(GL_TEXTURE_2D, texture[i]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[i]);
glEnableVertexAttribArray(kCCVertexAttrib_Position);
glEnableVertexAttribArray(kCCVertexAttrib_Color);
glEnableVertexAttribArray(kCCVertexAttrib_TexCoords);
glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao);
glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
・Draw Callの問題(Cocos2d-x)
glDrawElements
Vertex
Copyright Drecom Co., Ltd. All Rights Reserved. 138
・CPU側の問題
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glUseProgram(program);
glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat);
glUniform1i(utxt, BQBORDER_SAMPLER);
glBindTexture(GL_TEXTURE_2D, texture[i]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[i]);
glEnableVertexAttribArray(kCCVertexAttrib_Position);
glEnableVertexAttribArray(kCCVertexAttrib_Color);
glEnableVertexAttribArray(kCCVertexAttrib_TexCoords);
glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao);
glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
・Draw Callの問題(Cocos2d-x)
glDrawElements
Vertex
Texture  /  Shader
Copyright Drecom Co., Ltd. All Rights Reserved. 139
・CPU側の問題
・CustomCommandによるコールバック処理
・Global/Local Z Orderの概念
・Drawメソッドの変更
・Rendererクラスの追加
Copyright Drecom Co., Ltd. All Rights Reserved. 140
・CPU側の問題
・CustomCommandによるコールバック処理
・Global/Local Z Orderの概念
RenderCommand
RenderCommand
RenderCommand
RenderCommand
RenderCommand
RenderCommand
RenderCommand
CustomCommand
RenderCommand
RenderCommand
Copyright Drecom Co., Ltd. All Rights Reserved. 141
・CPU側の問題
・CustomCommandによるコールバック処理
・Global/Local Z Orderの概念
・Drawメソッドの変更
・Rendererクラスの追加
Copyright Drecom Co., Ltd. All Rights Reserved. 142
・CPU側の問題
・Cocos2d-xのversion3ではAPI呼び出し回数の削減
に対する最適化はきちんと行われている
・Cocos2d-xの最適化の手法を理解した上で、
手法に沿った手段を用いて実装を
Copyright Drecom Co., Ltd. All Rights Reserved. 143
・ピクセル処理の問題
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 144
・ピクセル処理の問題
・オーバードロー
・フラグメントシェーディング
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 145
・ピクセル処理の問題「オーバードロー」
・1ピクセルに対して2回以上の描画処理
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 146
・ピクセル処理の問題「オーバードロー」
・奥から手前への描画
・アルファブレンド
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 147
・ピクセル処理の問題「オーバードロー」
・奥から手前への描画
・アルファブレンド=奥から手前への描画
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 148
・ピクセル処理の問題「オーバードロー」
・奥から手前への描画
・アルファブレンド→透過部分を最小限に
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 149
・ピクセル処理の問題「オーバードロー」
・SpritePolygonの利用
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 150
・ピクセル処理の問題「フラグメントシェーディング」
・シェーダーのパフォーマンス
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 151
・ピクセル処理の問題「フラグメントシェーディング」
・シェーダーのパフォーマンス
複雑な処理を避ける
分岐の数を減らす
ループを無くす
演算精度を下げる※
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 152
・透過部分の範囲を狭く、重なりを浅く
・SpritePolygonの利用を検討
・独自のシェーダーについての最適化
・サードパーティのシェーダーの確認
・GPU側の問題
・オーバードロー
・フラグメントシェーディング
Copyright Drecom Co., Ltd. All Rights Reserved. 153
・GPUによって
部分的にパフォーマンスが異なる
最適なチューニング箇所が異なる
・Cocos2d-xを利用する上でもGPUの理解を
・GPU側の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 154
・CPU/GPU共通の問題
・メモリ帯域幅の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 155
・CPU/GPU共通の問題
・メモリ帯域幅の問題
・iPhone5:AppleA6で8.5GB/sec程度
・iPhone5s:AppleA7で15GB/sec程度
Copyright Drecom Co., Ltd. All Rights Reserved. 156
・CPU/GPU共通の問題
・メモリ帯域幅の問題
・メモリとその帯域幅はCPU/GPUで共有
CPU GPU
MEM  /  VRAM
Copyright Drecom Co., Ltd. All Rights Reserved. 157
・CPU/GPU共通の問題
・メモリ帯域幅の問題
・メモリとその帯域幅はCPU/GPUで共有
CPU GPU
MEM  /  VRAM
マルチスレッド テクスチャ
Copyright Drecom Co., Ltd. All Rights Reserved. 158
・CPU/GPU共通の問題
オブジェクトサイズ/数の削減
テクスチャサイズ/数の削減
圧縮テクスチャの利用
マルチテクスチャ等の再考
・メモリ帯域幅の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 159
・CPU/GPU共通の問題
・CPUやGPUそれぞれの最適化だけでは
解消されない問題
・パフォーマンスに大きな影響を与えるが、
表面化しづらい
Copyright Drecom Co., Ltd. All Rights Reserved. 160
・CPU側の問題
・GPU側の問題
・CPU/GPU共通の問題
Copyright Drecom Co., Ltd. All Rights Reserved. 161
まとめ
ドッグイヤーと言われる程に
技術の進歩が早くなっており、
photo by R∂lf  Κλενγελ
ユーザの要求も
増えてきています
photo by Matthias  Ripp
それに伴い、
アップストリーム開発
が選択肢になる
機会が増えてきました
現在、アップストリーム
開発を採用している企業
が少ないので、
Upstream します
アップストリーム開発
に挑戦すること
にしました
photo by Patrik  Theander
ぜひ、みなさまも
参加してください
photo by Johan  Larkander
photo by Tintin44
一人で悩まず、
問題を共有しましょう
開発者間で
Win-win の関係を
築けたら幸いです
Any Questions?
photo by Matthias  Ripp
Copyright Drecom Co., Ltd. All Rights Reserved. 171
ご静聴ありがとうございました
Copyright Drecom Co., Ltd. All Rights Reserved. 172
参考文献
Copyright Drecom Co., Ltd. All Rights Reserved. 173
参考文献
lオープンソースにおけるアップス
トリーム開発の意義

Weitere ähnliche Inhalte

Was ist angesagt?

FINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてFINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてdena_study
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾外道 父
 
Cloudera impala
Cloudera impalaCloudera impala
Cloudera impala外道 父
 
FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化dena_study
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphonedena_study
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装dena_study
 
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方dena_study
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~Takashi Honda
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方dena_study
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)denatech2016
 
ドリコムのInfrastructure as code
ドリコムのInfrastructure as codeドリコムのInfrastructure as code
ドリコムのInfrastructure as codeYosuke Hiraishi
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~Ryo Fujiwara
 
大規模SNSにおけるソーシャルアプリの運用とマネタイズ
大規模SNSにおけるソーシャルアプリの運用とマネタイズ大規模SNSにおけるソーシャルアプリの運用とマネタイズ
大規模SNSにおけるソーシャルアプリの運用とマネタイズyouthk kamiya
 
ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀Takafumi ONAKA
 
制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)dena_study
 
とあるアプリの開発運用(トラブルシュート)
とあるアプリの開発運用(トラブルシュート)とあるアプリの開発運用(トラブルシュート)
とあるアプリの開発運用(トラブルシュート)Takafumi ONAKA
 
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokaiGo Sueyoshi (a.k.a sue445)
 
カンバンと朝会とわたくし
カンバンと朝会とわたくしカンバンと朝会とわたくし
カンバンと朝会とわたくしDrecom Co., Ltd.
 
スペシャリストになるには
スペシャリストになるにはスペシャリストになるには
スペシャリストになるには外道 父
 

Was ist angesagt? (20)

FINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてFINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについて
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
Cloudera impala
Cloudera impalaCloudera impala
Cloudera impala
 
FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphone
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装
 
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~
 
ドリコムのインフラCI
ドリコムのインフラCIドリコムのインフラCI
ドリコムのインフラCI
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)
 
ドリコムのInfrastructure as code
ドリコムのInfrastructure as codeドリコムのInfrastructure as code
ドリコムのInfrastructure as code
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~
 
大規模SNSにおけるソーシャルアプリの運用とマネタイズ
大規模SNSにおけるソーシャルアプリの運用とマネタイズ大規模SNSにおけるソーシャルアプリの運用とマネタイズ
大規模SNSにおけるソーシャルアプリの運用とマネタイズ
 
ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀
 
制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)
 
とあるアプリの開発運用(トラブルシュート)
とあるアプリの開発運用(トラブルシュート)とあるアプリの開発運用(トラブルシュート)
とあるアプリの開発運用(トラブルシュート)
 
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
 
カンバンと朝会とわたくし
カンバンと朝会とわたくしカンバンと朝会とわたくし
カンバンと朝会とわたくし
 
スペシャリストになるには
スペシャリストになるにはスペシャリストになるには
スペシャリストになるには
 

Andere mochten auch

CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介Drecom Co., Ltd.
 
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…Drecom Co., Ltd.
 
5年後のデータサイエンティスト
5年後のデータサイエンティスト5年後のデータサイエンティスト
5年後のデータサイエンティストDrecom Co., Ltd.
 
中級グラフィックス入門~シャドウマッピング総まとめ~
中級グラフィックス入門~シャドウマッピング総まとめ~中級グラフィックス入門~シャドウマッピング総まとめ~
中級グラフィックス入門~シャドウマッピング総まとめ~ProjectAsura
 
レイトレ合宿3!!! 5分間アピールプレゼン―Pocol
レイトレ合宿3!!! 5分間アピールプレゼン―Pocolレイトレ合宿3!!! 5分間アピールプレゼン―Pocol
レイトレ合宿3!!! 5分間アピールプレゼン―PocolProjectAsura
 
Application parallelisation Android - Klaas Vangend
Application parallelisation Android - Klaas VangendApplication parallelisation Android - Klaas Vangend
Application parallelisation Android - Klaas Vangendナム-Nam Nguyễn
 
Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことKatsutoshi Makino
 
Aiming 開発ゲームの裏側
Aiming 開発ゲームの裏側Aiming 開発ゲームの裏側
Aiming 開発ゲームの裏側Katsutoshi Makino
 
Weighted Blended Order Independent Transparency
Weighted Blended Order Independent TransparencyWeighted Blended Order Independent Transparency
Weighted Blended Order Independent Transparencyzokweiron
 
Kansai cedec 2015_fumoto
Kansai cedec 2015_fumotoKansai cedec 2015_fumoto
Kansai cedec 2015_fumotofumoto kazuhiro
 
フライングゲットガチャ セミナー資料
フライングゲットガチャ セミナー資料フライングゲットガチャ セミナー資料
フライングゲットガチャ セミナー資料Drecom Co., Ltd.
 
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)ozlael ozlael
 
Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)ozlael ozlael
 
Tabc vol3 テクニカルアーティストを始めるにあたって
Tabc vol3 テクニカルアーティストを始めるにあたってTabc vol3 テクニカルアーティストを始めるにあたって
Tabc vol3 テクニカルアーティストを始めるにあたってfumoto kazuhiro
 
エンジニア生存戦略
エンジニア生存戦略エンジニア生存戦略
エンジニア生存戦略Drecom Co., Ltd.
 
ACEScg: A Common Color Encoding for Visual Effects Applications - DigiPro 2015
ACEScg: A Common Color Encoding for Visual Effects Applications - DigiPro 2015ACEScg: A Common Color Encoding for Visual Effects Applications - DigiPro 2015
ACEScg: A Common Color Encoding for Visual Effects Applications - DigiPro 2015hpduiker
 
声の実体化体験 - HTML5でつくるデジタルインスタレーション -
声の実体化体験 - HTML5でつくるデジタルインスタレーション -声の実体化体験 - HTML5でつくるデジタルインスタレーション -
声の実体化体験 - HTML5でつくるデジタルインスタレーション -Yamato Honda
 
ACES 1.0 OpenColorIO config - Siggraph 2015
ACES 1.0 OpenColorIO config - Siggraph 2015ACES 1.0 OpenColorIO config - Siggraph 2015
ACES 1.0 OpenColorIO config - Siggraph 2015hpduiker
 
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!Yamato Honda
 

Andere mochten auch (20)

CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
 
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
 
5年後のデータサイエンティスト
5年後のデータサイエンティスト5年後のデータサイエンティスト
5年後のデータサイエンティスト
 
中級グラフィックス入門~シャドウマッピング総まとめ~
中級グラフィックス入門~シャドウマッピング総まとめ~中級グラフィックス入門~シャドウマッピング総まとめ~
中級グラフィックス入門~シャドウマッピング総まとめ~
 
レイトレ合宿3!!! 5分間アピールプレゼン―Pocol
レイトレ合宿3!!! 5分間アピールプレゼン―Pocolレイトレ合宿3!!! 5分間アピールプレゼン―Pocol
レイトレ合宿3!!! 5分間アピールプレゼン―Pocol
 
Application parallelisation Android - Klaas Vangend
Application parallelisation Android - Klaas VangendApplication parallelisation Android - Klaas Vangend
Application parallelisation Android - Klaas Vangend
 
Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだこと
 
Aiming 開発ゲームの裏側
Aiming 開発ゲームの裏側Aiming 開発ゲームの裏側
Aiming 開発ゲームの裏側
 
Weighted Blended Order Independent Transparency
Weighted Blended Order Independent TransparencyWeighted Blended Order Independent Transparency
Weighted Blended Order Independent Transparency
 
Kansai cedec 2015_fumoto
Kansai cedec 2015_fumotoKansai cedec 2015_fumoto
Kansai cedec 2015_fumoto
 
Getting Native with NDK
Getting Native with NDKGetting Native with NDK
Getting Native with NDK
 
フライングゲットガチャ セミナー資料
フライングゲットガチャ セミナー資料フライングゲットガチャ セミナー資料
フライングゲットガチャ セミナー資料
 
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
 
Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)
 
Tabc vol3 テクニカルアーティストを始めるにあたって
Tabc vol3 テクニカルアーティストを始めるにあたってTabc vol3 テクニカルアーティストを始めるにあたって
Tabc vol3 テクニカルアーティストを始めるにあたって
 
エンジニア生存戦略
エンジニア生存戦略エンジニア生存戦略
エンジニア生存戦略
 
ACEScg: A Common Color Encoding for Visual Effects Applications - DigiPro 2015
ACEScg: A Common Color Encoding for Visual Effects Applications - DigiPro 2015ACEScg: A Common Color Encoding for Visual Effects Applications - DigiPro 2015
ACEScg: A Common Color Encoding for Visual Effects Applications - DigiPro 2015
 
声の実体化体験 - HTML5でつくるデジタルインスタレーション -
声の実体化体験 - HTML5でつくるデジタルインスタレーション -声の実体化体験 - HTML5でつくるデジタルインスタレーション -
声の実体化体験 - HTML5でつくるデジタルインスタレーション -
 
ACES 1.0 OpenColorIO config - Siggraph 2015
ACES 1.0 OpenColorIO config - Siggraph 2015ACES 1.0 OpenColorIO config - Siggraph 2015
ACES 1.0 OpenColorIO config - Siggraph 2015
 
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!
 

Ähnlich wie CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜

Quiznowを支える技術 #yapcasia
Quiznowを支える技術 #yapcasiaQuiznowを支える技術 #yapcasia
Quiznowを支える技術 #yapcasiaYosuke Furukawa
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)Drecom Co., Ltd.
 
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作Nobutaka Takushima
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)Toshiharu Sugiyama
 
Regional Scrum Gathering Tokyo 2023 Keiji Kikuchi Remote Mobbing
Regional Scrum Gathering Tokyo 2023 Keiji Kikuchi Remote MobbingRegional Scrum Gathering Tokyo 2023 Keiji Kikuchi Remote Mobbing
Regional Scrum Gathering Tokyo 2023 Keiji Kikuchi Remote MobbingKeiji Kikuchi
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術Toru Yamaguchi
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsGo Sueyoshi (a.k.a sue445)
 
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術Satoshi Yamafuji
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例gree_tech
 
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議Shinra_Technologies
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニーTokuhiro Eto
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術dena_study
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
プライベートクラウド作ってみました
プライベートクラウド作ってみましたプライベートクラウド作ってみました
プライベートクラウド作ってみましたKoji Hasebe
 
Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向Kaoru NAKAMURA
 
NHNグループ合同勉強会 ライブドア片野
NHNグループ合同勉強会 ライブドア片野NHNグループ合同勉強会 ライブドア片野
NHNグループ合同勉強会 ライブドア片野livedoor
 
実はかんたん!ゲームエンジンCocos2d-x入門
実はかんたん!ゲームエンジンCocos2d-x入門実はかんたん!ゲームエンジンCocos2d-x入門
実はかんたん!ゲームエンジンCocos2d-x入門Chukong Technologies Japan
 
GTMF 2015: 「音声再生遅延推測機能」正式リリース! ズレない!待たせない!快適なスマホゲームを実現する技術紹介 | 株式会社CRI・ミドルウェア
GTMF 2015: 「音声再生遅延推測機能」正式リリース! ズレない!待たせない!快適なスマホゲームを実現する技術紹介 | 株式会社CRI・ミドルウェアGTMF 2015: 「音声再生遅延推測機能」正式リリース! ズレない!待たせない!快適なスマホゲームを実現する技術紹介 | 株式会社CRI・ミドルウェア
GTMF 2015: 「音声再生遅延推測機能」正式リリース! ズレない!待たせない!快適なスマホゲームを実現する技術紹介 | 株式会社CRI・ミドルウェアGame Tools & Middleware Forum
 

Ähnlich wie CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜 (20)

Quiznowを支える技術 #yapcasia
Quiznowを支える技術 #yapcasiaQuiznowを支える技術 #yapcasia
Quiznowを支える技術 #yapcasia
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)
 
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
 
Regional Scrum Gathering Tokyo 2023 Keiji Kikuchi Remote Mobbing
Regional Scrum Gathering Tokyo 2023 Keiji Kikuchi Remote MobbingRegional Scrum Gathering Tokyo 2023 Keiji Kikuchi Remote Mobbing
Regional Scrum Gathering Tokyo 2023 Keiji Kikuchi Remote Mobbing
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
 
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
プライベートクラウド作ってみました
プライベートクラウド作ってみましたプライベートクラウド作ってみました
プライベートクラウド作ってみました
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
Cocos2d x talks
Cocos2d x talksCocos2d x talks
Cocos2d x talks
 
Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向
 
NHNグループ合同勉強会 ライブドア片野
NHNグループ合同勉強会 ライブドア片野NHNグループ合同勉強会 ライブドア片野
NHNグループ合同勉強会 ライブドア片野
 
実はかんたん!ゲームエンジンCocos2d-x入門
実はかんたん!ゲームエンジンCocos2d-x入門実はかんたん!ゲームエンジンCocos2d-x入門
実はかんたん!ゲームエンジンCocos2d-x入門
 
GTMF 2015: 「音声再生遅延推測機能」正式リリース! ズレない!待たせない!快適なスマホゲームを実現する技術紹介 | 株式会社CRI・ミドルウェア
GTMF 2015: 「音声再生遅延推測機能」正式リリース! ズレない!待たせない!快適なスマホゲームを実現する技術紹介 | 株式会社CRI・ミドルウェアGTMF 2015: 「音声再生遅延推測機能」正式リリース! ズレない!待たせない!快適なスマホゲームを実現する技術紹介 | 株式会社CRI・ミドルウェア
GTMF 2015: 「音声再生遅延推測機能」正式リリース! ズレない!待たせない!快適なスマホゲームを実現する技術紹介 | 株式会社CRI・ミドルウェア
 

Mehr von Drecom Co., Ltd.

コンテナで始める柔軟な AWS Lambda 生活
コンテナで始める柔軟な AWS Lambda 生活コンテナで始める柔軟な AWS Lambda 生活
コンテナで始める柔軟な AWS Lambda 生活Drecom Co., Ltd.
 
サービスのインシデントを解決するには.pdf
サービスのインシデントを解決するには.pdfサービスのインシデントを解決するには.pdf
サービスのインシデントを解決するには.pdfDrecom Co., Ltd.
 
ドリコムサマージョブ報告 by 佐々木 誠治
ドリコムサマージョブ報告 by 佐々木 誠治ドリコムサマージョブ報告 by 佐々木 誠治
ドリコムサマージョブ報告 by 佐々木 誠治Drecom Co., Ltd.
 
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介Drecom Co., Ltd.
 
HTML5 ゲームフレームワーク開発について
HTML5 ゲームフレームワーク開発についてHTML5 ゲームフレームワーク開発について
HTML5 ゲームフレームワーク開発についてDrecom Co., Ltd.
 
「AROW」お披露目(導入編)
「AROW」お披露目(導入編)「AROW」お披露目(導入編)
「AROW」お披露目(導入編)Drecom Co., Ltd.
 
AROW の紹介 〜概要編〜
AROW の紹介 〜概要編〜AROW の紹介 〜概要編〜
AROW の紹介 〜概要編〜Drecom Co., Ltd.
 
AROW の紹介 〜実践編〜
AROW の紹介 〜実践編〜AROW の紹介 〜実践編〜
AROW の紹介 〜実践編〜Drecom Co., Ltd.
 
rails-developers-meetup-day4
rails-developers-meetup-day4rails-developers-meetup-day4
rails-developers-meetup-day4Drecom Co., Ltd.
 
html5conf2018-sponsor-session
html5conf2018-sponsor-sessionhtml5conf2018-sponsor-session
html5conf2018-sponsor-sessionDrecom Co., Ltd.
 
DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!Drecom Co., Ltd.
 
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法Drecom Co., Ltd.
 
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチLoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチDrecom Co., Ltd.
 
今月のレッツゴー陰陽師!
今月のレッツゴー陰陽師!今月のレッツゴー陰陽師!
今月のレッツゴー陰陽師!Drecom Co., Ltd.
 
Railsによるワイルドなソフトウェア開発
Railsによるワイルドなソフトウェア開発Railsによるワイルドなソフトウェア開発
Railsによるワイルドなソフトウェア開発Drecom Co., Ltd.
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Drecom Co., Ltd.
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選Drecom Co., Ltd.
 

Mehr von Drecom Co., Ltd. (18)

コンテナで始める柔軟な AWS Lambda 生活
コンテナで始める柔軟な AWS Lambda 生活コンテナで始める柔軟な AWS Lambda 生活
コンテナで始める柔軟な AWS Lambda 生活
 
サービスのインシデントを解決するには.pdf
サービスのインシデントを解決するには.pdfサービスのインシデントを解決するには.pdf
サービスのインシデントを解決するには.pdf
 
ドリコムサマージョブ報告 by 佐々木 誠治
ドリコムサマージョブ報告 by 佐々木 誠治ドリコムサマージョブ報告 by 佐々木 誠治
ドリコムサマージョブ報告 by 佐々木 誠治
 
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
 
HTML5 ゲームフレームワーク開発について
HTML5 ゲームフレームワーク開発についてHTML5 ゲームフレームワーク開発について
HTML5 ゲームフレームワーク開発について
 
「AROW」お披露目(導入編)
「AROW」お披露目(導入編)「AROW」お披露目(導入編)
「AROW」お披露目(導入編)
 
AROW の紹介 〜概要編〜
AROW の紹介 〜概要編〜AROW の紹介 〜概要編〜
AROW の紹介 〜概要編〜
 
AROW の紹介 〜実践編〜
AROW の紹介 〜実践編〜AROW の紹介 〜実践編〜
AROW の紹介 〜実践編〜
 
rails-developers-meetup-day4
rails-developers-meetup-day4rails-developers-meetup-day4
rails-developers-meetup-day4
 
html5conf2018-sponsor-session
html5conf2018-sponsor-sessionhtml5conf2018-sponsor-session
html5conf2018-sponsor-session
 
DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!
 
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
 
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチLoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
 
今月のレッツゴー陰陽師!
今月のレッツゴー陰陽師!今月のレッツゴー陰陽師!
今月のレッツゴー陰陽師!
 
Railsによるワイルドなソフトウェア開発
Railsによるワイルドなソフトウェア開発Railsによるワイルドなソフトウェア開発
Railsによるワイルドなソフトウェア開発
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選
 

Kürzlich hochgeladen

情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 

Kürzlich hochgeladen (12)

情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 

CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜

  • 1. Copyright Drecom Co., Ltd. All Rights Reserved. 1 Cocos2d-x と社内基盤の付き合い方 ∼アップストリームファーストを目指して∼ 株式会社ドリコム 高橋成人 木元将輝
  • 2. Copyright Drecom Co., Ltd. All Rights Reserved. 2 理想な付き合い方 photo by Brett  Sayer 付き合い方
  • 3. Copyright Drecom Co., Ltd. All Rights Reserved. 3 難しい photo by greg  westfall 難しい!
  • 4. Copyright Drecom Co., Ltd. All Rights Reserved. 4 痩せたこともありました photo by Hometown  Beauty 痩せちゃうこともありました
  • 5. Copyright Drecom Co., Ltd. All Rights Reserved. 5 自社メンテも考えました 自社メンテも してみました photo by Florian  F
  • 7. Copyright Drecom Co., Ltd. All Rights Reserved. 7 Cocos2d-x の話です、念のため
  • 8. Copyright Drecom Co., Ltd. All Rights Reserved. 8 アップストリームへの道のりの話 photo by Kevin  Dinkel 今日の話は アップストリーム開発 へ至る道のり
  • 9. Copyright Drecom Co., Ltd. All Rights Reserved. 9 目的 lCocos2d-x のアップストリーム 開発を採用した理由を展開 l他の方がどう付き合っていってい るか共有したい
  • 10. Copyright Drecom Co., Ltd. All Rights Reserved. 10 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  • 11. Copyright Drecom Co., Ltd. All Rights Reserved. 11 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  • 12. Copyright Drecom Co., Ltd. All Rights Reserved. 12 社内基盤その名は Bisque
  • 13. Copyright Drecom Co., Ltd. All Rights Reserved. 13 l2013年開発開始
  • 14. Copyright Drecom Co., Ltd. All Rights Reserved. 14 Bisque の目的 lネイティブシフト lネイティブ環境の整備
  • 15. Copyright Drecom Co., Ltd. All Rights Reserved. 15 bisque 以前のネイティブ開発環境 liOS - Cocos2d-iphone lAndroid - Cocos2d-android
  • 16. Copyright Drecom Co., Ltd. All Rights Reserved. 16 bisque 以前のネイティブ開発環境(2) l言語が違う - Objective-C - Java l開発効率が良くない
  • 17. Copyright Drecom Co., Ltd. All Rights Reserved. 17 次のフレームワーク
  • 18. Copyright Drecom Co., Ltd. All Rights Reserved. 18 Cocos2d-x 対応プラットフォーム iOS
  • 19. Copyright Drecom Co., Ltd. All Rights Reserved. 19 Cocos2d-x 特徴 H/W アクセラレータ ネイティブコード 高速 高速
  • 20. Copyright Drecom Co., Ltd. All Rights Reserved. 20 なぜ選ばれたの? Android iOS 閲覧可能 改変可能 コスト削減 オープンソース
  • 21. Copyright Drecom Co., Ltd. All Rights Reserved. 21 満たせたのは Cocos2d-x でした v2.0.4 採用
  • 22. Copyright Drecom Co., Ltd. All Rights Reserved. 22 Cocos2d-x の長所と短所 ゲーム以外の機能 ほぼゼロレイヤ階層 レンダリング 画像フォーマットの表示 ゲーム機能に特化
  • 23. Copyright Drecom Co., Ltd. All Rights Reserved. 23 短所を補う UIウィジェット 速度 アプリ内課金 暗号処理 サウンド・システム 演出 足りない 未熟 レイヤ階層 レンダリング 画像フォーマットの表示 ゲーム機能に特化
  • 24. Copyright Drecom Co., Ltd. All Rights Reserved. 24 当時の切り札 WebView Webゲームで培ったノウハウ レンダリング、レイアウト
  • 25. Copyright Drecom Co., Ltd. All Rights Reserved. 25 bisqueで担保 足りないもの UIウィジェット 速度 アプリ内課金 暗号処理 足りないもの 足りないもの サウンド システム 演出 未熟なもの 足りないものUX向上 足りないもの 切り札 WebView Copyright Drecom Co., Ltd. All Rights Reserved.
  • 26. Copyright Drecom Co., Ltd. All Rights Reserved. 26 崖っぷちバスターズ® で利用しています 崖っぷちバスターズ®は、壁を壊して、敵を崖から突き落す、新感覚 のぶっ放し協力バトルゲームです。GPS連動したエリアバトルでス コアランキングを競い、エリアNo.1になることで、そのエリアを制 圧しながら拡大していくことができます。また、最大4人で遊べるマ ルチプレイ機能を搭載!仲間と連携して必殺技を繰り出せば、敵に大 ダメージを与えることができます。手に汗握るバトルが繰り広げら れる、「みんなで遊べるゲーム」の決定版です。
  • 27. Copyright Drecom Co., Ltd. All Rights Reserved. 27 Bisque の目的 lネイティブシフト - ⃝ ネイティブアプリのリリース lネイティブ環境の整備 - ⃝ Cocos2d-x でコスト削減 - ⃝ 足りない機能は追加
  • 28. photo by Erik  Schepers 2015年 次のフェーズへ
  • 29. Copyright Drecom Co., Ltd. All Rights Reserved. 29 新たなる要望 利用する機能を選びたい ライセンス 未使用 3rd party libは表記を避けたい 1 パーミッション 未使用機能の許可を避けたい パッケージサイズのシェイプアップ 少しでもサイズを減らしたい
  • 30. Copyright Drecom Co., Ltd. All Rights Reserved. 30 新たなる要望 ゲーム以外のアプリでの活用 暗号化処理のみを利用したい 2 Cocos2d-x を新しくしたい v2.0.4 は既に3年前(!) 3
  • 31. Copyright Drecom Co., Ltd. All Rights Reserved. 31 • UIWidgetというのができた • レンダリング性能の向上 • 3D 演出の追加 • C++11 Cocos2d-x の状況 v2 v3 新しい演出や体験• 古い • 情報自体が もう少ない • 開発スピード 低下
  • 32. Copyright Drecom Co., Ltd. All Rights Reserved. 32 状況整理 機能選択 ゲーム以外の アプリで利用 バージョン アップ 機能全部載せ Cocos2d-x付のコードを含んだ バイナリ△ バージョン v2.0.4 固定
  • 33. Copyright Drecom Co., Ltd. All Rights Reserved. 33 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  • 34. Copyright Drecom Co., Ltd. All Rights Reserved. 34 現状の bisque 構成 bisque 課金 sqlite3 サウンド 暗号処理 v2.0.4
  • 35. Copyright Drecom Co., Ltd. All Rights Reserved. 35 現状の bisque 構成 lbisque ソースファイル - Cocos2d-x の proj ファイルで管理 lbisque 機能 - ソースコードはモジュール化済み - ビルド周りは一枚岩状態 - 機能選択はできるが、ちょっと面倒
  • 36. Copyright Drecom Co., Ltd. All Rights Reserved. 36 bisque 機能の分離 課金 sqlite3 サウンド 暗号処理 bisque core v2.0.4
  • 37. Copyright Drecom Co., Ltd. All Rights Reserved. 37 bisque 機能の分離(2) l機能の分離 - 必須機能を Core 化 - 選択可能機能をモジュール化 lBisque の Core 部分と機能毎に proj ファイルを用意 l欲しい機能だけ選べる
  • 38. Copyright Drecom Co., Ltd. All Rights Reserved. 38 Cocos2d-x からの独立 課金 sqlite3 サウンド 暗号処理 bisque v2.0.4 core
  • 39. Copyright Drecom Co., Ltd. All Rights Reserved. 39 Cocos2d-x からの独立(2) lBisque Core の proj ファイルを 別管理 lCocos2d-x と分離し、bisque と Cocos2-d x を同列モジュー ル化にした
  • 40. Copyright Drecom Co., Ltd. All Rights Reserved. 40 before bisque 課金 sqlite3 サウンド 暗号処理 v2.0.4
  • 41. Copyright Drecom Co., Ltd. All Rights Reserved. 41 after 課金 sqlite3 サウンド 暗号処理 bisque core v2.0.4
  • 42. Copyright Drecom Co., Ltd. All Rights Reserved. 42 モジュール化 lbisque core と Cocos2d-x を同 列モジュール化し、対等な立場へ lbisque 内でも一部機能をサブモ ジュールとして選択できるように した。
  • 43. Copyright Drecom Co., Ltd. All Rights Reserved. 43 例: sqlite3 使わないよ 課金 sqlite3 サウンド 暗号処理 bisque core v2.0.4
  • 44. Copyright Drecom Co., Ltd. All Rights Reserved. 44 sqlite3 さようなら 課金 サウンド 暗号処理 bisque core v2.0.4
  • 45. Copyright Drecom Co., Ltd. All Rights Reserved. 45 例: 暗号処理だけ使いたいよ 課金 sqlite3 サウンド 暗号処理 bisque core v2.0.4
  • 46. Copyright Drecom Co., Ltd. All Rights Reserved. 46 Cocos2d-x さようなら 課金 sqlite3 サウンド 暗号処理 bisque core
  • 47. Copyright Drecom Co., Ltd. All Rights Reserved. 47 利用しない機能さようなら 暗号処理 bisque core
  • 48. Copyright Drecom Co., Ltd. All Rights Reserved. 48 暗号処理こんにちは 暗号処理 bisque core
  • 49. Copyright Drecom Co., Ltd. All Rights Reserved. 49 Cocos2d-x と疎結合になったので… 課金 sqlite3 サウンド 暗号処理 bisque v2.0.4 core
  • 50. Copyright Drecom Co., Ltd. All Rights Reserved. 50 例: こういうのも悪くない 課金 sqlite3 サウンド 暗号処理 bisque core
  • 51. Copyright Drecom Co., Ltd. All Rights Reserved. 51 例: 大変そうだけどもこういうのもあり 課金 sqlite3 サウンド 暗号処理 bisque core
  • 52. Copyright Drecom Co., Ltd. All Rights Reserved. 52 フレームワークの選択肢が広がる!! 課金 sqlite3 サウンド 暗号処理 bisque core
  • 53. Copyright Drecom Co., Ltd. All Rights Reserved. 53 もちろんバージョンアップも楽に! 課金 sqlite3 サウンド 暗号処理 bisque v3.x core
  • 54. Copyright Drecom Co., Ltd. All Rights Reserved. 54 コンセプト 機能選択 ゲーム以外の アプリで利用 バージョン アップ サブモジュール化で 利用機能を選択可能に⃝ バージョン v2.0.4 固定 bisque 独立により 必要最低限のバイナリ⃝
  • 55. Copyright Drecom Co., Ltd. All Rights Reserved. 55 残りタスク 機能選択 ゲーム以外の アプリで利用 バージョン アップ ⃝ バージョン v2.0.4 固定 サブモジュール化で 利用機能を選択可能に bisque 独立により 必要最低限のバイナリ⃝
  • 57. Copyright Drecom Co., Ltd. All Rights Reserved. 57 Cocos2d-x バージョン要望 EngRD RD バージョン 固定したい 運用中アプリ の安定化 最新を 使いたい 最新機能 の調査 すべての バージョン アプリ開発者 へ機能提供
  • 58. photo by Paul  Hocksenar バージョンアップだけじゃ 足りなかったよ…
  • 59. Copyright Drecom Co., Ltd. All Rights Reserved. 59 バージョン選択が必要だ 機能選択 ゲーム以外の アプリで利用 バージョン 選択 ⃝ バージョン v2.0.4 固定 サブモジュール化で 利用機能を選択可能に 必要最低限のバイナリ⃝
  • 60. Copyright Drecom Co., Ltd. All Rights Reserved. 60 バージョン選択要件 l全バージョンを選択できる l全バージョンに自社機能を簡単に 入れられる l上記2つを低コストで実現できる
  • 61. Copyright Drecom Co., Ltd. All Rights Reserved. 61 バージョン選択状況 lCocos2d-x のメインストリーム は常に変化し続ける lCocos2d-x のソースコードを変 更するとバージョンアップ時に支 障をきたす lかと言って変更しないわけには…
  • 62. photo by Jason  Corneveaux 自社の機能を追加しながら、 メインストリームの最新を 追いかけるうまい方法って あるの?
  • 63. Copyright Drecom Co., Ltd. All Rights Reserved. 63 あるんです Copyright Drecom Co., Ltd. All Rights Reserved.
  • 64. Copyright Drecom Co., Ltd. All Rights Reserved. 64 Linux Copyright Drecom Co., Ltd. All Rights Reserved. • オープンソース(GPL v2) • 複数アーキテクチャ対応 • 世界で最も成功している OSS プロジェクトの一つ
  • 65. Copyright Drecom Co., Ltd. All Rights Reserved. 65 Linux Copyright Drecom Co., Ltd. All Rights Reserved. リリース間隔 2∼3ヶ月 変更コード 200万行以上 参加企業 200社以上 アップストリーム開発
  • 66. Copyright Drecom Co., Ltd. All Rights Reserved. 66 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  • 67. Copyright Drecom Co., Ltd. All Rights Reserved. 67 アップストリーム開発 オープンソースソフトウェアに対して 企業が行ったソースコード修正を 元のオープンソースプロジェクトに 還流させるプロセス アップストリームファーストは還流を 第一優先で考えること
  • 68. photo by Alan  Doyle アップストリームへ還流 (イメージ図)
  • 69. Copyright Drecom Co., Ltd. All Rights Reserved. 69 アップストリーム開発 自社特有の処理は自社でメンテナンスし 汎用化可能なソースコードを還流する リリースを追いながら自社の処理も 追加できる開発手法
  • 70. Copyright Drecom Co., Ltd. All Rights Reserved. 70 アップストリーム開発 修正を還流するためメインストリーム の最新を追いかける必要があり、 バージョン変更のコストを下げるのが 必須になる バージョン変更のコストを抑えられる
  • 71. Copyright Drecom Co., Ltd. All Rights Reserved. 71 自社でメンテナンス
  • 72. Copyright Drecom Co., Ltd. All Rights Reserved. 72 自社でメンテナンス l追加した処理をメンテし続ける lアップストリームが verup - 自社の変更点をすべて移行 - 時間がたつほど移行対象が増える lこれはうまく行った例
  • 73. Copyright Drecom Co., Ltd. All Rights Reserved. 73 自社でメンテナンス(2)
  • 74. Copyright Drecom Co., Ltd. All Rights Reserved. 74 自社でメンテナンス(3) lバージョンアップがうまくいくと は限らない l同じバージョンを使い続ける可能 性も… lバージョンアップは新しいフレー ムワークを作成する時
  • 75. Copyright Drecom Co., Ltd. All Rights Reserved. 75 自社でメンテナンス(4) lメリット - 変更のスピードが速い - やりたい放題 lデメリット - 変更すればするほど verup が困難 - 独自フレームワーク化 - 新機能が利用できない
  • 76. Copyright Drecom Co., Ltd. All Rights Reserved. 76 アップストリーム開発
  • 77. Copyright Drecom Co., Ltd. All Rights Reserved. 77 アップストリーム開発(2) l自社の処理をメインラインへ還流 l対象プロジェクトが verup - 最小限の自社の変更点を移行 - 移行対象は減らせる
  • 78. Copyright Drecom Co., Ltd. All Rights Reserved. 78 アップストリーム開発(3) l新機能を利用可能 l最新版を追える状況になる lバージョンアップは Cocos2d-x を利用する過程でしかない
  • 79. Copyright Drecom Co., Ltd. All Rights Reserved. 79 アップストリーム開発(4) lメリット - 最新版を追いやすい - 新機能が利用可能 - (受け入れられれば)メンテコスト減 lデメリット - 追い続けなければいけない - 反映されるまで遅い(保障もなし)
  • 80. photo by Sudhamshu  Hebbar アップストリーム開発 採用基準 はどうやった?
  • 81. Copyright Drecom Co., Ltd. All Rights Reserved. 81 アップストリーム開発採用判断基準 lオープンさ l機能追加の頻度 lプロジェクトの熱量 lスポンサー
  • 82. Copyright Drecom Co., Ltd. All Rights Reserved. 82 はどう? オープンさ どうして? プロジェクトの進捗が見えるのでプロジェクト の方向性を見通しやすい。そのため追いかけや すい環境になる。 Trello でリリースのロードマップ提示 github 上で進捗管理 オープンさは十分
  • 83. Copyright Drecom Co., Ltd. All Rights Reserved. 83 はどう? 追加機能の頻度 どうして? 機能追加があるからこそアップストリームを追 う利点がある。追加機能がないのであれば追う 必要はない。 バージョンアップ時に5∼10万行追加 新機能・新プラットフォームの対応 最新版を追う利点はある
  • 84. Copyright Drecom Co., Ltd. All Rights Reserved. 84 はどう? プロジェクトの熱量 どうして? 参加する開発者が多いことで機能追加の勢いや 品質の高さにも影響する。 github の Pull Request が 100件以上 Cocos2d-x のフォーラムも活発
  • 85. Copyright Drecom Co., Ltd. All Rights Reserved. 85 はどう? スポンサー どうして? 実績がないと契約されない。(お金👌の関係 is シビア)安定したプロダクト運用を要求される。 数が多いに越したことはない。 SoC メーカから携帯端末メーカ、パブリッ シャーまでスポンサー、パートナーシップを組 んでいる。
  • 86. photo by Brett  Sayer Cocos2d-x とは どう付き合っている?
  • 87. Copyright Drecom Co., Ltd. All Rights Reserved. 87 github 自社gitlab clone pull Cocos2d-x と付き合うブランチ戦略
  • 88. Copyright Drecom Co., Ltd. All Rights Reserved. 88 Cocos2d-x と付き合うブランチ戦略(2) lgithub から clone, pull してリポ ジトリを同期する l自社ブランチをリリースタグから 作成、変更点追加 l前ブランチから変更点を merge lリリース毎に繰り返す
  • 89. Copyright Drecom Co., Ltd. All Rights Reserved. 89 ブランチ戦略の利点 lgithub と同期しながら変更点を 自社で管理し続けられる lgit リポジトリが同期しているの で Cocos2d-x メインストリーム へ送付する Pull request 作成が 低コストになる
  • 90. Copyright Drecom Co., Ltd. All Rights Reserved. 90 アプリケーションでの利用方法 アプリ自社gitlab Classes Resources proj 群 cocos2dsubmodule v3.3v3.4v3.5
  • 91. Copyright Drecom Co., Ltd. All Rights Reserved. 91 アプリケーションでの利用方法(2) lアプリ内の Cocos2d-x ディレク トリを git サブモジュールとして 扱う l利用したいバージョンのブランチ を指定する
  • 92. Copyright Drecom Co., Ltd. All Rights Reserved. 92 この利用方法の利点 lアプリケーション側で利用する Cocos2d-x のバージョン変更が 気軽になる。 lアプリケーションを開発しつつ Cocos2d-x のソース修正が可能 Pull Request 作成が低コストに なる
  • 93. Copyright Drecom Co., Ltd. All Rights Reserved. 93 アップストリーム開発を採用したので lCocos2d-x の最新版が利用可能 lバージョンも利用可能な土壌が出 来上がった。 l変更を還流するので社外の人もハ ッピー(になる予定)
  • 94. Copyright Drecom Co., Ltd. All Rights Reserved. 94 バージョン 選択 アップストリームで バージョン選択可能に⃝ コンセプト 機能選択 ゲーム以外の アプリで利用 ⃝ サブモジュール化で 利用機能を選択可能に ⃝ bisque 独立により 必要最低限のバイナリ
  • 95. Copyright Drecom Co., Ltd. All Rights Reserved. 95 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  • 96. Copyright Drecom Co., Ltd. All Rights Reserved. 96 アップストリーム開発
  • 97. Copyright Drecom Co., Ltd. All Rights Reserved. 97 Cocos2d-x 2.xから3.xで大きく変化した事
  • 98. Copyright Drecom Co., Ltd. All Rights Reserved. 98 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連
  • 99. Copyright Drecom Co., Ltd. All Rights Reserved. 99 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・C++11準拠
  • 100. Copyright Drecom Co., Ltd. All Rights Reserved. 100 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・3D機能
  • 101. Copyright Drecom Co., Ltd. All Rights Reserved. 101 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・描画処理
  • 102. Copyright Drecom Co., Ltd. All Rights Reserved. 102 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・ローカスストレージ機能
  • 103. Copyright Drecom Co., Ltd. All Rights Reserved. 103 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連・スクリプト関連
  • 104. Copyright Drecom Co., Ltd. All Rights Reserved. 104 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 他にも色々 FileUtil Font MathLib 3D Socket MySQL ScriptBind
  • 105. Copyright Drecom Co., Ltd. All Rights Reserved. 105 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・描画処理
  • 106. Copyright Drecom Co., Ltd. All Rights Reserved. 106 Director drawScene() Scene addChild() visit() Sprite visit() draw() OpenGL  ES API glDrawArrays()version2
  • 107. Copyright Drecom Co., Ltd. All Rights Reserved. 107 Director drawScene() render() Scene addChild() visit() render() Sprite visit() draw() Renderer addCommand() render() drawXXXX() OpenGL  ES API glDrawElements() version3
  • 108. Copyright Drecom Co., Ltd. All Rights Reserved. 108 Director drawScene() render() Scene addChild() visit() render() Sprite visit() draw() Renderer addCommand() render() drawXXXX() OpenGL  ES API glDrawElements() RenderCommand RenderCommand version3
  • 109. Copyright Drecom Co., Ltd. All Rights Reserved. 109 Director drawScene() render() Scene addChild() visit() render() Sprite visit() draw() Renderer addCommand() render() drawXXXX() OpenGL  ES API glDrawArrays() glDrawElements() RenderCommand RenderCommand version2 version3
  • 110. Copyright Drecom Co., Ltd. All Rights Reserved. 110 ・Rendererクラスの追加 ・Drawメソッドの変更 ・Draw Callに関する変更
  • 111. Copyright Drecom Co., Ltd. All Rights Reserved. 111 ・Draw Callに関する変更 ・基本的にglDrawArraysはglDrawElementsへ変更
  • 112. Copyright Drecom Co., Ltd. All Rights Reserved. 112 ・Draw Callに関する変更 ・基本的にglDrawArraysはglDrawElementsへ変更 ・VAO/VBOの積極的な利用
  • 113. Copyright Drecom Co., Ltd. All Rights Reserved. 113 ・Rendererクラスの追加 ・RendererにQueueされたRenderCommandを まとめてソート、実行する描画処理 Renderer RenderCommand RenderCommand RenderCommand Sprite::draw() OpenGL  ES  API glDrawElements() Sprite::draw() Sprite::draw()
  • 114. Copyright Drecom Co., Ltd. All Rights Reserved. 114 ・Rendererクラスの追加 ・RendererにQueueされたRenderCommandを まとめてソート、実行する描画処理 ・RenderCommandによる振る舞いの変化
  • 115. Copyright Drecom Co., Ltd. All Rights Reserved. 115 ・Rendererクラスの追加 ・RendererにQueueされたRenderCommandを まとめてソート、実行する描画処理 ・RenderCommandによる振る舞いの変化 TrianglesCommand CustomCommand BatchCommand GroupCommand MeshCommand QuadCommand
  • 116. Copyright Drecom Co., Ltd. All Rights Reserved. 116 ・Rendererクラスの追加 ・RendererにQueueされたRenderCommandを まとめてソート、実行する描画処理 ・RenderCommandによる振る舞いの変化 ・Global/Local Z Orderの概念
  • 117. Copyright Drecom Co., Ltd. All Rights Reserved. 117 ・Drawメソッドの変更 ・RendererのQueueに対してRenderCommandを追加 Sprite::draw() glDrawArrays() version2
  • 118. Copyright Drecom Co., Ltd. All Rights Reserved. 118 ・Drawメソッドの変更 ・RendererのQueueに対してRenderCommandを追加 Sprite::draw() glDrawArrays() RendererSprite::draw() glDrawElements() version2 version3
  • 119. Copyright Drecom Co., Ltd. All Rights Reserved. 119 ・Drawメソッドの変更 ・RendererのQueueに対してRenderCommandを追加 ・CustomCommandによるコールバック処理 Renderer Sprite::draw() Sprite::callback() glDrawElements()
  • 120. Copyright Drecom Co., Ltd. All Rights Reserved. 120 ・Rendererクラスの追加 ・Drawメソッドの変更 ・Draw Callに関する変更
  • 121. Copyright Drecom Co., Ltd. All Rights Reserved. 121 Cocos2d-xを利用する上での パフォーマンス・チューニング
  • 122. Copyright Drecom Co., Ltd. All Rights Reserved. 122 ・アップストリーム開発を行う上で ・メインストリームに対応していく
  • 123. Copyright Drecom Co., Ltd. All Rights Reserved. 123 ・アップストリーム開発を行う上で ・メインストリームに対応していく ・原則としてCocos2d-xのソースコードには 手を入れない
  • 124. Copyright Drecom Co., Ltd. All Rights Reserved. 124 ・アップストリーム開発を行う上で ・メインストリームに対応していく ・原則としてCocos2d-xのソースコードには 手を入れない ・バグ修正やチューニングはpull request等で 積極的に展開していく
  • 125. Copyright Drecom Co., Ltd. All Rights Reserved. 125 ・Cocos2d-xとの付き合い方 ・そもそもCocos2d-x自体はパフォーマンス重視 というよりも実装コストの軽減や汎用性を 重視している
  • 126. Copyright Drecom Co., Ltd. All Rights Reserved. 126 ・Cocos2d-xとの付き合い方 ・そもそもCocos2d-x自体はパフォーマンス重視 というよりも実装コストの軽減や汎用性を 重視している ・Cocos2d-xの機能を最大限に利用しながら パフォーマンスの改善を目指す
  • 127. Copyright Drecom Co., Ltd. All Rights Reserved. 127 ・パフォーマンス・チューニング上の前提 ・Cocos2d-xで実装されている機能を利用する為、 グラフィックスAPIはOpenGL ESを利用
  • 128. Copyright Drecom Co., Ltd. All Rights Reserved. 128 ・パフォーマンス・チューニング上の前提 ・Cocos2d-xで実装されている機能を利用する為、 グラフィックスAPIはOpenGL ESを利用 iOS AppleA7 Metal Android -­ Vulkan
  • 129. Copyright Drecom Co., Ltd. All Rights Reserved. 129 ・パフォーマンス・チューニング上の前提 ・Cocos2d-xで実装されている機能を利用する為、 グラフィックスAPIはOpenGL ESを利用 ・2Dのコマ割りアニメーションによる表現手法に 対して問題と成り得る箇所を探る
  • 130. Copyright Drecom Co., Ltd. All Rights Reserved. 130 ・CPU側の問題 ・GPU側の問題 ・CPU/GPU共通の問題
  • 131. Copyright Drecom Co., Ltd. All Rights Reserved. 131 ・CPU側の問題 ・Draw Callの問題
  • 132. Copyright Drecom Co., Ltd. All Rights Reserved. 132 ・CPU側の問題 ・Draw Callの問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); glDrawElements
  • 133. Copyright Drecom Co., Ltd. All Rights Reserved. 133 ・CPU側の問題 ・Draw Callの問題 Draw Callに関するOpenGL ESのAPIは 呼び出し回数がボトルネックに繋がる為 呼び出し回数を抑える
  • 134. Copyright Drecom Co., Ltd. All Rights Reserved. 134 ・CPU側の問題 ・Draw Callの問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0);
  • 135. Copyright Drecom Co., Ltd. All Rights Reserved. 135 ・CPU側の問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); ・Draw Callの問題(Cocos2d-x) glDrawElements
  • 136. Copyright Drecom Co., Ltd. All Rights Reserved. 136 ・CPU側の問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); ・Draw Callの問題(Cocos2d-x) glDrawElements Texture  /  Shader
  • 137. Copyright Drecom Co., Ltd. All Rights Reserved. 137 ・CPU側の問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); ・Draw Callの問題(Cocos2d-x) glDrawElements Vertex
  • 138. Copyright Drecom Co., Ltd. All Rights Reserved. 138 ・CPU側の問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); ・Draw Callの問題(Cocos2d-x) glDrawElements Vertex Texture  /  Shader
  • 139. Copyright Drecom Co., Ltd. All Rights Reserved. 139 ・CPU側の問題 ・CustomCommandによるコールバック処理 ・Global/Local Z Orderの概念 ・Drawメソッドの変更 ・Rendererクラスの追加
  • 140. Copyright Drecom Co., Ltd. All Rights Reserved. 140 ・CPU側の問題 ・CustomCommandによるコールバック処理 ・Global/Local Z Orderの概念 RenderCommand RenderCommand RenderCommand RenderCommand RenderCommand RenderCommand RenderCommand CustomCommand RenderCommand RenderCommand
  • 141. Copyright Drecom Co., Ltd. All Rights Reserved. 141 ・CPU側の問題 ・CustomCommandによるコールバック処理 ・Global/Local Z Orderの概念 ・Drawメソッドの変更 ・Rendererクラスの追加
  • 142. Copyright Drecom Co., Ltd. All Rights Reserved. 142 ・CPU側の問題 ・Cocos2d-xのversion3ではAPI呼び出し回数の削減 に対する最適化はきちんと行われている ・Cocos2d-xの最適化の手法を理解した上で、 手法に沿った手段を用いて実装を
  • 143. Copyright Drecom Co., Ltd. All Rights Reserved. 143 ・ピクセル処理の問題 ・GPU側の問題
  • 144. Copyright Drecom Co., Ltd. All Rights Reserved. 144 ・ピクセル処理の問題 ・オーバードロー ・フラグメントシェーディング ・GPU側の問題
  • 145. Copyright Drecom Co., Ltd. All Rights Reserved. 145 ・ピクセル処理の問題「オーバードロー」 ・1ピクセルに対して2回以上の描画処理 ・GPU側の問題
  • 146. Copyright Drecom Co., Ltd. All Rights Reserved. 146 ・ピクセル処理の問題「オーバードロー」 ・奥から手前への描画 ・アルファブレンド ・GPU側の問題
  • 147. Copyright Drecom Co., Ltd. All Rights Reserved. 147 ・ピクセル処理の問題「オーバードロー」 ・奥から手前への描画 ・アルファブレンド=奥から手前への描画 ・GPU側の問題
  • 148. Copyright Drecom Co., Ltd. All Rights Reserved. 148 ・ピクセル処理の問題「オーバードロー」 ・奥から手前への描画 ・アルファブレンド→透過部分を最小限に ・GPU側の問題
  • 149. Copyright Drecom Co., Ltd. All Rights Reserved. 149 ・ピクセル処理の問題「オーバードロー」 ・SpritePolygonの利用 ・GPU側の問題
  • 150. Copyright Drecom Co., Ltd. All Rights Reserved. 150 ・ピクセル処理の問題「フラグメントシェーディング」 ・シェーダーのパフォーマンス ・GPU側の問題
  • 151. Copyright Drecom Co., Ltd. All Rights Reserved. 151 ・ピクセル処理の問題「フラグメントシェーディング」 ・シェーダーのパフォーマンス 複雑な処理を避ける 分岐の数を減らす ループを無くす 演算精度を下げる※ ・GPU側の問題
  • 152. Copyright Drecom Co., Ltd. All Rights Reserved. 152 ・透過部分の範囲を狭く、重なりを浅く ・SpritePolygonの利用を検討 ・独自のシェーダーについての最適化 ・サードパーティのシェーダーの確認 ・GPU側の問題 ・オーバードロー ・フラグメントシェーディング
  • 153. Copyright Drecom Co., Ltd. All Rights Reserved. 153 ・GPUによって 部分的にパフォーマンスが異なる 最適なチューニング箇所が異なる ・Cocos2d-xを利用する上でもGPUの理解を ・GPU側の問題
  • 154. Copyright Drecom Co., Ltd. All Rights Reserved. 154 ・CPU/GPU共通の問題 ・メモリ帯域幅の問題
  • 155. Copyright Drecom Co., Ltd. All Rights Reserved. 155 ・CPU/GPU共通の問題 ・メモリ帯域幅の問題 ・iPhone5:AppleA6で8.5GB/sec程度 ・iPhone5s:AppleA7で15GB/sec程度
  • 156. Copyright Drecom Co., Ltd. All Rights Reserved. 156 ・CPU/GPU共通の問題 ・メモリ帯域幅の問題 ・メモリとその帯域幅はCPU/GPUで共有 CPU GPU MEM  /  VRAM
  • 157. Copyright Drecom Co., Ltd. All Rights Reserved. 157 ・CPU/GPU共通の問題 ・メモリ帯域幅の問題 ・メモリとその帯域幅はCPU/GPUで共有 CPU GPU MEM  /  VRAM マルチスレッド テクスチャ
  • 158. Copyright Drecom Co., Ltd. All Rights Reserved. 158 ・CPU/GPU共通の問題 オブジェクトサイズ/数の削減 テクスチャサイズ/数の削減 圧縮テクスチャの利用 マルチテクスチャ等の再考 ・メモリ帯域幅の問題
  • 159. Copyright Drecom Co., Ltd. All Rights Reserved. 159 ・CPU/GPU共通の問題 ・CPUやGPUそれぞれの最適化だけでは 解消されない問題 ・パフォーマンスに大きな影響を与えるが、 表面化しづらい
  • 160. Copyright Drecom Co., Ltd. All Rights Reserved. 160 ・CPU側の問題 ・GPU側の問題 ・CPU/GPU共通の問題
  • 161. Copyright Drecom Co., Ltd. All Rights Reserved. 161 まとめ
  • 170. Any Questions? photo by Matthias  Ripp
  • 171. Copyright Drecom Co., Ltd. All Rights Reserved. 171 ご静聴ありがとうございました
  • 172. Copyright Drecom Co., Ltd. All Rights Reserved. 172 参考文献
  • 173. Copyright Drecom Co., Ltd. All Rights Reserved. 173 参考文献 lオープンソースにおけるアップス トリーム開発の意義