ff3099abcf
This commit changes the way Thread::caller_id works. By moving caller_id to the .cpp file we make sure that the TLS variable doesn't get relocated twice causing a crash. Since we build with LTO for release builds (and everyone should be doing that anyway) there is no extra overhead from the non-static method. We do do an extra bool check now there but I don't think this will add much in the way of overhead. This check cannot be avoided if we still want to be able to cache the thread ID hash, as we had to move the setter because of limitations of the WinRT platform. The original workaround for this was in #46813 but this has some unintended consequences. Specifically; threads that never create a Thread object will always return 0 in Thread::get_caller_id() which caused a regression. For instance the editor now freezes when importing large textures. This PR also addresses that. Additionally we now enable ASLR support when building with MingW, this includes a workaround for MingW. MingW refuses to create an appropriate relocation table if no symbols are exported. So we just export the various main() functions in godot_windows.cpp. While ASLR support isn't criticial for Godot, previous versions of Godot just happened to work with a dynamic base 'by accident' and some users run Godot this way. After the thread change the .tls section now needs relocations to make this work. By enabling ASLR at build-time we create these relocations and people who forced ALSR on previously will now get a working Godot again. This fixes #47256 and fixes #47219 This is the 3.x version of this PR. For master a different approach is possible which I will make in the coming days. |
||
---|---|---|
.github | ||
core | ||
doc | ||
drivers | ||
editor | ||
main | ||
misc | ||
modules | ||
platform | ||
scene | ||
servers | ||
thirdparty | ||
.clang-format | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
AUTHORS.md | ||
CHANGELOG.md | ||
compat.py | ||
CONTRIBUTING.md | ||
COPYRIGHT.txt | ||
DONORS.md | ||
gles_builders.py | ||
icon.png | ||
icon.svg | ||
LICENSE.txt | ||
LOGO_LICENSE.md | ||
logo.png | ||
logo.svg | ||
methods.py | ||
platform_methods.py | ||
README.md | ||
SConstruct | ||
version.py |
Godot Engine
2D and 3D cross-platform game engine
Godot Engine is a feature-packed, cross-platform game engine to create 2D and 3D games from a unified interface. It provides a comprehensive set of common tools, so that users can focus on making games without having to reinvent the wheel. Games can be exported in one click to a number of platforms, including the major desktop platforms (Linux, macOS, Windows), mobile platforms (Android, iOS), as well as Web-based platforms (HTML5) and consoles.
Free, open source and community-driven
Godot is completely free and open source under the very permissive MIT license. No strings attached, no royalties, nothing. The users' games are theirs, down to the last line of engine code. Godot's development is fully independent and community-driven, empowering users to help shape their engine to match their expectations. It is supported by the Software Freedom Conservancy not-for-profit.
Before being open sourced in February 2014, Godot had been developed by Juan Linietsky and Ariel Manzur (both still maintaining the project) for several years as an in-house engine, used to publish several work-for-hire titles.
Getting the engine
Binary downloads
Official binaries for the Godot editor and the export templates can be found on the homepage.
Compiling from source
See the official docs for compilation instructions for every supported platform.
Community and contributing
Godot is not only an engine but an ever-growing community of users and engine developers. The main community channels are listed on the homepage.
To get in touch with the engine developers, the best way is to join the Godot Contributors Chat.
To get started contributing to the project, see the contributing guide.
Documentation and demos
The official documentation is hosted on ReadTheDocs. It is maintained by the Godot community in its own GitHub repository.
The class reference is also accessible from the Godot editor.
The official demos are maintained in their own GitHub repository as well.
There are also a number of other learning resources provided by the community, such as text and video tutorials, demos, etc. Consult the community channels for more information.