Kanzi 3.8 release notes

New features

  • Property Target Easing Interpolator

    Use the Property Target Easing Interpolator when you want to dynamically set the target value for a property and want to interpolate the current value to the target value over time using an easing function. Easing functions enable you to create lifelike animations that offer a more pleasant user experience.

    See Interpolating property values using easing functions.

  • New functionality for binding expressions

    In binding expressions you can now use:

    • Trigonometric functions

    • Relational operators

    • Logical operators

    • Accessor functions

    • Vector functions

    • Multiplication of vectors and quaternions

    See Bindings expressions reference.

    ../../_images/binding-operations.png
  • Asset Packages

    With asset packages you can create an asset library with content, such as UI components, materials, brushes, styles, and textures. Use asset packages to make this content readily available for use in different Kanzi Studio projects or to share the content within your company for all your Kanzi applications.

    See Asset packages.

    ../../_images/myassetsource.png
  • Cubemap Render Pass

    Use the Cubemap Render Pass to create dynamic reflections of the environment on the surface of 3D nodes.

    See Creating cubemap reflections.

Feature improvements

  • Kanzi now handles a font file as a font family resource, which can contain any number of font files:

    • Introduced the FontStyleDefinition class to contain a collection of font style property values that are passed inside Kanzi.

    • Moved from the TextFormat and TextLayouter classes the font style setter and getter functions to the FontStyleDefinition class.

    • Introduced the FontRuntime class to map FontStyleDefinition to a font file (FontFile) at runtime. FontRuntime is immutable. When a font style changes, request a new FontRuntime object from the FontManager.

    • Introduced the FontStyleConcept class which includes helper functions to FontRuntime.

    • TextFormat, TextLayouter, and TextShaper now take FontRuntime instead of Font.

    • You can now set the appearance of a font with the Font Weight and Font Style properties, that set which font file from a font family a Text Block node uses to render text.

    • The Font property (Node::FontProperty) is replaced with the Font Family property (Node::FontFamilyProperty).

    To learn how to migrate your Kanzi application to use the changed API, see Font changes.

  • Improved functionality of binding expressions:

    • Added matrix and transformation functions INVERSE and TRANSFORM.

    • Added support for matrix and conversion between matrix and SRT conversion.

    • You can now access text resources using a resource ID.

    See Bindings expressions reference.

  • Improvements to resource loading:

    • ResourceManager::LoadTask now has LoadAndFinish and FinishOnly load task types. FinishOnly load tasks skip loader threads and Kanzi queues them directly to the main thread FinishingQueue.

    • A load task can now trigger background loading of dependencies. This improves the use of the loader threads, improves the loading time, and makes the background loading smoother.

    • Added these resource types to use load tasks and load task dependencies:

      • Brush

      • Material

      • Mesh

      • Render Pass Prefab

      • State Manager

  • Improved the way resource dictionaries are stored in kzb files. This enables faster loading times of kzb files that have large, unused resource dictionaries, such as localization tables.

  • Introduced speed optimization for setProperty, addPropertyModifier, removePropertyModifier, copyLocalValue.

  • Introduced Kanzi Engine API to allow notifying an application that the UI is suspended:

    • Added override function onSuspend that Kanzi calls from suspendOverride.

    • Added ability to cancel the suspension of the UI.

  • In Kanzi Engine API introduced PropertyTypeRegistry that keeps a list of all registered property types in an application. See kanzi::beginPropertyTypes and kanzi::endPropertyTypes.

  • Improved the ResourceManager destructor to print the complete list of referenced resources.

  • Added these render target formats:

    • ARGB 8-bit (A8R8G8B8_UNORM)

    • Alpha 8-bit (A8_UNORM)

    • Grayscale 8-bit (L8_UNORM)

    • Grayscale alpha 8-bit (L8A8_UNORM)

    • Alpha Luminance 8-bit (A8_L8_UNORM)

  • Improved collection of prefab dependencies. For the State Managers and resource IDs that are used in a prefab, Prefab View asynchronous prefab changes can now load resource dependencies in the background.

  • Turned font engine backends into plugins to enable you to have both FreeType and iType font engines for the Kanzi Studio Preview installed at the same time. On platforms that support dynamic libraries, this enables you to select the font engine at application startup. See FontEngine.

  • In Kanzi Studio triggers are now project items, which enables you to:

    • Reorder the triggers by dragging them

    • Copy and paste triggers, actions, and trigger conditions

    • Modify properties in context of the items

  • Improvements to the Performance HUD:

    • You can now configure the position of the Performance HUD. See PerformanceInfoPosition.

    • In the Performance HUD you can now see the number of timer subscriptions, recurring tasks, and animations. See PerformanceInfoLevel.

  • Brought back the Overdraw visualization.

    Overdraw visualization indicates areas where Kanzi renders multiple times to the same pixel. Lighter green color indicates higher amount of overdraw.

    See Troubleshooting the performance of your application.

    ../../_images/overdraw-enabled2.png
  • Made these improvements to how Kanzi handles hardware keys:

    • Introduced KeyManipulator class. KeyManipulator dispatches KeyPressedMessage, KeyReleasedMessage messages when the user presses and releases a key, and on cancellation dispatches KeyCanceledMessage message. Keyboard.KeyDown and Keyboard.KeyUp messages are now deprecated. Use KeyManipulator messages with a dedicated key manipulator for each key that you want to handle.

    • The NavigationManipulator class now handles navigation keys, such as (Up Arrow), (Down Arrow), (Right Arrow) and (Left Arrow), Home, End, Page Up, Page Down keyboard keys.

    • The FocusNavigationManipulator class now handles the keys used in focus chain and directional focus navigation. Use this manipulator on the focus scope nodes. To set the manipulator on focus scopes, use FocusScope.

    To learn how to migrate your Kanzi application to use the changed API, see Hardware key handling changes.

  • Refactored MessageType:

    • Replaced kzuMessageType with AbstractMessageTypeDescriptor.

    • MessageType now automatically attaches its argument metaclass. This makes optional the attaching of message types to an owning class with macro KZ_METACLASS_MESSAGE_TYPE.

    • For kzb registered messages, message arguments class is fixed to MessageArguments.

    • Replaced the constructor of MessageArguments that takes AbstractMessageType as a parameter with Node::dispatchAbstractMessage.

  • Introduced input manipulator node components to maintain manipulators attached to nodes. You can find these components in Node Components > Input Manipulators: Click Manipulator, Multi-Click Manipulator, Long-Press Manipulator, Pan Manipulator, Key Manipulator. See Using input manipulators.

    ../../_images/input-manipulators.png
  • PanManipulator now reports velocity in these messages:

    • PanManipulator::MovedMessage

    • PanManipulator::EnteredMessage

    • PanManipulator::LeftMessage

    • PanManipulator::FinishedMessage

  • Added the functionality and the Depth Compare Function property for setting the depth compare mode for depth render targets in Composition Target Render Pass.

    ../../_images/depth-compare-function.png
  • Improved usability of Kanzi Studio:

    • In Kanzi Studio the items in the Node Components now use the tree control. This improvement provides you more flexibility and reduces the amount of popup windows when you work in the Node Components window.

    • You can now open files in your default Windows application straight from Kanzi Studio. In the Library > Resource Files right-click a file and select the Open With Default Windows App or the Open With... command.

      ../../_images/open-with.png
    • Renewed the Kanzi Studio icons for the State Manager, State Tools, and Styles.

Changes

  • Updated PVRTexTool to the version 4.20.0.

  • Introduced kzb format versioning with major and minor revisions. The kzb format version in Kanzi 3.8 is 11.0.

  • Changed the syntax of Kanzi Engine plugin metadata attribute SortingIndex to metadata.sortingIndex. See sortingIndex.

  • Removed legacy features:

    • Legacy kzb format support

    • kzs_thread

    • kzc_file and kzc_input_stream

    • kzc_output_stream

    • kzs_mmap

  • In Kanzi Studio custom Message Types are now separate from Property Types. In Kanzi Studio you can find them in the Library > Message Types.

    ../../_images/library-message-types.png
  • Unified the name and case for bindings operations in Kanzi Studio.

  • Platform package qnx700_screen_aarch64 for Kanzi 3.8 does not support ES2.

  • Kanzi Studio now more regularly sends usage reports to Rightware, which enables us to keep improving Kanzi Studio.

To learn how to migrate your Kanzi application to use the changed API, see Kanzi 3.8 migration guide.

Documentation

Fixes

ID

Description

Area

102522

Fixes to skinned mesh importing and calculation of the bone matrices.

See Changes to skinned meshes.

Kanzi Engine

10852, 10731, 10651

Improved handling of corrupted PNG and JPEG images. Now Kanzi throws an exception when it tries to load a corrupt PNG or JPEG image.

Kanzi Engine

10678

Fixed the issue that caused some non-printable characters to be rendered. Before this fix:

  • FreeType font engine backend rendered non-printable characters as zero-width renderable glyphs that did not affect the rendering.

  • iType font engine backend rendered non-printable characters using not-found glyphs.

10688

Fixed the issue which caused the loading of a State Manager with custom transition animations or with some triggers and actions to assert if resource loader threads are active.

Kanzi Engine

10624

Fixed the handling of corrupted or incomplete UTF-8 string input.

Kanzi Engine

10539

When you use iType font engine, Kanzi now delegates kerning to the WTShaper. WTShaper reads the kerning data from the GPOS table of a font and, for fonts that do not define kerning in a GPOS table, uses kern table as a fallback.

Kanzi Engine

10487

The Preview no longer terminates when patching a node with SetPropertyAction that reads from a property value in a State Manager

Kanzi Engine

10320

Fixed the issue that prevented the showing of all startup performance profilers.

Kanzi Engine

10193

State manager now sends Transition Started and Transition Finished messages when you do not use an animation to transition between states. See Transitions between states without animations.

Kanzi Engine

10178

Fixed issue that caused the content of a scaled node to show in another node.

Kanzi Engine

10172

Fixed the issue that caused MessageArguments instances with static lifetimes to cause a memory leak.

Kanzi Engine

10125

When State Manager dispatches Left State and Entered State messages during state transition, it now sets the StateGroup argument on these messages.

Kanzi Engine

10107

Fixed the issue that prevented the release of a texture resource of an invisible Model3D after replacing with a nullptr.

Kanzi Engine

9955

Fixed FromToAnimation to return To value at duration for all cases, especially at time zero when duration is zero.

Kanzi Engine

10647

Fixed the issue that caused the Preview to incorrectly show that the State Tools are in the Edit mode.

Kanzi Studio