Defold 1.4.4 has been released

Release notes

Summary

  • BREAKING CHANGE: (#7431) Refactor textures as resource
  • NEW: (#7457) Show self values in debugger for *.render_script, *.script and *.gui_script
  • NEW: (#7413) Improved gamepad support for the Windows platform
  • NEW: (#6845) Paged texture atlas support
  • NEW: (#7378) Added frustum culling support for model component
  • NEW: (#7415) Added go.exists()
  • FIX: (#7437) Fix bug when some of embeded GOs maybe ignored by component counter
  • FIX: (#7429) Removed duplicate Size property on Gui Text objects
  • FIX: (#7353) Fixed index buffer lookup in headless graphics backend
  • FIX: (#7406) Use locale-insensitive conversion from lower to upper case in bob
  • FIX: (#7400) Show an error message when an added collection file is missing
  • FIX: (#7444) Updated sprite size property documentation
  • FIX: (#7395) Improve error message when Android build is too large
  • FIX: (#7401) URL decode Bob resource path before attempting file operations
  • FIX: (#7446) Bugfix for using basis transcoding since paged atlas feature
  • FIX: (#7430) Produce uv bounds for dynamic atlases
  • FIX: (#7410) Some font glyphs are not rendering correctly
  • FIX: (#7388) Identical names require the same values in templates
  • FIX: (#7419) Set resource name based on filename
  • FIX: (#7435) Add support for external buffers from the .gltf/.glb formats
  • FIX: (#7396) Validate Android package name and iOS bundle identifier
  • FIX: (#7451) Update JavaFX (Fix issue with freezes when using AMD GPUs on Linux system)

Engine

BREAKING CHANGE: (#7431) Refactor textures as resource
As a first step in representing textures as actual handles that can be passed around between the render scripts and the rest of the engine, we need to separate between the actual texture handles and the resources that hold them. A HTexture is currently a pointer to the asset created by the graphics adapter which is then stored in the resource system. Instead, a wrapper around the graphics handle is stored, which means that we can change the way we represent the handle.

Technical note: This is a breaking change in the public dmSDK part of the engine. Several resources now store TextureResource pointers instead of the HTexture objects, and any native extension that use these APIs will have to update their code to make sure the types are correct.

NEW: (#7457) Show self values in debugger for *.render_script, *.script and *.gui_script
Show values from self table in debuggerfor *.render_script, *.script and *.gui_script .

NEW: (#7413) Improved gamepad support for the Windows platform
Added support for various controllers on the Windows platform by implementing a Direct Input layer that can support a wider range of devices natively. This means that you no longer need to use a translation layer between XInput and Direct Input via external tools such as DS4Windows to be able to use gamepads with Defold.

NEW: (#6845) Paged texture atlas support
Added support for generating atlases with multiple pages of texture data. Enable this feature by setting the max page size value in the atlas files to non-zero. To use the paged atlas in the materials, the material shaders require a “sampler2DArray” uniform in order to sample from the texture.

NEW: (#7378) Added frustum culling support for model component

NEW: (#7415) Added go.exists()
Added a go.exists() function to check if a game object exists. Usage:

if go.exists("/my_game_object") then
    print("The game object exists!")
end

FIX: (#7437) Fix bug when some of embeded GOs maybe ignored by component counter
In a case when embedded GOs in a few different collections are the same, component counter didn’t count the second and the following GOs.

FIX: (#7429) Removed duplicate Size property on Gui Text objects
Gui Text nodes no longer show two Size properties.

FIX: (#7353) Fixed index buffer lookup in headless graphics backend
This fixes a buffer overrun issue when using index buffers with the headless graphics backend.

FIX: (#7406) Use locale-insensitive conversion from lower to upper case in bob
This fixes an issue when using the bob command line tool to bundle a Defold project on an operating system with a locale which is does not have a standard lower to upper case mapping, such as Turkish (where a lower case i becomes İ, ie a capital I with a dot).

FIX: (#7400) Show an error message when an added collection file is missing
Show a better error message when a collection file which has been added to a collection does not exist. Previously a NullPointerException error was shown with no reference to the missing file.

FIX: (#7444) Updated sprite size property documentation
The sprite size property was marked as read-only even though it is possible to change the size of a sprite if the size-mode is set to manual.

FIX: (#7395) Improve error message when Android build is too large
It is not possible to create an APK larger than 2Gb using the Android bundletool, but the error message when bundling a very large APK using the command line tools or editor is not very informative. This fix detects the case when the APK is too large and outputs additional information in the error message.

FIX: (#7401) URL decode Bob resource path before attempting file operations
Bob now URL decodes the file:// URL that references the Bob jar file before attempting file operations.

FIX: (#7446) Bugfix for using basis transcoding since paged atlas feature
Fixed an issue with using basis compression together with cubemap generation, where the output of the texture encoding produced an empty result. To fix this issue, we have separated the transcoding into two passes - a preprocessing pass for memory allocation of the result, and one to do the actual transcoding.

FIX: (#7430) Produce uv bounds for dynamic atlases
Added support for using dynamic atlases in GUI.

FIX: (#7452 Updated build toolchain with XCode 14.2, macOS 13.1 and iOS 16.2
We’ve updated our toolchain to support latest XCode plus macOS and iOS sdks.

Editor

FIX: (#7410) Some font glyphs are not rendering correctly
Small glyphs, such as the dot (.) character, are not rendered correctly when the uncompressed size of the glyph is smaller than the compressed size. When this happens the first byte of the glyph is ignored and the glyph is rendered skewed or shifted one pixel in the font texture.

FIX: (#7388) Identical names require the same values in templates
User-facing changes: when multiple templates used in the same GUI define resources with clashing names, we now require them to refer to the same values. For instance, suppose a GUI file named A.gui contains two templates: B.gui and C.gui. If both templates define a font named “main_font” and the actual fonts used in each template are not the same, A.gui will not know which one to use and will randomly choose one. To prevent this issue, we will now display a build error when such clashes occur.

FIX: (#7419) Set resource name based on filename
A common source of problems when working with collection proxies is the fact that all collections are given the name “default”, and if you are not careful and remember to change this name you will run into issues such as The collection ‘default’ could not be created since there is already a socket with the same name.. This change will give a created Collection, Material, or Model resources the same name as the filename.

FIX: (#7435) Add support for external buffers from the .gltf/.glb formats

FIX: (#7396) Validate Android package name and iOS bundle identifier
An Android package name and Apple bundle identifier follows strict rules, but there are no checks in place to verify that the package name and bundle identifiers in game.project actually follow the rules. This fix adds a check when bundling for Android, iOS and macOS that these values follow their respective formats.

Android: Must consist of two or more segments separated by a dot. Each segment must start with a letter. Each segment must only consist of alphanumeric letters or the underscore character.

iOS and macOS: Must consist of two or more segments separated by a dot. Each segment must start with a letter. Each segment must only consist of alphanumeric letters, the underscore or hypen (-) character.

FIX: (#7451) Update JavaFX (Fix issue with freezes when using AMD GPUs on Linux system)
JavaFX updates to the latest at the moment 19.0.2.1 version. It will help with stability and performance, especially on Linux.

22 Likes

Great release! Thank you! :heart:

Btw. The link from Newsletter points to 1.4.3, not here. Please, remember about it next time!

Note that for the Defold 1.4.4 version, you also need the latest versions of these extensions:

8 Likes

Oh no! :frowning: I’ll make sure to double check next time.

2 Likes

Hi guys, thank you for the update!

I was using Defold 1.3.6 until now, and since I was between 2 features I decided to update Defold.

So I installed the 1.4.4 version, updated Spine (to 4.1.19 - latest 4.1), re-exported my spinejson and launched the game. The spine animations seem to work fine until I use the spine.get_go" function, ex:

local function get_char_effects_t_pos(gp_effect_id, spine_model_url)	
	local t_pos = {}
	local char_particles_id, char_FX_id = c.GP_EFFECT_CHAR_PARTICLES_ID[gp_effect_id][1], c.GP_EFFECT_CHAR_FX_ID[gp_effect_id][1]
	local bone_name_particles, bone_name_FX = c.CHAR_PARTICLES_SPINE_BONE[char_particles_id][1], c.CHAR_FX_SPINE_BONE[char_FX_id][1]
	print("[function] bone_name_particles = "..bone_name_particles.." / bone_name_FX = "..bone_name_FX)
	t_pos[c.CHAR_EFFECT_TYPE_PARTICLES] = go.get_world_position(spine.get_go(spine_model_url, hash(bone_name_particles)))
	t_pos[c.CHAR_EFFECT_TYPE_FX] = go.get_world_position(spine.get_go(spine_model_url, hash(bone_name_FX)))

	return t_pos, bone_name_particles, bone_name_FX
end

The console highlights this line (and probably the next one):

t_pos[c.CHAR_EFFECT_TYPE_PARTICLES] = go.get_world_position(spine.get_go(spine_model_url, hash(bone_name_particles)))

For some reason, my bones seem to be considered “null” , but in 1.3.6 it was working fine. And the “root” bone (cf console) exists in Spine, of course. Actually, everything using the spine.get_go() doesn’t work anymore.

No change in the documentation.

Did I miss something or is this a bug?

Please take a look in your component and turn-on GOs on bones using the Create GO Bones checkbox for components which need GO for bones (where you want to have access to bones as GOs from code)

Release notes from one of the spine updates:

The new checkbox Create GO Bones (default: false), controls if the Spine model should create game objects for each bone in the model.
Breaking change:
Since this version, the default value is false (it was previously true) in order to save resources by default.

  • Migration: Enable the check box to use the old behavior.
1 Like

@AGulev Oops sorry, I didn’t mention that I already enabled the check box (something mentioning the word “bone” looked like something that could help).

But… it still doesn’t work. The error message remains displayed.

I released a new version of the spine extension where I fixed the way we show the error message

Pay attention, it’s not fixing your problem, it’s just fixing the issue when using hashes as bone names displayed as “(null)” in the error message.

But I still ask you to check this particular component in the editor and make sure that you have turned on Create GO Bones checkbox.

4 Likes

As mentioned above:
image

image

(unless you’re talking about something else?)

After the update, there are no build logs in the console window from below. Checked in html5, android, it’s empty during the build phase.
Is this a bug or do I need to enable it somewhere now?

Looks like a bug. I’ve created a ticket: https://github.com/defold/defold/issues/7515

I was about to create a ticket with a minimal repro case, but when I realized it worked fine with the minimal example ( :triumph:), I decided to dig slightly deeper… And it appears that it actually came from the checkbox :see_no_evil:

BUT I’m not 100% guilty (or maybe I just didn’t understand how Defold works) because the checkbox in question was enabled in the assets hierarchy > .spinemodel
image (cf yesterday)

but for some unknown reason, not in the corresponding game object (where I added the spine_model):
image

Anyway, it works fine now, thank you for the answers and your patience.

1 Like

You have two separate spine models there. One on disc (spine_char.spinemodel), and one embedded in the game object (“spine_model”).

1 Like

Oooh f***… I didn’t even notice it was not written in italics (and thus a different object).

Case closed :zipper_mouth_face:
image

5 Likes

I’ve encountered one small problem in 1.4.4:

3 Likes

@jhonny.goransson so how does it work like now on Windows regarding the gamepads file? Do we have to retest all the controllers again under windows? Or do they appear as Xbox controllers and there is nothing else required to do?

You can use the gdc tool to generate bindings, but I think generally ps4/5 controllers should “just work”. I think they are called “wireless controller” or something like that: i don’t have one with me today so I can check for sure :slight_smile:

2 Likes

When making the iOS application bundle, it seems that the ios bundle version cannot be raised in the game.project file?

When I make a new bundle for ios, it keeps using the same old bundle version variable. Apple doesn’t accept new uploads because of this (the version needs to be increased for it to be accepted).

to be clear, the value can be edited in game.project, but the same older value keeps being used in the apple ipa file.

Anyone else have this issue?

Thanks

Which value are you changing? The Bundle Version in the iOS section of game.project or Project Version in the Project section? It should be Bundle Version you are changing.

You can also check your build folder for the final info.plist where all game.project values have been inserted.

HI,

Thank you, it was my mistake, I was using the old (static) plist.info as source for new info.plist…

Working fine now

thanks