Skip to content

Conversation

raulsntos
Copy link
Member

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@d5ad055

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 +76
**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 +135 to +139
**TextServerExtension**
Method ``_font_draw_glyph`` adds a new ``oversampling`` optional parameter |❌| |❌| |❌| `GH-104872`_
Method ``_font_draw_glyph_outline`` adds a new ``oversampling`` optional parameter |❌| |❌| |❌| `GH-104872`_
Method ``_shaped_text_draw`` adds a new ``oversampling`` optional parameter |❌| |❌| |❌| `GH-104872`_
Method ``_shaped_text_draw_outline`` adds a new ``oversampling`` optional parameter |❌| |❌| |❌| `GH-104872`_
Copy link
Member Author

Choose a reason for hiding this comment

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

It seems users could not have been implementing TextServerExtension in a scripting language (like GDScript or C#) because it has required virtual methods that use pointers (e.g. shaped_text_get_ellipsis_glyphs). As for GDExtensions, compat methods were registered. So it seems fine to break compatibility here.

cc @godotengine/gui-nodes

Copy link
Member

Choose a reason for hiding this comment

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

Implementing text server with scripts doesn't make much sense. The only practical use case might be adding support for system font/text rendering API (e.g, macOS CoreText or Windows DirectWrite).

Comment on lines +197 to +198
**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

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.

4 participants