60. Copyright Drecom Co., Ltd. All Rights Reserved. 60
バージョン選択要件
l全バージョンを選択できる
l全バージョンに自社機能を簡単に
入れられる
l上記2つを低コストで実現できる
61. Copyright Drecom Co., Ltd. All Rights Reserved. 61
バージョン選択状況
lCocos2d-x のメインストリーム
は常に変化し続ける
lCocos2d-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オープンソースとの付き合い方
lCocos2d-x を利用する
67. Copyright Drecom Co., Ltd. All Rights Reserved. 67
アップストリーム開発
オープンソースソフトウェアに対して
企業が行ったソースコード修正を
元のオープンソースプロジェクトに
還流させるプロセス
アップストリームファーストは還流を
第一優先で考えること
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共通の問題