AtomicGameEngine - Source(1)
今回からはソースコード見ていく。
今までは気分でMacBookAirで作業してたけど、Windowsマシンの方が大分スペックいいので、Windowsに切り替える。あとXcodeよりVSのデバッグの方が慣れてる。最初からWindowsでやれよってことだが(笑)
> ./Build_Atomic_bat --vs2017
でビルド。
"C:\Users\k\Desktop\Atomic\AtomicGameEngine\Artifacts\Build\Windows\Atomic.sln" (LibCpuId;AtomicNETNative ターゲット) (1) -> "C:\Users\k\Desktop\Atomic\AtomicGameEngine\Artifacts\Build\Windows\Source\AtomicNET\NETNative\AtomicNETNative.vcxproj.metaproj" (既定のターゲ ット) ( 5) -> "C:\Users\k\Desktop\Atomic\AtomicGameEngine\Artifacts\Build\Windows\Source\Atomic\Atomic.vcxproj.metaproj" (既定のターゲット) (6) -> "C:\Users\k\Desktop\Atomic\AtomicGameEngine\Artifacts\Build\Windows\Source\Atomic\Atomic.vcxproj" (既定のターゲット) (66) -> (ClCompile ターゲット) -> C:\Users\k\Desktop\Atomic\AtomicGameEngine\Source\Atomic\UI\UI.cpp(305): error C2001: 定数が 2 行目に続いています。 [C:\Users\k\Desktop\Atom ic\AtomicGam eEngine\Artifacts\Build\Windows\Source\Atomic\Atomic.vcxproj] C:\Users\k\Desktop\Atomic\AtomicGameEngine\Source\Atomic\UI\UI.cpp(306): error C2059: 構文エラー: '}' [C:\Users\k\Desktop\Atomic\AtomicGameE ngin e\Artifacts\Build\Windows\Source\Atomic\Atomic.vcxproj] 950 個の警告 2 エラー 経過時間 00:03:48.04 C:\Users\k\Desktop\Atomic\AtomicGameEngine\Build\node_modules\jake\lib\api.js:340 throw errObj; ^ Error: Process exited with error. at api.fail (C:\Users\k\Desktop\Atomic\AtomicGameEngine\Build\node_modules\jake\lib\api.js:336:18) at null.<anonymous> (C:\Users\k\Desktop\Atomic\AtomicGameEngine\Build\node_modules\jake\lib\utils\index.js:124:9) at emitTwo (events.js:88:13) at emit (events.js:173:7) at ChildProcess.<anonymous> (C:\Users\k\Desktop\Atomic\AtomicGameEngine\Build\node_modules\jake\lib\utils\index.js:227:20) at emitTwo (events.js:88:13) at ChildProcess.emit (events.js:173:7) at Process.ChildProcess._handle.onexit (internal/child_process.js:201:12) PS C:\Users\k\Desktop\Atomic\AtomicGameEngine>
http://landinghub.visualstudio.com/visual-cpp-build-tools
構文エラーだと?
で、ソース見ると
\Source\Atomic\UI\UI.cpp
* * * void UI::SetDefaultFont(const String& name, int size) { tb::TBFontDescription fd; fd.SetID(tb::TBIDC(name.CString())); fd.SetSize(tb::g_tb_skin->GetDimensionConverter()->DpToPx(size)); tb::g_font_manager->SetDefaultFontDescription(fd); // Create the font now. tb::TBFontFace *font = tb::g_font_manager->CreateFontFace(tb::g_font_manager->GetDefaultFontDescription()); // Render some glyphs in one go now since we know we are going to use them. It would work fine // without this since glyphs are rendered when needed, but with some extra updating of the glyph bitmap. if (font) font->RenderGlyphs(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~•·åäöÅÄÖ"); } * * *
この関数の最後の文
font->RenderGlyphs(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_
abcdefghijklmnopqrstuvwxyz{|}~•·åäöÅÄÖ");`
でエラーが出てる。
エラーの感じから2行目も定数として解釈しちゃってる。けど、エディタ的には問題なし。コンパイルの時のエンコードに問題がある?とりあえず最後のオングストローム系の文字とダブルクォーテーションで超反応が起きてるんだろって思って、最後の6つ消してもう一回ビルドしたらいけた(笑) そんな感じで調べたら、最後の3つのアルファベットのすぐ後ろにダブルクォーテーションがあったらダメってことが分かった。とりあえず、最初のスペース文字を最後に持ってきて解決。
で、
ビルドに成功しました。 0 個の警告 0 エラー 経過時間 00:00:06.58 C:\Users\k\Desktop\Atomic2\AtomicGameEngine/Artifacts/Build/AtomicTool/AtomicTool.exe net compil e C:\Users\k\Desktop\Atomic2\AtomicGameEngine/Script/AtomicNET/AtomicNETProject.json -platform d esktop -config Release -toolversion VS2017 -toolbootstrap 指定されたパスが見つかりません。 C:\Users\k\Desktop\Atomic2\AtomicGameEngine\Build\node_modules\jake\lib\api.js:340 throw errObj; ^ Error: Process exited with error. at api.fail (C:\Users\k\Desktop\Atomic2\AtomicGameEngine\Build\node_modules\jake\lib\api.js: 336:18) at null.<anonymous> (C:\Users\k\Desktop\Atomic2\AtomicGameEngine\Build\node_modules\jake\lib \utils\index.js:124:9) at emitTwo (events.js:88:13) at emit (events.js:173:7) at ChildProcess.<anonymous> (C:\Users\k\Desktop\Atomic2\AtomicGameEngine\Build\node_modules\ jake\lib\utils\index.js:227:20) at emitTwo (events.js:88:13) at ChildProcess.emit (events.js:173:7) at Process.ChildProcess._handle.onexit (internal/child_process.js:201:12)
ビルドに成功したっぽいけど、nodejsの方でエラー。コマンドラインでのビルドじゃなくてVSの方でやってみる。ってことで、AtomicGameEngineのGithubのサイトにある手順通りに操作を行えばできる・./CMake_VS2017.bat
を実行。で、カレントの上のディレクトリにAtomicGameEngine-VS2017
ってプロジェクトフォルダが生成される。で、Atomic.slnを開いて、AtomicEditor
をスタートアッププロジェクトにして、あとは、Build&Run。おけーできた。
AtomigGameEngine/Sourceの中にある、ソースファイルの中で、Atomicさん自身のコピーライト"// Copyright © 2014-2016 THUNDERBEAST GAMES LLC"がついてるファイルが198個あって、Uroho3Dのコピーライトがついてるファイルが489個あった。大部分は、Urho3Dのソースでできてると思われる。AtomicGameEngineの使ってるThirdParty製のライブラリのほとんどがUrho3Dが使ってるもの。Urho3DのことはUrho3Dのサイトみたらよく分かる。
AtomicEditor/Application/Main.cpp
で、このソースファイルから始まる。
やっぱりVisualStudio有能。プリプロセッサで除外される部分は、テキストの色が薄くなってる。「ゲームエンジン・アーキテクチャ 第2版(ジェイソン・グレゴリー著)」に載ってる基本的なVSのデバッグ機能が下。
こいつら最強すぎますよね。
ひたすらprintfデバッグしてた人が初めて知ったときは革命のはず。
で、ソースを見ていってるんだけど、、、Urho3Dが何を提供してるのか先にざっと見たくなった。そうしたら、そいつらをAtomicがどういう意図で使ってるのか分かりやすいと思う気がする。
ってことで、この記事はここまで(笑)。
終わる前に
ThirdParty Library | Atomic | Urho3D |
---|---|---|
AngelScript | 〇 | |
ASIO | 〇 | |
Assimp | 〇 | 〇 |
boost | 〇 | |
Box2D | 〇 | 〇 |
Bullet | 〇 | 〇 |
Civetweb | 〇 | 〇 |
Detour | 〇 | 〇 |
DetourCrowd | 〇 | 〇 |
DetourTileCache | 〇 | 〇 |
Duktape | 〇 | |
easy_profiler | 〇 | |
FreeType | 〇 | 〇 |
GLEW | 〇 | 〇 |
ik | 〇 | 〇 |
imgui | 〇 | |
JO | 〇 | 〇 |
kNet | 〇 | 〇 |
LibCpuId | 〇 | 〇 |
libcurl | 〇 | |
libsquish | 〇 | |
Lua | 〇 | |
LuaJIT | 〇 | |
LZ4 | 〇 | 〇 |
MojoShader | 〇 | 〇 |
Mustache | 〇 | 〇 |
nanodbc | 〇 | 〇 |
nativefiledialog | 〇 | |
openssl | 〇 | |
Poco | 〇 | |
PugiXml | 〇 | 〇 |
rapidjson | 〇 | 〇 |
Recast | 〇 | 〇 |
SDL | 〇 | 〇 |
SQLite | 〇 | 〇 |
StanHull | 〇 | 〇 |
STB | 〇 | 〇 |
toluapp | 〇 | |
TurboBadger | 〇 | |
WebP | 〇 | 〇 |
WebSocketPP | 〇 | |
zlib | 〇 |
Atomicに使われてるThirdParty製のライブラリで、もともとUrho3Dが使ってるThirdParty製のライブラリ