Hi !
I'm continuing working with godot, and adapting to my own needs.
Now I've picked up official stable branch 3.0.2 and readapted to build without scons, using Visual studio only. (Currently only windows, plan to enable Android support back later on).
To anyone, who might be interested - godot project + patches to it:
https://drive.google.com/open?id=1fg3MnahN1uZ6iSW_YFoy7YSXL9hpmqby
I've now also enabled libtheora & libvorbis compilation as well (previously they were disabled).
I'm not sure if I'll contribute this change to godot git, as this is parallel build system to scons, and to my best understading it will be not easy to change, and requires some agreements to be made on used build tools / files generation. (Currently there is a lot of .gen. files, which must be present in build area in order for my project to pick up compilation after that).
I have multiple questions, maybe I mark them each with number, answer to whichever you can.
1) "thirdparty\thekla_atlas\nvmesh\BaseMesh.cpp" / QuadTriMesh.cpp
I had to add extra include:
#include "../nvcore/Array.inl"
So I'm still bit puzzles which define, include directory or compilation flag I need to turn on, in order to avoid adding this include.
Without it source code does not compile with following error:
1>BaseMesh.obj : error LNK2019: unresolved external symbol "class nv::Stream & cdecl nv::operator<<<struct nv::BaseMesh::Vertex>(class nv::Stream &,class nv::Array<struct nv::BaseMesh::Vertex> &)" (??$?6UVertex@BaseMesh@nv@@@nv@@YAAAVStream@0@AAV10@AAV?$Array@UVertex@BaseMesh@nv@@@0@@Z) referenced in function "class nv::Stream & cdecl nv::operator<<(class nv::Stream &,class nv::BaseMesh &)" (??6nv@@YAAAVStream@0@AAV10@AAVBaseMesh@0@@Z)
1>VertexWeld.obj : error LNK2019: unresolved external symbol "public: void thiscall nv::Array<struct nv::BaseMesh::Vertex>::resize(unsigned int)" (?resize@?$Array@UVertex@BaseMesh@nv@@@nv@@QAEXI@Z) referenced in function "public: unsigned int thiscall nv::Weld<struct nv::BaseMesh::Vertex,struct nv::Hash<struct nv::BaseMesh::Vertex>,struct nv::Equal<struct nv::BaseMesh::Vertex> >::operator()(class nv::Array<struct nv::BaseMesh::Vertex> &,class nv::Array<unsigned int> &)" (??R?$Weld@UVertex@BaseMesh@nv@@U?$Hash@UVertex@BaseMesh@nv@@@3@U?$Equal@UVertex@BaseMesh@nv@@@3@@nv@@QAEIAAV?$Array@UVertex@BaseMesh@nv@@@1@AAV?$Array@I@1@@Z)
1>bin\ReleaseDebug\godot_windows.exe : fatal error LNK1120: 2 unresolved externals
To my best understanding array.h is declaring template function, which is implemented in array.inl, but noone ever includes array.inl, causing missing function to be born. Does anyone has any idea why this works in current godot compile stage and does not work in my environment.
2) Link time of godot 3.0.2 dropped to something like 20 seconds per link, which is quite bad performance.
Just tried to compare with scons, and it has something like 24 seconds link time (one code line change).
I've harvested already some dynamic link library / shared object support - and to my understanding it's currently non-trivial
/ considered as non-mandatory:
https://github.com/godotengine/godot/issues/3936
https://godotengine.org/qa/16495/getting-c-to-compile-as-a-shared-object-dll
With partially supported system - as it's possible to make custom modules:
http://docs.godotengine.org/en/stable/development/cpp/custom_modules_in_cpp.html
Does makes any sense godot splitted into multiple custom modules ?
Previous version of godot which I have took from trunk was slightly faster, I suspect there are too many 3rd party libraries, also now bullet library.