KK PROJEKT RED 勉強ブログ

ゲーム好き技術系大学生のメモのようなもの

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製のライブラリ