Skip to content

Conversation

raulsntos
Copy link
Member

@raulsntos raulsntos commented Aug 21, 2025

This documents all the breaking changes in 4.5, like we did for previous versions:

Area maintainers should review the changes listed for their area. Also feel free to suggest any addition that I might have missed or make follow-up PRs.

Updated as of commit godotengine/godot@bfa330d

Preview: https://github.com/raulsntos/godot-docs/blob/breaking_changes_4.5/tutorials/migrating/upgrading_to_godot_4.5.rst

@raulsntos raulsntos added this to the 4.5 milestone Aug 21, 2025
@raulsntos raulsntos added enhancement content:new page Issues and PRs related to creation of new documentation pages for new or undocumented features area:manual Issues and PRs related to the Manual/Tutorials section of the documentation labels Aug 21, 2025
Comment on lines +65 to +87
**GLTFAccessor**
Property ``byte_offset`` changes type metadata from ``int32`` to ``int64`` |✔️| |❌| |❌| `GH-106220`_
Property ``component_type`` changes type from ``int`` to ``GLTFAccessor::GLTFComponentType`` |✔️| |❌| |❌| `GH-106220`_
Property ``count`` changes type metadata from ``int32`` to ``int64`` |✔️| |❌| |❌| `GH-106220`_
Property ``sparse_count`` changes type metadata from ``int32`` to ``int64`` |✔️| |❌| |❌| `GH-106220`_
Property ``sparse_indices_byte_offset`` changes type metadata from ``int32`` to ``int64`` |✔️| |❌| |❌| `GH-106220`_
Property ``sparse_indices_component_type`` changes type from ``int`` to ``GLTFAccessor::GLTFComponentType`` |✔️| |❌| |❌| `GH-106220`_
Property ``sparse_values_byte_offset`` changes type metadata from ``int32`` to ``int64`` |✔️| |❌| |❌| `GH-106220`_
**GLTFBufferView**
Property ``byte_length`` changes type metadata from ``int32`` to ``int64`` |✔️| |❌| |❌| `GH-106220`_
Property ``byte_offset`` changes type metadata from ``int32`` to ``int64`` |✔️| |❌| |❌| `GH-106220`_
Property ``byte_stride`` changes type metadata from ``int32`` to ``int64`` |✔️| |❌| |❌| `GH-106220`_
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seem like a big breaking change, and these APIs seem to have existed for a while (since 4.0). I don't know if there are many C# users that were using them and would be affected, but it seems we should avoid breaking compatibility in these APIs.

cc @godotengine/import

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@aaronfranke Has changed these. Would like your opinion.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we silently upgraded our apis from 32bit to 64bit due to various errors.

Copy link
Member

@aaronfranke aaronfranke Aug 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compatibility methods are registered for these. I know that fixes GDExtension, but I'm not sure about C#? Anyway...

I don't know if there are many C# users that were using them and would be affected

No, almost nobody was using these APIs. Before PR godotengine/godot#108853 is merged for Godot 4.6, the functions to read/write glTF accessor and buffer data are internal to GLTFDocument, so in the current master of Godot, most of these exposed values aren't useful to user scripts unless they do a lot of manual work.

Comment on lines +197 to +185
**EditorExportPlatformExtension**
Method ``_get_option_icon`` changes return type from ``ImageTexture`` to ``Texture2D`` |✔️| |❌| |❌| `GH-108825`_
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, we can't avoid breaking compat in C# if the method changed the return type. However, this class was added recently (in 4.4), and it's probably not implemented often by C# users (although we can't know for sure). So maybe breaking compatibility here is fine.

cc @godotengine/docks @godotengine/_platforms

@adamscott
Copy link
Member

@raulsntos You should also mention in this document that Android now requires .NET 9

.. note::

In C#, ``StringExtensions.PathJoin`` now avoids adding an extra path separator when the original string is empty,
and when the appended path starts with a path separator (`GH-105281`_).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
and when the appended path starts with a path separator (`GH-105281`_).
or when the appended path starts with a path separator (`GH-105281`_).

If these are two different cases, which based on the PR seems to be the case, both are correct but this is less confusing

.. note::

In C#, the enum ``RenderingDevice.Features`` breaks compatibility because of the way the bindings generator
detects the enum prefix. New members where added in `GH-103941`_ to the enum that caused the enum member
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
detects the enum prefix. New members where added in `GH-103941`_ to the enum that caused the enum member
detects the enum prefix. New members where added to the enum in `GH-103941`_ that caused the enum member

@mihe
Copy link
Contributor

mihe commented Sep 12, 2025

It might be good to mention something about godotengine/godot#105746 under "Behavior changes".

People who are already using Jolt in 4.4 and are migrating to 4.5 will start to have overlaps reported between Area3D and static bodies that they didn't have before, assuming they didn't already enable the physics/jolt_physics_3d/simulation/areas_detect_static_bodies project setting. If the new behavior isn't desirable they'll need to adjust their collision layers/masks to emulate the old behavior.

Maybe something like:

Physics
~~~~~~~

.. note::

	When the 3D physics engine is set to Jolt Physics, you will now always have overlaps between ``Area3D`` and static
	bodies reported by default, as the ```physics/jolt_physics_3d/simulation/areas_detect_static_bodies``` project setting
	has been removed (`GH-105746`_). If you still want such overlaps to be ignored, you will need change the collision mask
	or layer of either the ``Area3D`` or the static body instead.

@raulsntos raulsntos marked this pull request as ready for review September 13, 2025 00:42
@mhilbrunner
Copy link
Member

As we're running out of time, I'm going to merge this now after giving it a read. If more crops up, we can add to it in further PRs and cherrypick those, as I'm going to branch off 4.5 in a sec. Thanks for working on it!

@mhilbrunner mhilbrunner merged commit b90e1af into godotengine:master Sep 13, 2025
1 check passed
@raulsntos raulsntos deleted the breaking_changes_4.5 branch September 14, 2025 18:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:manual Issues and PRs related to the Manual/Tutorials section of the documentation content:new page Issues and PRs related to creation of new documentation pages for new or undocumented features enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants