diff --git a/.github/workflows/build_offline_docs.yml b/.github/workflows/build_offline_docs.yml index 732fca19b7e..ce81194bcf0 100644 --- a/.github/workflows/build_offline_docs.yml +++ b/.github/workflows/build_offline_docs.yml @@ -29,7 +29,7 @@ jobs: - name: Sphinx - Build HTML run: make SPHINXOPTS='--color' html - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: godot-docs-html-${{ matrix.branch }} path: _build/html @@ -51,7 +51,7 @@ jobs: make SPHINXOPTS='--color' epub - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: godot-docs-epub-${{ matrix.branch }} path: _build/epub/GodotEngine.epub diff --git a/.github/workflows/sync_class_ref.yml b/.github/workflows/sync_class_ref.yml index 62afa39e57a..60586e1cf8a 100644 --- a/.github/workflows/sync_class_ref.yml +++ b/.github/workflows/sync_class_ref.yml @@ -2,15 +2,10 @@ name: Sync Class Reference on: workflow_dispatch: - # Scheduled updates only run on the default/master branch. - schedule: - # Run it at night (European time) every Saturday. - # The offset is there to try and avoid the high load times. - - cron: '15 3 * * 6' # Make sure jobs cannot overlap. concurrency: - group: classref-sync-ci-master + group: classref-sync-ci-4.2 cancel-in-progress: true jobs: @@ -18,7 +13,7 @@ jobs: name: Update class reference files based on the engine revision runs-on: ubuntu-latest env: - engine_rev: 'master' + engine_rev: '4.2' steps: - name: Checkout the documentation repository diff --git a/_static/js/algolia.js b/_static/js/algolia.js deleted file mode 100644 index bcf15f2360a..00000000000 --- a/_static/js/algolia.js +++ /dev/null @@ -1,27 +0,0 @@ - -(function() { - - var doc_version = document.querySelector('meta[name="doc_version"]').getAttribute('content'); - - // If the current page uses tabs, we will need this small patch - if (typeof(docsearch) == 'undefined') { - docsearch = exports['docsearch']; - } - - // Initialize the Algolia search widget - docsearch({ - apiKey: 'c39cb614363a2a156811478bc2d0573b', - indexName: 'godotengine', - inputSelector: '#rtd-search-form input[type=text]', - algoliaOptions: { - facetFilters: ["version:" + (doc_version || 'stable')] - }, - }); - - window.addEventListener('keydown', function(event) { - if (event.key === '/') { - document.querySelector('#rtd-search-form input[type=text]').focus(); - event.preventDefault(); - } - }) -})(); diff --git a/_static/js/custom.js b/_static/js/custom.js index 4b434839c8d..e7a103da3df 100644 --- a/_static/js/custom.js +++ b/_static/js/custom.js @@ -246,6 +246,17 @@ $(document).ready(() => { Documentation.hideSearchWords(); } + window.addEventListener('keydown', function(event) { + if (event.key === '/') { + var searchField = document.querySelector('#rtd-search-form input[type=text]'); + if (document.activeElement !== searchField) { + searchField.focus(); + searchField.select(); + event.preventDefault(); + } + } + }); + // Initialize handlers for page scrolling and our custom sidebar. const mediaQuery = window.matchMedia('only screen and (min-width: 769px)'); diff --git a/about/docs_changelog.rst b/about/docs_changelog.rst index 65bc1c44652..7f662e6f4ad 100644 --- a/about/docs_changelog.rst +++ b/about/docs_changelog.rst @@ -11,6 +11,34 @@ added since version 3.0. .. note:: This document only contains new pages so not all changes are reflected, many pages have been substantially updated but are not reflected in this document. +New pages since version 4.1 +--------------------------- + +C# +^^ + +- :ref:`doc_c_sharp_diagnostics` + +Development +^^^^^^^^^^^ + +- :ref:`doc_2d_coordinate_systems` + +Migrating +^^^^^^^^^ + +- :ref:`doc_upgrading_to_godot_4.2` + +I/O +^^^ + +- :ref:`doc_runtime_loading_and_saving` + +Platform-specific +^^^^^^^^^^^^^^^^^ + +- :ref:`doc_android_library` + New pages since version 4.0 --------------------------- diff --git a/about/faq.rst b/about/faq.rst index cf0cd8094af..4c707379c59 100644 --- a/about/faq.rst +++ b/about/faq.rst @@ -516,7 +516,7 @@ reasons why we have chosen SCons over other alternatives. For example: customization (:ref:`modules `). This requires complex logic which is easier to write in an actual programming language (like Python) rather than using a mostly macro-based language only meant for building. -- Godot build process makes heavy use of cross-compiling tools. Each +- Godot's build process makes heavy use of cross-compiling tools. Each platform has a specific detection process, and all these must be handled as specific cases with special code written for each. diff --git a/about/introduction.rst b/about/introduction.rst index 5ef95b44a50..a6c9658d341 100644 --- a/about/introduction.rst +++ b/about/introduction.rst @@ -28,7 +28,7 @@ is a great starting point. In case you have trouble with one of the tutorials or your project, you can find help on the various :ref:`Community channels `, especially the Godot `Discord`_ community and -`Q&A `_. +`Forum `_. About Godot Engine ------------------ diff --git a/about/list_of_features.rst b/about/list_of_features.rst index cbf210d6f4a..f69a35f9176 100644 --- a/about/list_of_features.rst +++ b/about/list_of_features.rst @@ -14,24 +14,30 @@ This page aims to list **all** features currently supported by Godot. Platforms --------- +.. seealso:: + + See :ref:`doc_system_requirements` for hardware and software version requirements. + **Can run both the editor and exported projects:** -- Windows 7 and later (64-bit and 32-bit). -- macOS 10.12 and later (64-bit, x86 and ARM). -- Linux (64-bit, x86 and ARM). +- Windows (x86, 64-bit and 32-bit). +- macOS (x86 and ARM, 64-bit only). +- Linux (x86 and ARM, 64-bit and 32-bit). - Binaries are statically linked and can run on any distribution if compiled on an old enough base distribution. - - Official binaries are compiled on Ubuntu 14.04. - - 32-bit binaries can be compiled from source. + - Official binaries are compiled using the + `Godot Engine buildroot `__, + allowing for binaries that work across common Linux distributions + (including LTS variants). -- Android 6.0 and later (editor support is experimental). +- Android (editor support is experimental). - :ref:`Web browsers `. Experimental in 4.0, using Godot 3.x is recommended instead when targeting HTML5. **Runs exported projects:** -- iOS 11.0 and later. +- iOS. - :ref:`Consoles `. Godot aims to be as platform-independent as possible and can be @@ -55,7 +61,7 @@ Editor Visual Studio Code or Vim. - GDScript :ref:`debugger `. - - No support for debugging in threads yet. + - Support for debugging in threads is available since 4.2. - Visual profiler with CPU and GPU time indications for each step of the rendering pipeline. - Performance monitoring tools, including diff --git a/about/release_policy.rst b/about/release_policy.rst index ee0ae7f4a61..47d720be058 100644 --- a/about/release_policy.rst +++ b/about/release_policy.rst @@ -80,26 +80,26 @@ on GitHub. +--------------+----------------------+--------------------------------------------------------------------------+ | **Version** | **Release date** | **Support level** | +--------------+----------------------+--------------------------------------------------------------------------+ -| Godot 4.2 | November 2023 | |unstable| *Development.* Receives new features, usability and | +| Godot 4.3 | April 2024 | |unstable| *Development.* Receives new features, usability and | | (`master`) | (estimate) | performance improvements, as well as bug fixes, while under development. | +--------------+----------------------+--------------------------------------------------------------------------+ -| Godot 4.1 | July 2023 | |supported| Receives fixes for bugs and security issues, as well as | +| Godot 4.2 | November 2023 | |supported| Receives fixes for bugs and security issues, as well as | | | | patches that enable platform support. | +--------------+----------------------+--------------------------------------------------------------------------+ -| Godot 4.0 | March 2023 | |supported| Receives fixes for bugs and security issues, as well as | +| Godot 4.1 | July 2023 | |supported| Receives fixes for bugs and security issues, as well as | | | | patches that enable platform support. | +--------------+----------------------+--------------------------------------------------------------------------+ -| Godot 3.6 | Q3 2023 (estimate) | |supported| *Beta.* Receives new features, usability and performance | +| Godot 4.0 | March 2023 | |eol| No longer supported (last update: 4.0.4). | ++--------------+----------------------+--------------------------------------------------------------------------+ +| Godot 3.6 | Q1 2024 (estimate) | |supported| *Beta.* Receives new features, usability and performance | | (`3.x`, LTS) | | improvements, as well as bug fixes, while under development. | +--------------+----------------------+--------------------------------------------------------------------------+ | Godot 3.5 | August 2022 | |supported| Receives fixes for bugs and security issues, as well as | | | | patches that enable platform support. | +--------------+----------------------+--------------------------------------------------------------------------+ -| Godot 3.4 | November 2021 | |eol| No longer supported, as fully superseded by the compatible 3.5 | -| | | release (last update: 3.4.5). | +| Godot 3.4 | November 2021 | |eol| No longer supported (last update: 3.4.5). | +--------------+----------------------+--------------------------------------------------------------------------+ -| Godot 3.3 | April 2021 | |eol| No longer supported, as fully superseded by the compatible 3.4 | -| | | release (last update: 3.3.4). | +| Godot 3.3 | April 2021 | |eol| No longer supported (last update: 3.3.4). | +--------------+----------------------+--------------------------------------------------------------------------+ | Godot 3.2 | January 2020 | |eol| No longer supported (last update: 3.2.3). | +--------------+----------------------+--------------------------------------------------------------------------+ diff --git a/about/system_requirements.rst b/about/system_requirements.rst new file mode 100644 index 00000000000..64bd6c58495 --- /dev/null +++ b/about/system_requirements.rst @@ -0,0 +1,369 @@ +.. _doc_system_requirements: + +System requirements +=================== + +This page contains system requirements for the editor and exported projects. +These specifications are given for informative purposes only, but they can be +referred to if you're looking to build or upgrade a system to use Godot on. + +Godot editor +------------ + +These are the **minimum** specifications required to run the Godot editor and work +on a simple 2D or 3D project: + +Desktop or laptop PC - Minimum +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. When adjusting specifications, make sure to only mention hardware that can run the required OS version. +.. For example, the x86 CPU requirement for macOS is set after the MacBook Air 11" (late 2010 model), +.. which can run up to macOS 10.13. + ++----------------------+-----------------------------------------------------------------------------------------+ +| **CPU** | - **Windows:** x86_32 CPU with SSE2 instructions, or any x86_64 CPU | +| | | +| | - *Example: Intel Core 2 Duo E8200, AMD Athlon XE BE-2300* | +| | | +| | - **macOS:** x86_64 or ARM CPU (Apple Silicon) | +| | | +| | - *Example: Intel Core 2 Duo SU9400, Apple M1* | +| | | +| | - **Linux:** x86_32 CPU with SSE2 instructions, x86_64 CPU, ARMv7 or ARMv8 CPU | +| | | +| | - *Example: Intel Core 2 Duo E8200, AMD Athlon XE BE-2300, Raspberry Pi 4* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **GPU** | - **Forward+ rendering method:** Integrated graphics with full Vulkan 1.0 support | +| | | +| | - *Example: Intel HD Graphics 5500 (Broadwell), AMD Radeon R5 Graphics (Kaveri)* | +| | | +| | - **Mobile rendering method:** Integrated graphics with full Vulkan 1.0 support | +| | | +| | - *Example: Intel HD Graphics 5500 (Broadwell), AMD Radeon R5 Graphics (Kaveri)* | +| | | +| | - **Compatibility rendering method:** Integrated graphics with full OpenGL 3.3 support | +| | | +| | - *Example: Intel HD Graphics 2500 (Ivy Bridge), AMD Radeon R5 Graphics (Kaveri)* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **RAM** | - **Native editor:** 4 GB | +| | - **Web editor:** 8 GB | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Storage** | 200 MB (used for the executable, project files and cache). | +| | Exporting projects requires downloading export templates separately | +| | (1.3 GB after installation). | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Operating system** | - **Native editor:** Windows 7, macOS 10.13 (Compatibility) or | +| | macOS 10.15 (Forward+/Mobile), Linux distribution released after 2016 | +| | - **Web editor:** Firefox 79, Chrome 68, Edge 79, Safari 15.2, Opera 64 | ++----------------------+-----------------------------------------------------------------------------------------+ + +.. note:: + + Windows 7/8/8.1 are supported on a best-effort basis. These versions are not + regularly tested and some features may be missing (such as colored + :ref:`print_rich ` console output). + Support for Windows 7/8/8.1 may be removed in a + :ref:`future Godot 4.x release `. + + Vulkan drivers for these Windows versions are known to have issues with + memory leaks. As a result, it's recommended to stick to the Compatibility + rendering method when running Godot on an Windows version older than 10. + +Mobile device (smartphone/tablet) - Minimum +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ++----------------------+-----------------------------------------------------------------------------------------+ +| **CPU** | - **Android:** SoC with any 32-bit or 64-bit ARM or x86 CPU | +| | | +| | - *Example: Qualcomm Snapdragon 430, Samsung Exynos 5 Octa 5430* | +| | | +| | - **iOS:** *Cannot run the editor* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **GPU** | - **Forward+ rendering method:** SoC featuring GPU with full Vulkan 1.0 support | +| | | +| | - *Example: Qualcomm Adreno 505, Mali-G71 MP2* | +| | | +| | - **Mobile rendering method:** SoC featuring GPU with full Vulkan 1.0 support | +| | | +| | - *Example: Qualcomm Adreno 505, Mali-G71 MP2* | +| | | +| | - **Compatibility rendering method:** SoC featuring GPU with full OpenGL ES 3.0 support | +| | | +| | - *Example: Qualcomm Adreno 306, Mali-T628 MP6* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **RAM** | - **Native editor:** 3 GB | +| | - **Web editor:** 6 GB | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Storage** | 200 MB (used for the executable, project files and cache). | +| | Exporting projects requires downloading export templates separately | +| | (1.3 GB after installation). | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Operating system** | - **Native editor:** Android 6.0 (Compatibility) or Android 9.0 (Forward+/Mobile), | +| | iOS 11.0 | +| | - **Web editor:** Firefox 79, Chrome 88, Edge 79, Safari 15.2, Opera 64, | +| | Samsung Internet 15 | ++----------------------+-----------------------------------------------------------------------------------------+ + +These are the **recommended** specifications to get a smooth experience with the +Godot editor on a simple 2D or 3D project: + +Desktop or laptop PC - Recommended +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ++----------------------+-----------------------------------------------------------------------------------------+ +| **CPU** | - **Windows:** x86_64 CPU with SSE4.2 instructions, with 4 physical cores or more | +| | | +| | - *Example: Intel Core i5-6600K, AMD Ryzen 5 1600* | +| | | +| | - **macOS:** x86_64 or ARM CPU (Apple Silicon) | +| | | +| | - *Example: Intel Core i5-8500, Apple M1* | +| | | +| | - **Linux:** x86_32 CPU with SSE2 instructions, x86_64 CPU, ARMv7 or ARMv8 CPU | +| | | +| | - *Example: Intel Core i5-6600K, AMD Ryzen 5 1600, Raspberry Pi 5 with overclocking* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **GPU** | - **Forward+ rendering method:** Dedicated graphics with full Vulkan 1.2 support | +| | | +| | - *Example: NVIDIA GeForce GTX 1050 (Pascal), AMD Radeon RX 460 (GCN 4.0)* | +| | | +| | - **Mobile rendering method:** Dedicated graphics with full Vulkan 1.2 support | +| | | +| | - *Example: NVIDIA GeForce GTX 1050 (Pascal), AMD Radeon RX 460 (GCN 4.0)* | +| | | +| | - **Compatibility rendering method:** Dedicated graphics with full OpenGL 4.6 support | +| | | +| | - *Example: NVIDIA GeForce GTX 650 (Kepler), AMD Radeon HD 7750 (GCN 1.0)* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **RAM** | - **Native editor:** 8 GB | +| | - **Web editor:** 12 GB | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Storage** | 1.5 GB (used for the executable, project files, all export templates and cache) | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Operating system** | - **Native editor:** Windows 10, macOS 10.15, | +| | Linux distribution released after 2020 | +| | - **Web editor:** Latest version of Firefox, Chrome, Edge, Safari, Opera | ++----------------------+-----------------------------------------------------------------------------------------+ + +Mobile device (smartphone/tablet) - Recommended +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ++----------------------+-----------------------------------------------------------------------------------------+ +| **CPU** | - **Android:** SoC with 64-bit ARM or x86 CPU, with 3 "performance" cores or more | +| | | +| | - *Example: Qualcomm Snapdragon 845, Samsung Exynos 9810* | +| | | +| | - **iOS:** *Cannot run the editor* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **GPU** | - **Forward+ rendering method:** SoC featuring GPU with full Vulkan 1.2 support | +| | | +| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18* | +| | | +| | - **Mobile rendering method:** SoC featuring GPU with full Vulkan 1.2 support | +| | | +| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18* | +| | | +| | - **Compatibility rendering method:** SoC featuring GPU with full OpenGL ES 3.2 support | +| | | +| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **RAM** | - **Native editor:** 6 GB | +| | - **Web editor:** 8 GB | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Storage** | 1.5 GB (used for the executable, project files, all export templates and cache) | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Operating system** | - **Native editor:** Android 9.0 or iOS 11.0 | +| | - **Web editor:** Latest version of Firefox, Chrome, Edge, Safari, Opera, | +| | Samsung Internet | ++----------------------+-----------------------------------------------------------------------------------------+ + +Exported Godot project +---------------------- + +.. warning:: + + The requirements below are a baseline for a **simple** 2D or 3D project, + with basic scripting and few visual flourishes. CPU, GPU, RAM and + storage requirements will heavily vary depending on your project's scope, + its rendering method, viewport resolution and graphics settings chosen. + Other programs running on the system while the project is running + will also compete for resources, including RAM and video RAM. + + It is strongly recommended to do your own testing on low-end hardware to + make sure your project runs at the desired speed. To provide scalability for + low-end hardware, you will also need to introduce a + `graphics options menu `__ + to your project. + +These are the **minimum** specifications required to run a simple 2D or 3D +project exported with Godot: + +Desktop or laptop PC - Minimum +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. When adjusting specifications, make sure to only mention hardware that can run the required OS version. +.. For example, the x86 CPU requirement for macOS is set after the MacBook Air 11" (late 2010 model), +.. which can run up to macOS 10.13. + ++----------------------+-----------------------------------------------------------------------------------------+ +| **CPU** | - **Windows:** x86_32 CPU with SSE2 instructions, or any x86_64 CPU | +| | | +| | - *Example: Intel Core 2 Duo E8200, AMD Athlon XE BE-2300* | +| | | +| | - **macOS:** x86_64 or ARM CPU (Apple Silicon) | +| | | +| | - *Example: Intel Core 2 Duo SU9400, Apple M1* | +| | | +| | - **Linux:** x86_32 CPU with SSE2 instructions, x86_64 CPU, ARMv7 or ARMv8 CPU | +| | | +| | - *Example: Intel Core 2 Duo E8200, AMD Athlon XE BE-2300, Raspberry Pi 4* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **GPU** | - **Forward+ rendering method:** Integrated graphics with full Vulkan 1.0 support | +| | | +| | - *Example: Intel HD Graphics 5500 (Broadwell), AMD Radeon R5 Graphics (Kaveri)* | +| | | +| | - **Mobile rendering method:** Integrated graphics with full Vulkan 1.0 support | +| | | +| | - *Example: Intel HD Graphics 5500 (Broadwell), AMD Radeon R5 Graphics (Kaveri)* | +| | | +| | - **Compatibility rendering method:** Integrated graphics with full OpenGL 3.3 support | +| | | +| | - *Example: Intel HD Graphics 2500 (Ivy Bridge), AMD Radeon R5 Graphics (Kaveri)* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **RAM** | - **For native exports:** 2 GB | +| | - **For web exports:** 4 GB | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Storage** | 150 MB (used for the executable, project files and cache) | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Operating system** | - **For native exports:** Windows 7, macOS 10.13 (Compatibility) or | +| | macOS 10.15 (Forward+/Mobile), Linux distribution released after 2016 | +| | - **For web exports:** Firefox 79, Chrome 68, Edge 79, Safari 15.2, Opera 64 | ++----------------------+-----------------------------------------------------------------------------------------+ + +.. note:: + + Windows 7/8/8.1 are supported on a best-effort basis. These versions are not + regularly tested and some features may be missing (such as colored + :ref:`print_rich ` console output). + Support for Windows 7/8/8.1 may be removed in a + :ref:`future Godot 4.x release `. + + Vulkan drivers for these Windows versions are known to have issues with + memory leaks. As a result, it's recommended to stick to the Compatibility + rendering method when running Godot on an Windows version older than 10. + +Mobile device (smartphone/tablet) - Minimum +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ++----------------------+-----------------------------------------------------------------------------------------+ +| **CPU** | - **Android:** SoC with any 32-bit or 64-bit ARM or x86 CPU | +| | | +| | - *Example: Qualcomm Snapdragon 430, Samsung Exynos 5 Octa 5430* | +| | | +| | - **iOS:** SoC with any 64-bit ARM CPU | +| | | +| | - *Example: Apple A7 (iPhone 5S)* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **GPU** | - **Forward+ rendering method:** SoC featuring GPU with full Vulkan 1.0 support | +| | | +| | - *Example: Qualcomm Adreno 505, Mali-G71 MP2, PowerVR G6430 (iPhone 6S/iPhone SE 1)* | +| | | +| | - **Mobile rendering method:** SoC featuring GPU with full Vulkan 1.0 support | +| | | +| | - *Example: Qualcomm Adreno 505, Mali-G71 MP2, PowerVR G6430 (iPhone 6S/iPhone SE 1)* | +| | | +| | - **Compatibility rendering method:** SoC featuring GPU with full OpenGL ES 3.0 support | +| | | +| | - *Example: Qualcomm Adreno 306, Mali-T628 MP6, PowerVR G6430 (iPhone 5S)* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **RAM** | - **For native exports:** 1 GB | +| | - **For web exports:** 2 GB | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Storage** | 150 MB (used for the executable, project files and cache) | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Operating system** | - **For native exports:** Android 6.0 (Compatibility) or Android 9.0 (Forward+/Mobile), | +| | iOS 11.0 | +| | - **For web exports:** Firefox 79, Chrome 88, Edge 79, Safari 15.2, Opera 64, | +| | Samsung Internet 15 | ++----------------------+-----------------------------------------------------------------------------------------+ + +These are the **recommended** specifications to get a smooth experience with a +simple 2D or 3D project exported with Godot: + +Desktop or laptop PC - Recommended +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ++----------------------+-----------------------------------------------------------------------------------------+ +| **CPU** | - **Windows:** x86_64 CPU with SSE4.2 instructions, with 4 physical cores or more | +| | | +| | - *Example: Intel Core i5-6600K, AMD Ryzen 5 1600* | +| | | +| | - **macOS:** x86_64 or ARM CPU (Apple Silicon) | +| | | +| | - *Example: Intel Core i5-8500, Apple M1* | +| | | +| | - **Linux:** x86_32 CPU with SSE2 instructions, x86_64 CPU, ARMv7 or ARMv8 CPU | +| | | +| | - *Example: Intel Core i5-6600K, AMD Ryzen 5 1600, Raspberry Pi 5 with overclocking* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **GPU** | - **Forward+ rendering method:** Dedicated graphics with full Vulkan 1.2 support | +| | | +| | - *Example: NVIDIA GeForce GTX 1050 (Pascal), AMD Radeon RX 460 (GCN 4.0)* | +| | | +| | - **Mobile rendering method:** Dedicated graphics with full Vulkan 1.2 support | +| | | +| | - *Example: NVIDIA GeForce GTX 1050 (Pascal), AMD Radeon RX 460 (GCN 4.0)* | +| | | +| | - **Compatibility rendering method:** Dedicated graphics with full OpenGL 4.6 support | +| | | +| | - *Example: NVIDIA GeForce GTX 650 (Kepler), AMD Radeon HD 7750 (GCN 1.0)* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **RAM** | - **For native exports:** 4 GB | +| | - **For web exports:** 8 GB | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Storage** | 150 MB (used for the executable, project files and cache) | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Operating system** | - **For native exports:** Windows 10, macOS 10.15, | +| | Linux distribution released after 2020 | +| | - **For web exports:** Latest version of Firefox, Chrome, Edge, Safari, Opera | ++----------------------+-----------------------------------------------------------------------------------------+ + +Mobile device (smartphone/tablet) - Recommended +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ++----------------------+-----------------------------------------------------------------------------------------+ +| **CPU** | - **Android:** SoC with 64-bit ARM or x86 CPU, with 3 "performance" cores or more | +| | | +| | - *Example: Qualcomm Snapdragon 845, Samsung Exynos 9810* | +| | | +| | - **iOS:** SoC with 64-bit ARM CPU | +| | | +| | - *Example: Apple A11 (iPhone XS/XR)* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **GPU** | - **Forward+ rendering method:** SoC featuring GPU with full Vulkan 1.2 support | +| | | +| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple G11P (iPhone XR/XS)* | +| | | +| | - **Mobile rendering method:** SoC featuring GPU with full Vulkan 1.2 support | +| | | +| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple G11P (iPhone XR/XS)* | +| | | +| | - **Compatibility rendering method:** SoC featuring GPU with full OpenGL ES 3.2 support | +| | | +| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple G11P (iPhone XR/XS)* | ++----------------------+-----------------------------------------------------------------------------------------+ +| **RAM** | - **For native exports:** 2 GB | +| | - **For web exports:** 4 GB | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Storage** | 150 MB (used for the executable, project files and cache) | ++----------------------+-----------------------------------------------------------------------------------------+ +| **Operating system** | - **For native exports:** Android 9.0 or iOS 11.0 | +| | - **For web exports:** Latest version of Firefox, Chrome, Edge, Safari, Opera, | +| | Samsung Internet | ++----------------------+-----------------------------------------------------------------------------------------+ + +.. note:: + + Godot doesn't use OpenGL/OpenGL ES extensions introduced after OpenGL + 3.3/OpenGL ES 3.0, but GPUs supporting newer OpenGL/OpenGL ES versions + generally have fewer driver issues. diff --git a/community/channels.rst b/community/channels.rst index 1a2662aff4f..b34f5c11f00 100644 --- a/community/channels.rst +++ b/community/channels.rst @@ -9,42 +9,28 @@ Note that some of these channels are run and moderated by members of the Godot c A brief overview over these and other channels is also available on the `Godot website `_. -Q&A ---- +Forums +------ -- `Official Godot Questions & Answers `_ +- `Official Godot Forum `_ +- `Community Forum `_ -Rocket.Chat ------------ +Chats +----- - `Godot Contributors Chat `_ - -IRC on Libera.Chat ------------------- - -.. note:: - - As of January 2021, core developer chat has moved to the Godot Contributors Chat platform listed above. - -- `General: #godotengine `_ - -IRC is less active than Discord. Please stick around to get an answer, as -it may take several hours for someone to see and answer your questions. - -Other chats ------------ - - `Discord `_ - `Matrix (IRC compatible) `_ +- `IRC (#godotengine on Libera.Chat) `_ -Language-based communities --------------------------- +.. note:: -See the `User groups `_ page of -the website for a list of local communities. + As of January 2021, core developer chat has moved to the Godot Contributors Chat platform listed above. + IRC is less active. Please stick around to get an answer, + as it may take several hours for someone to see and answer your questions. -Social networks ---------------- +Social networks and other sites +------------------------------- - `GitHub `_ - `Facebook group `_ @@ -53,8 +39,11 @@ Social networks - `Reddit `_ - `YouTube `_ - `Steam `_ +- `itch.io `_ +- `linkin.bio `_ -Forum ------ +Language-based communities +-------------------------- -- `Godot Forums `_ +See the `User groups `_ page of +the website for a list of local communities. diff --git a/community/tutorials.rst b/community/tutorials.rst index 4a044dacd95..68d0f2ce951 100644 --- a/community/tutorials.rst +++ b/community/tutorials.rst @@ -10,9 +10,7 @@ Think there is something missing here? Feel free to submit a `Pull Request `_, `Game from Scratch `_ and `KidsCanCode `_ are well-regarded in the community and often recommended as a gentle introduction to beginners. - -If you're interested in a complete introduction to programming using Godot and GDScript, the unofficial `Godot Tutorials `_ YouTube channel is a good place to start. +The Godot video tutorials by `GDQuest `_ are well-regarded in the community and often recommended as a gentle introduction to beginners. GDQuest's *Learn GDScript From Zero* is a free and open source interactive tutorial for absolute beginners to learn to program with Godot's GDScript language. It is available as a `desktop application `_ or `in the browser `_. @@ -21,34 +19,22 @@ Some tutorials mentioned below provide more advanced tutorials, e.g. on 3D or sh Video tutorials --------------- -- `Godot Tutorials `_ (2D, GDScript, Programming Basics). -- `Emilio `_ (2D, GDScript). -- `FinePointCGI `_ (2D, 3D, GDScript and C#). -- `GDQuest `_ (2D and 3D, GDScript and C#). -- `Game Development Center `_ (2D, networked multiplayer, GDScript). -- `Game Endeavor `_ (2D, GDScript). -- `Game from Scratch `_ (2D and 3D, GDScript and C#). -- `HeartBeast `_ (2D, GDScript). -- `KidsCanCode `__ (2D and 3D, GDScript). -- `Mister Taft Creates `_ (2D, GDScript). -- `Miziziziz `_ (2D and 3D, GDScript). -- `P1X / Krzysztof Jankowski `_ (3D). -- `Pigdev `_ (2D, GDScript). -- `Steincodes `__ (2D, GDScript). -- `TheBuffED `_ (2D, GDScript). -- `Code with Tom `_ (2D and 3D, GDScript). -- `BornCG `_ (2D and 3D, GDScript). -- `TheGuideKnight `_ (2D, GDScript). -- `GDScript Dude `_ (GDScript). -- `Garbaj `_ (3D, GDScript). -- `Kasper Frandsen `_ (3D, Shaders). -- `bitbrain `_ (2D, GDScript). -- `Gwizz `_ (2D, GDScript). -- `Quiver `_ (2D, GDScript). -- `Maker Tech `_ (2D, GDScript). -- `Clear Code `_ (2D, GDScript, Programming Basics). -- `Game Dev Artisan `_ (2D, GDScript). -- `FencerDevLog `_ (2D, 3D, GDScript, Shaders). +- `BornCG `_ (2D and 3D, GDScript) +- `Clear Code `_ (2D, GDScript, Programming Basics) +- `FencerDevLog `_ (2D, 3D, GDScript, Shaders) +- `FinePointCGI `_ (2D, 3D, GDScript and C#) +- `GDQuest `_ (2D and 3D, GDScript and C#) +- `Game Dev Artisan `_ (2D, GDScript) +- `Game Development Center `_ (2D, networked multiplayer, GDScript) +- `Game Endeavor `_ (2D, GDScript) +- `Gwizz `_ (2D, GDScript) +- `Godotneers `_ (2D, Shaders, GDScript) +- `HeartBeast `_ (2D, GDScript) +- `KidsCanCode `__ (2D and 3D, GDScript) +- `Maker Tech `_ (2D, GDScript) +- `Pigdev `_ (2D, GDScript) +- `Queble `_ (2D, GDScript) +- `Quiver `_ (2D, GDScript) Text tutorials -------------- @@ -63,12 +49,14 @@ Text tutorials Devlogs ------- -- `Andrea Catania (Physics & AI) `_ - `Bastiaan Olij (AR & VR) `_ +- `bitbrain `_ - `DevDuck (2D) `_ Resources --------- - `awesome-godot: A curated list of free/libre plugins, scripts and add-ons `_ +- `Godot Asset Library `_ +- `Godot Shaders: A community-driven shader library `_ - `Zeef Godot Engine: A curated directory of resources by Andre Schmitz `_ diff --git a/conf.py b/conf.py index 57f7cc70217..f28c4570940 100644 --- a/conf.py +++ b/conf.py @@ -87,7 +87,7 @@ # Version info for the project, acts as replacement for |version| and |release| # The short X.Y version -version = os.getenv("READTHEDOCS_VERSION", "latest") +version = os.getenv("READTHEDOCS_VERSION", "4.2") # The full version, including alpha/beta/rc tags release = version @@ -178,7 +178,7 @@ "display_github": not is_i18n, # Integrate GitHub "github_user": "godotengine", # Username "github_repo": "godot-docs", # Repo name - "github_version": "master", # Version + "github_version": "4.2", # Version "conf_py_path": "/", # Path in the checkout to the docs root "godot_inject_language_links": True, "godot_docs_supported_languages": list(supported_languages.keys()), @@ -192,7 +192,7 @@ "godot_title_prefix": "" if on_rtd else "(DEV) ", # Set this to `True` when in the `latest` branch to clearly indicate to the reader # that they are not reading the `stable` documentation. - "godot_is_latest": True, + "godot_is_latest": False, "godot_version": "4.2", # Enables a banner that displays the up-to-date status of each article. "godot_show_article_status": True, @@ -217,9 +217,7 @@ html_css_files.append("css/dev.css") html_js_files = [ - "js/custom.js?6", # Increment the number at the end when the file changes to bust the cache. - ('https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js', {'defer': 'defer'}), - ('js/algolia.js', {'defer': 'defer'}) + "js/custom.js?7", # Increment the number at the end when the file changes to bust the cache. ] # Output file base name for HTML help builder diff --git a/contributing/development/compiling/compiling_for_ios.rst b/contributing/development/compiling/compiling_for_ios.rst index a5b2257cc6b..4f1b2b5110f 100644 --- a/contributing/development/compiling/compiling_for_ios.rst +++ b/contributing/development/compiling/compiling_for_ios.rst @@ -15,8 +15,7 @@ Requirements - `Python 3.6+ `_. - `SCons 3.0+ `_ build system. -- `Xcode `_ - (or the more lightweight Command Line Tools for Xcode). +- `Xcode `_. If you are building the ``master`` branch: @@ -78,11 +77,11 @@ should be placed in ``libgodot.ios.debug.xcframework`` and ``libgodot.ios.releas $ cp -r misc/dist/ios_xcode . - $ cp libgodot.ios.debug.arm64.a ios_xcode/libgodot.ios.debug.xcframework/ios-arm64/libgodot.a - $ lipo -create libgodot.ios.debug.arm64.simulator.a libgodot.ios.debug.x86_64.simulator.a -output ios_xcode/libgodot.ios.debug.xcframework/ios-arm64_x86_64-simulator/libgodot.a + $ cp libgodot.ios.template_debug.arm64.a ios_xcode/libgodot.ios.debug.xcframework/ios-arm64/libgodot.a + $ lipo -create libgodot.ios.template_debug.arm64.simulator.a libgodot.ios.template_debug.x86_64.simulator.a -output ios_xcode/libgodot.ios.debug.xcframework/ios-arm64_x86_64-simulator/libgodot.a - $ cp libgodot.ios.opt.arm64.a ios_xcode/libgodot.ios.release.xcframework/ios-arm64/libgodot.a - $ lipo -create libgodot.ios.opt.arm64.simulator.a libgodot.ios.opt.x86_64.simulator.a -output ios_xcode/libgodot.ios.release.xcframework/ios-arm64_x86_64-simulator/libgodot.a + $ cp libgodot.ios.template_release.arm64.a ios_xcode/libgodot.ios.release.xcframework/ios-arm64/libgodot.a + $ lipo -create libgodot.ios.template_release.arm64.simulator.a libgodot.ios.template_release.x86_64.simulator.a -output ios_xcode/libgodot.ios.release.xcframework/ios-arm64_x86_64-simulator/libgodot.a The MoltenVK static ``.xcframework`` folder must also be placed in the ``ios_xcode`` folder once it has been created. diff --git a/contributing/development/compiling/compiling_for_macos.rst b/contributing/development/compiling/compiling_for_macos.rst index f90376460c6..0029a51f414 100644 --- a/contributing/development/compiling/compiling_for_macos.rst +++ b/contributing/development/compiling/compiling_for_macos.rst @@ -128,7 +128,7 @@ of those two architectures by leaving out the ``lipo`` step below. scons platform=macos target=template_release arch=x86_64 scons platform=macos target=template_debug arch=x86_64 -- For ARM64 (Apple M1):: +- For Arm64 (Apple M1):: scons platform=macos target=template_release arch=arm64 scons platform=macos target=template_debug arch=arm64 @@ -136,20 +136,20 @@ of those two architectures by leaving out the ``lipo`` step below. To support both architectures in a single "Universal 2" binary, run the above two commands blocks and then use ``lipo`` to bundle them together:: - lipo -create bin/godot.macos.opt.x86_64 bin/godot.macos.opt.arm64 -output bin/godot.macos.opt.universal - lipo -create bin/godot.macos.opt.debug.x86_64 bin/godot.macos.opt.debug.arm64 -output bin/godot.macos.opt.debug.universal + lipo -create bin/godot.macos.template_release.x86_64 bin/godot.macos.template_release.arm64 -output bin/godot.macos.template_release.universal + lipo -create bin/godot.macos.template_debug.x86_64 bin/godot.macos.template_debug.arm64 -output bin/godot.macos.template_debug.universal To create an ``.app`` bundle like in the official builds, you need to use the template located in ``misc/dist/macos_template.app``. The release and debug builds should be placed in ``macos_template.app/Contents/MacOS`` with the names -``godot_macos_release.64`` and ``godot_macos_debug.64`` respectively. You can do so +``godot_macos_release.universal`` and ``godot_macos_debug.universal`` respectively. You can do so with the following commands (assuming a universal build, otherwise replace the ``.universal`` extension with the one of your arch-specific binaries):: cp -r misc/dist/macos_template.app . mkdir -p macos_template.app/Contents/MacOS - cp bin/godot.macos.opt.universal macos_template.app/Contents/MacOS/godot_macos_release.64 - cp bin/godot.macos.opt.debug.universal macos_template.app/Contents/MacOS/godot_macos_debug.64 + cp bin/godot.macos.template_release.universal macos_template.app/Contents/MacOS/godot_macos_release.universal + cp bin/godot.macos.template_debug.universal macos_template.app/Contents/MacOS/godot_macos_debug.universal chmod +x macos_template.app/Contents/MacOS/godot_macos* .. note:: diff --git a/contributing/development/compiling/compiling_for_web.rst b/contributing/development/compiling/compiling_for_web.rst index 09c6601bbb1..623e26e49df 100644 --- a/contributing/development/compiling/compiling_for_web.rst +++ b/contributing/development/compiling/compiling_for_web.rst @@ -49,17 +49,17 @@ enabled. Since ``eval()`` calls can be a security concern, the The engine will now be compiled to WebAssembly by Emscripten. Once finished, the resulting file will be placed in the ``bin`` subdirectory. Its name is -``godot.web.opt.wasm32.zip`` for release or ``godot.web.opt.debug.wasm32.zip`` +``godot.web.template_release.wasm32.zip`` for release or ``godot.web.template_debug.wasm32.zip`` for debug. Finally, rename the zip archive to ``web_release.zip`` for the release template:: - mv bin/godot.web.opt.wasm32.zip bin/web_release.zip + mv bin/godot.web.template_release.wasm32.zip bin/web_release.zip And ``web_debug.zip`` for the debug template:: - mv bin/godot.web.opt.debug.wasm32.zip bin/web_debug.zip + mv bin/godot.web.template_debug.wasm32.zip bin/web_debug.zip GDExtension ----------- @@ -80,8 +80,8 @@ Its name will have ``_dlink`` added. Finally, rename the zip archives to ``web_dlink_release.zip`` and ``web_dlink_release.zip`` for the release template:: - mv bin/godot.web.opt.wasm32.dlink.zip bin/web_dlink_release.zip - mv bin/godot.web.opt.debug.wasm32.dlink.zip bin/web_dlink_debug.zip + mv bin/godot.web.template_release.wasm32.dlink.zip bin/web_dlink_release.zip + mv bin/godot.web.template_debug.wasm32.dlink.zip bin/web_dlink_debug.zip Building the editor ------------------- @@ -93,7 +93,7 @@ over the native build. You can build the editor with:: scons platform=web target=editor Once finished, the resulting file will be placed in the ``bin`` subdirectory. -Its name will be ``godot.web.opt.tools.wasm32.zip``. You can upload the +Its name will be ``godot.web.editor.wasm32.zip``. You can upload the zip content to your web server and visit it with your browser to use the editor. Refer to the :ref:`export page ` for the web diff --git a/contributing/development/compiling/compiling_with_dotnet.rst b/contributing/development/compiling/compiling_with_dotnet.rst index d427e2c6796..dfbfcb51a96 100644 --- a/contributing/development/compiling/compiling_with_dotnet.rst +++ b/contributing/development/compiling/compiling_with_dotnet.rst @@ -100,23 +100,29 @@ distributed as NuGet packages. This is all transparent to the user, but it can make things complicated during development. In order to use Godot with a development version of those packages, a local -NuGet source must be created where MSBuild can find them. This can be done with -the .NET CLI: +NuGet source must be created where MSBuild can find them. -:: +First, pick a location for the local NuGet source. If you don't have a +preference, create an empty directory at one of these recommended locations: + +- On Windows, ``C:\Users\\MyLocalNugetSource`` +- On Linux, \*BSD, etc., ``~/MyLocalNugetSource`` + +This path is referred to later as ````. - dotnet nuget add source ~/MyLocalNugetSource --name MyLocalNugetSource +After picking a directory, run this .NET CLI command to configure NuGet to use +your local source: + +:: -The Godot NuGet packages must be added to that local source. Additionally, we -must make sure there are no other versions of the package in the NuGet cache, as -MSBuild may pick one of those instead. + dotnet nuget add source --name MyLocalNugetSource -In order to simplify this process, the ``build_assemblies.py`` script provides -the following ``--push-nupkgs-local`` option: +When you run the ``build_assemblies.py`` script, pass ```` to +the ``--push-nupkgs-local`` option: :: - ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local ~/MyLocalNugetSource + ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local This option ensures the packages will be added to the specified local NuGet source and that conflicting versions of the package are removed from the NuGet @@ -132,7 +138,7 @@ the ``--precision=double`` argument: :: - ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local ~/MyLocalNugetSource --precision=double + ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local --precision=double Examples -------- diff --git a/contributing/development/core_and_modules/common_engine_methods_and_macros.rst b/contributing/development/core_and_modules/common_engine_methods_and_macros.rst index 67f0dcc8bb4..0cbd4106c78 100644 --- a/contributing/development/core_and_modules/common_engine_methods_and_macros.rst +++ b/contributing/development/core_and_modules/common_engine_methods_and_macros.rst @@ -137,11 +137,11 @@ use this snippet: .. code-block:: cpp - uint64_t begin = OS::get_singleton()->get_ticks_usec(); + uint64_t begin = Time::get_singleton()->get_ticks_usec(); // Your code here... - uint64_t end = OS::get_singleton()->get_ticks_usec(); + uint64_t end = Time::get_singleton()->get_ticks_usec(); print_line(vformat("Snippet took %d microseconds", end - begin)); This will print the time spent between the ``begin`` declaration and the ``end`` diff --git a/contributing/development/core_and_modules/internal_rendering_architecture.rst b/contributing/development/core_and_modules/internal_rendering_architecture.rst index 0a0dd544dcb..0a8131fa557 100644 --- a/contributing/development/core_and_modules/internal_rendering_architecture.rst +++ b/contributing/development/core_and_modules/internal_rendering_architecture.rst @@ -177,7 +177,11 @@ Vulkan driver. **Vulkan context creation:** -- `drivers/vulkan/vulkan_context.cpp `__ +- `drivers/vulkan/vulkan_context.cpp `__ + +**Direct3D 12 context creation:** + +- `drivers/d3d12/d3d12_context.cpp `__ Direct3D 12 ^^^^^^^^^^^ @@ -194,11 +198,10 @@ Mesa NIR (`more information `__ +**This driver is still experimental and only available in Godot 4.3 and later.** +While Direct3D 12 allows supporting Direct3D-exclusive features on Windows 11 such +as windowed optimizations and Auto HDR, Vulkan is still recommended for most projects. +See the `pull request that introduced Direct3D 12 support `__ for more information. Metal @@ -269,7 +272,11 @@ RenderingDevice presents a similar level of abstraction as Metal or WebGPU. **Vulkan RenderingDevice implementation:** -- `drivers/vulkan/rendering_device_vulkan.cpp `__ +- `drivers/vulkan/rendering_device_driver_vulkan.cpp `__ + +**Direct3D 12 RenderingDevice implementation:** + +- `drivers/d3d12/rendering_device_driver_d3d12.cpp `__ Core rendering classes architecture ----------------------------------- @@ -278,7 +285,7 @@ This diagram represents the structure of rendering classes in Godot, including t .. image:: img/rendering_architecture_diagram.webp -`View at full size `__ +`View at full size `__ .. _doc_internal_rendering_architecture_core_shaders: @@ -337,22 +344,22 @@ this. **Core GLSL material shaders:** -- Forward+: `servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl `__ -- Forward Mobile: `servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl `__ -- Compatibility: `drivers/gles3/shaders/scene.glsl `__ +- Forward+: `servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl `__ +- Forward Mobile: `servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl `__ +- Compatibility: `drivers/gles3/shaders/scene.glsl `__ **Material shader generation:** -- `scene/resources/material.cpp `__ +- `scene/resources/material.cpp `__ **Other GLSL shaders for Forward+ and Forward Mobile rendering methods:** -- `servers/rendering/renderer_rd/shaders/ `__ -- `modules/lightmapper_rd/ `__ +- `servers/rendering/renderer_rd/shaders/ `__ +- `modules/lightmapper_rd/ `__ **Other GLSL shaders for the Compatibility rendering method:** -- `drivers/gles3/shaders/ `__ +- `drivers/gles3/shaders/ `__ 2D and 3D rendering separation ------------------------------ @@ -388,7 +395,12 @@ release. **2D and 3D rendering buffer configuration C++ code:** -- `servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp `__ +- `servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp `__ + +**FSR 1.0:** + +- `servers/rendering/renderer_rd/effects/fsr.cpp `__ +- `thirdparty/amd-fsr/ `__ 2D rendering techniques ----------------------- @@ -415,7 +427,7 @@ used to calculate particle collisions in 2D. **2D SDF generation GLSL shader:** -- `https://github.com/godotengine/godot/blob/4.0/servers/rendering/renderer_rd/shaders/canvas_sdf.glsl `__ +- `servers/rendering/renderer_rd/shaders/canvas_sdf.glsl `__ 3D rendering techniques ----------------------- @@ -506,12 +518,19 @@ done by running the vertex shader corresponding to the previous rendered frame (with the previous camera transform) in addition to the vertex shader for the current rendered frame, then storing the difference between them in a color buffer. -Using `FSR 2.0 `__ instead -of a custom TAA implementation is planned in a future release. +Alternatively, FSR 2.2 can be used as an upscaling solution that also provides +its own temporal antialiasing algorithm. FSR 2.2 is implemented on top of the +RenderingDevice abstraction as opposed to using AMD's reference code directly. **TAA resolve:** -- `servers/rendering/renderer_rd/shaders/effects/taa_resolve.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/taa_resolve.glsl `__ + +**FSR 2.2:** + +- `servers/rendering/renderer_rd/effects/fsr2.cpp `__ +- `servers/rendering/renderer_rd/shaders/effects/fsr2/ `__ +- `thirdparty/amd-fsr2/ `__ Global illumination ^^^^^^^^^^^^^^^^^^^ @@ -538,32 +557,32 @@ This would allow baking lightmaps while using the Compatibility backend. **Core GI C++ code:** -- `servers/rendering/renderer_rd/environment/gi.cpp `__ -- `scene/3d/voxel_gi.cpp `__ - VoxelGI node -- `editor/plugins/voxel_gi_editor_plugin.cpp `__ - Editor UI for the VoxelGI node +- `servers/rendering/renderer_rd/environment/gi.cpp `__ +- `scene/3d/voxel_gi.cpp `__ - VoxelGI node +- `editor/plugins/voxel_gi_editor_plugin.cpp `__ - Editor UI for the VoxelGI node **Core GI GLSL shaders:** -- `servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl `__ -- `servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl `__ - VoxelGI debug draw mode -- `servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl `__ - SDFGI Cascades debug draw mode -- `servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl `__ - SDFGI Probes debug draw mode -- `servers/rendering/renderer_rd/shaders/environment/sdfgi_integrate.glsl `__ -- `servers/rendering/renderer_rd/shaders/environment/sdfgi_preprocess.glsl `__ -- `servers/rendering/renderer_rd/shaders/environment/sdfgi_direct_light.glsl `__ +- `servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl `__ +- `servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl `__ - VoxelGI debug draw mode +- `servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl `__ - SDFGI Cascades debug draw mode +- `servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl `__ - SDFGI Probes debug draw mode +- `servers/rendering/renderer_rd/shaders/environment/sdfgi_integrate.glsl `__ +- `servers/rendering/renderer_rd/shaders/environment/sdfgi_preprocess.glsl `__ +- `servers/rendering/renderer_rd/shaders/environment/sdfgi_direct_light.glsl `__ **Lightmapper C++ code:** -- `scene/3d/lightmap_gi.cpp `__ - LightmapGI node -- `editor/plugins/lightmap_gi_editor_plugin.cpp `__ - Editor UI for the LightmapGI node -- `scene/3d/lightmapper.cpp `__ - Abstract class -- `modules/lightmapper_rd/lightmapper_rd.cpp `__ - GPU-based lightmapper implementation +- `scene/3d/lightmap_gi.cpp `__ - LightmapGI node +- `editor/plugins/lightmap_gi_editor_plugin.cpp `__ - Editor UI for the LightmapGI node +- `scene/3d/lightmapper.cpp `__ - Abstract class +- `modules/lightmapper_rd/lightmapper_rd.cpp `__ - GPU-based lightmapper implementation **Lightmapper GLSL shaders:** -- `modules/lightmapper_rd/lm_raster.glsl `__ -- `modules/lightmapper_rd/lm_compute.glsl `__ -- `modules/lightmapper_rd/lm_blendseams.glsl `__ +- `modules/lightmapper_rd/lm_raster.glsl `__ +- `modules/lightmapper_rd/lm_compute.glsl `__ +- `modules/lightmapper_rd/lm_blendseams.glsl `__ Depth of field ^^^^^^^^^^^^^^ @@ -585,15 +604,15 @@ when temporal antialiasing is enabled. **Depth of field C++ code:** -- `servers/rendering/renderer_rd/effects/bokeh_dof.cpp `__ +- `servers/rendering/renderer_rd/effects/bokeh_dof.cpp `__ **Depth of field GLSL shader (compute - used for Forward+):** -- `servers/rendering/renderer_rd/shaders/effects/bokeh_dof.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/bokeh_dof.glsl `__ **Depth of field GLSL shader (raster - used for Forward Mobile):** -- `servers/rendering/renderer_rd/shaders/effects/bokeh_dof_raster.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/bokeh_dof_raster.glsl `__ Screen-space effects (SSAO, SSIL, SSR, SSS) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -619,31 +638,31 @@ SSR is always performed at half resolution to improve performance. **Screen-space effects C++ code:** -- `servers/rendering/renderer_rd/effects/ss_effects.cpp `__ +- `servers/rendering/renderer_rd/effects/ss_effects.cpp `__ **Screen-space ambient occlusion GLSL shader:** -- `servers/rendering/renderer_rd/shaders/effects/ssao.glsl `__ -- `servers/rendering/renderer_rd/shaders/effects/ssao_blur.glsl `__ -- `servers/rendering/renderer_rd/shaders/effects/ssao_interleave.glsl `__ -- `servers/rendering/renderer_rd/shaders/effects/ssao_importance_map.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/ssao.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/ssao_blur.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/ssao_interleave.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/ssao_importance_map.glsl `__ **Screen-space indirect lighting GLSL shader:** -- `servers/rendering/renderer_rd/shaders/effects/ssil.glsl `__ -- `servers/rendering/renderer_rd/shaders/effects/ssil_blur.glsl `__ -- `servers/rendering/renderer_rd/shaders/effects/ssil_interleave.glsl `__ -- `servers/rendering/renderer_rd/shaders/effects/ssil_importance_map.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/ssil.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/ssil_blur.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/ssil_interleave.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/ssil_importance_map.glsl `__ **Screen-space reflections GLSL shader:** -- `servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl `__ -- `servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_scale.glsl `__ -- `servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_filter.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_scale.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_filter.glsl `__ **Subsurface scattering GLSL:** -- `servers/rendering/renderer_rd/shaders/effects/subsurface_scattering.glsl `__ +- `servers/rendering/renderer_rd/shaders/effects/subsurface_scattering.glsl `__ Sky rendering ^^^^^^^^^^^^^ @@ -666,9 +685,9 @@ article. **Sky rendering C++ code:** -- `servers/rendering/renderer_rd/environment/sky.cpp `__ - Sky rendering -- `scene/resources/sky.cpp `__ - Sky resource (not to be confused with sky rendering) -- `scene/resources/sky_material.cpp `__ SkyMaterial resources (used in the Sky resource) +- `servers/rendering/renderer_rd/environment/sky.cpp `__ - Sky rendering +- `scene/resources/sky.cpp `__ - Sky resource (not to be confused with sky rendering) +- `scene/resources/sky_material.cpp `__ SkyMaterial resources (used in the Sky resource) **Sky rendering GLSL shader:** @@ -699,14 +718,14 @@ article. **Volumetric fog C++ code:** -- `servers/rendering/renderer_rd/environment/fog.cpp `__ - General volumetric fog -- `scene/3d/fog_volume.cpp `__ - FogVolume node -- `scene/resources/fog_material.cpp `__ - FogMaterial resource (used by FogVolume) +- `servers/rendering/renderer_rd/environment/fog.cpp `__ - General volumetric fog +- `scene/3d/fog_volume.cpp `__ - FogVolume node +- `scene/resources/fog_material.cpp `__ - FogMaterial resource (used by FogVolume) **Volumetric fog GLSL shaders:** -- `servers/rendering/renderer_rd/shaders/environment/volumetric_fog.glsl `__ -- `servers/rendering/renderer_rd/shaders/environment/volumetric_fog_process.glsl `__ +- `servers/rendering/renderer_rd/shaders/environment/volumetric_fog.glsl `__ +- `servers/rendering/renderer_rd/shaders/environment/volumetric_fog_process.glsl `__ Occlusion culling ^^^^^^^^^^^^^^^^^ @@ -748,8 +767,8 @@ RendererSceneOcclusionCull. **Occlusion culling C++ code:** -- `scene/3d/occluder_instance_3d.cpp `__ -- `servers/rendering/renderer_scene_occlusion_cull.cpp `__ +- `scene/3d/occluder_instance_3d.cpp `__ +- `servers/rendering/renderer_scene_occlusion_cull.cpp `__ Visibility range (LOD) ^^^^^^^^^^^^^^^^^^^^^^^ @@ -763,7 +782,7 @@ same mesh with different LODs (to allow for split screen rendering to look corre **Visibility range C++ code:** -- `servers/rendering/renderer_scene_cull.cpp `__ +- `servers/rendering/renderer_scene_cull.cpp `__ Automatic mesh LOD ^^^^^^^^^^^^^^^^^^ @@ -790,8 +809,8 @@ their own mesh LOD thresholds (which can be different from the main scene render **Mesh LOD generation on import C++ code:** -- `scene/resources/importer_mesh.cpp `__ +- `scene/resources/importer_mesh.cpp `__ **Mesh LOD determination C++ code:** -- `servers/rendering/renderer_scene_cull.cpp `__ +- `servers/rendering/renderer_scene_cull.cpp `__ diff --git a/contributing/development/core_and_modules/object_class.rst b/contributing/development/core_and_modules/object_class.rst index 77db5fdbfbe..e2afbdad761 100644 --- a/contributing/development/core_and_modules/object_class.rst +++ b/contributing/development/core_and_modules/object_class.rst @@ -71,13 +71,17 @@ Registering functions is one: .. code-block:: cpp - ClassDB::bind_method(D_METHOD("methodname", "arg1name", "arg2name"), &MyCustomMethod); + ClassDB::bind_method(D_METHOD("methodname", "arg1name", "arg2name", "arg3name"), &MyCustomType::method); -Default values for arguments can be passed in reverse order: +Default values for arguments can be passed as parameters at the end: .. code-block:: cpp - ClassDB::bind_method(D_METHOD("methodname", "arg1name", "arg2name"), &MyCustomType::method, DEFVAL(-1)); // default value for arg2name + ClassDB::bind_method(D_METHOD("methodname", "arg1name", "arg2name", "arg3name"), &MyCustomType::method, DEFVAL(-1), DEFVAL(-2)); // Default values for arg2name (-1) and arg3name (-2). + +Default values must be provided in the same order as they are declared, +skipping required arguments and then providing default values for the optional ones. +This matches the syntax for declaring methods in C++. ``D_METHOD`` is a macro that converts "methodname" to a StringName for more efficiency. Argument names are used for introspection, but when @@ -142,7 +146,7 @@ For example: PropertyInfo(Variant::INT, "amount", PROPERTY_HINT_RANGE, "0,49,1", PROPERTY_USAGE_EDITOR) -This is an integer property named "amount". The hint is a range, and the range +This is an integer property named "amount". The hint is a range, and the range goes from 0 to 49 in steps of 1 (integers). It is only usable for the editor (editing the value visually) but won't be serialized. diff --git a/contributing/workflow/img/testing_pull_requests_checks_artifacts.webp b/contributing/workflow/img/testing_pull_requests_checks_artifacts.webp index c336fb5aea8..d758290d9cf 100644 Binary files a/contributing/workflow/img/testing_pull_requests_checks_artifacts.webp and b/contributing/workflow/img/testing_pull_requests_checks_artifacts.webp differ diff --git a/contributing/workflow/img/testing_pull_requests_checks_artifacts_list.webp b/contributing/workflow/img/testing_pull_requests_checks_artifacts_list.webp index d758290d9cf..c336fb5aea8 100644 Binary files a/contributing/workflow/img/testing_pull_requests_checks_artifacts_list.webp and b/contributing/workflow/img/testing_pull_requests_checks_artifacts_list.webp differ diff --git a/contributing/workflow/pr_workflow.rst b/contributing/workflow/pr_workflow.rst index db43fb3637f..b11b30d3415 100644 --- a/contributing/workflow/pr_workflow.rst +++ b/contributing/workflow/pr_workflow.rst @@ -436,7 +436,7 @@ The interactive rebase If you didn't follow the above steps closely to *amend* changes into a commit instead of creating fixup commits, or if you authored your changes without being -aware of our workflow and Git usage tips, reviewers might request of your to +aware of our workflow and Git usage tips, reviewers might request you to *rebase* your branch to *squash* some or all of the commits into one. Indeed, if some commits have been made following reviews to fix bugs, typos, etc. @@ -518,7 +518,7 @@ will raise an error: hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. -This is a sane behavior, Git will not let you push changes that would +This is reasonable behavior, Git will not let you push changes that would override remote content. But that's actually what we want to do here, so we will have to *force* it: @@ -530,6 +530,31 @@ And tadaa! Git will happily *replace* your remote branch with what you had locally (so make sure that's what you wanted, using ``git log``). This will also update the PR accordingly. +Rebasing onto another branch +---------------------------- + +If you have accidentally opened your PR on the wrong branch, or need to target another branch +for some reason, you might need to filter out a lot of commits that differ between the old branch +(for example ``4.2``) and the new branch (for example ``master``). This can make rebasing difficult +and tedious. Fortunately ``git`` has a command just for this situation, ``git rebase --onto``. + +If your PR was created from the ``4.2`` branch and you want to update it to instead start at ``master`` +the following steps *should* fix this in one step: + +.. code-block:: text + + $ git rebase -i --onto master 4.2 + +This will take all the commits on your branch *after* the ``4.2`` branch, and then splice them on top of ``master``, +ignoring any commits from the ``4.2`` branch not on the ``master`` branch. You may still need to do some fixing, but +this command should save you a lot of tedious work removing commits. + +Just like above for the interactive rebase you need to force push your branch to handle the different changes: + +:: + + $ git push --force origin better-project-manager + Deleting a Git branch --------------------- diff --git a/getting_started/first_2d_game/04.creating_the_enemy.rst b/getting_started/first_2d_game/04.creating_the_enemy.rst index ff64fe97193..e336bd1136a 100644 --- a/getting_started/first_2d_game/04.creating_the_enemy.rst +++ b/getting_started/first_2d_game/04.creating_the_enemy.rst @@ -24,7 +24,7 @@ Click Scene -> New Scene from the top menu and add the following nodes: Don't forget to set the children so they can't be selected, like you did with the Player scene. -Select the ``Mob`` node and set it's ``Gravity Scale`` +Select the ``Mob`` node and set its ``Gravity Scale`` property in the :ref:`RigidBody2D ` section of the inspector to ``0``. This will prevent the mob from falling downwards. diff --git a/getting_started/first_2d_game/05.the_main_game_scene.rst b/getting_started/first_2d_game/05.the_main_game_scene.rst index 9e7f47ad48d..8475ca11fbc 100644 --- a/getting_started/first_2d_game/05.the_main_game_scene.rst +++ b/getting_started/first_2d_game/05.the_main_game_scene.rst @@ -198,7 +198,7 @@ Note that a new instance must be added to the scene using ``add_child()``. var mob = mob_scene.instantiate() # Choose a random location on Path2D. - var mob_spawn_location = get_node("MobPath/MobSpawnLocation") + var mob_spawn_location = $MobPath/MobSpawnLocation mob_spawn_location.progress_ratio = randf() # Set the mob's direction perpendicular to the path direction. @@ -288,7 +288,7 @@ You should be able to move the player around, see mobs spawning, and see the player disappear when hit by a mob. When you're sure everything is working, remove the call to ``new_game()`` from -``_ready()``. +``_ready()`` and replace it with ``pass``. What's our game lacking? Some user interface. In the next lesson, we'll add a title screen and display the player's score. diff --git a/getting_started/first_2d_game/06.heads_up_display.rst b/getting_started/first_2d_game/06.heads_up_display.rst index 95b561c6f22..f94e58a06e6 100644 --- a/getting_started/first_2d_game/06.heads_up_display.rst +++ b/getting_started/first_2d_game/06.heads_up_display.rst @@ -184,8 +184,8 @@ Add the code below to ``HUD`` to update the score GetNode