Kanzi 3.9.0 迁移指南

使用此迁移指南将 Kanzi 应用程序从 Kanzi 3.8.0 更新到 Kanzi 3.9.0。

删除 JavaScript 功能

Kanzi 不再包含 V8 JavaScript 引擎,Kanzi Studio 不再包含 Execute Script 操作,该操作使您能够在 Kanzi 应用程序中使用 JavaScript 脚本。

当您在 Kanzi 3.9.0 中打开使用 Execute Script 操作的 Kanzi Studio 项目时,Kanzi Studio 将使用此操作的节点标记为无效,并以红色字体标记,但不会删除它们。这使您可以评估这些操作及其脚本的功能,并使用其他 Kanzi 功能手动复制该功能。

在您的应用程序代码中移除:

  • #include <kanzi/js/module.hpp>

  • V8Module::registerModule(domain);

64位 Kanzi Studio 预览版

Kanzi Studio Preview 现在使用 64 位架构。要迁移您的 Kanzi 应用程序:

  • 在 Kanzi Studio 3.9.0 中打开您的 Kanzi Studio 项目之前,请先备份。Kanzi Studio 会以不可逆的方式自动更新项目。

    如果您已更改这些项目的默认值,则必须手动迁移您的 Kanzi Studio 项目:

    • In Application/src/plugin/CMakeLists.txt change ${CMAKE_VS_PLATFORM_NAME} to Kanzi-specific ${PLATFORM_TARGET} that evaluates to Win64.

    • 在 Application/generate_cmake_vs2017_solution.bat 中添加 -A x64 参数。

      例如,更改

      cmake -S . -B build_vs2017 -G "Visual Studio 15 2017"
      

      至 (To)

      cmake -S . -B build_vs2017 -G "Visual Studio 15 2017" -A x64
      
    • In Kanzi Studio in the Library > Kanzi Engine Plugins for each plugin in the Properties update the plugin path to the location of the 64-bit version of the Kanzi Engine plugin.

  • 使用 64 位配置重建您的 Kanzi Engine 插件,并在使用此类插件的 Kanzi Studio 项目中,在 Library > Kanzi Engine Plugins 中右键单击每个插件并选择 Update Kanzi Engine Plugin。

MainLoopScheduler 子系统的介绍

  • 已移除类 SuspensionManager 和 FPSContraints。这些类中仍然相关的功能现在已内置到 MainLoopScheduler 中。

  • 已移除过时的任务调度器实现 KzuTaskScheduler 和 Scheduler。

  • 移除类 MainLoopTaskProfiler、MainLoopTaskSample、MainLoopTaskProfilerCategories 和 MainLoopTaskProfileRegistry。替换为 MainLoopProfiler 和 MainLoopProfilingSampleData。

  • 已移除类 Watermark 和 SplashScreen。

  • Application 类:

    • 将枚举 State 移动到 MainLoopScheduler::State。

    • 将状态 Sleeping 重命名为 Paused。

    • 已移除状态 Uninitialized 和 Error。

    • 将 sleep() 重命名为 pause(),并将 wakeup() 重命名为 resume()。

    • 已移除 onSleep()、onIdle() 和 onWakeup()。

    • 引入了 onPause()、onResumeCheck() 和 onResume(),Kanzi 在进入 Paused 状态时调用,分别用于暂停循环的每次迭代和退出 Paused 状态时。请注意,onPause() 和 onResume() 不等同于 onSleep() 和 onWakeup(),它们在以前的版本中是直接在 sleep() 和 wakeup() 调用中调用的。onResumeCheck() 也不等同于 onIdle(),现在持有检查事件队列以唤醒事件的默认实现。

    • 已移除 runOverride()、updateOverride()、renderOverride()、suspendOverride()、yieldOverride()、sleepOverride() 和 wakeupOverride()。

    • 移除 updateOverride()。弃用 onUpdate(),但尚未移除。建议在 User 阶段将任务插入主循环中。

    • 已移除 onPreRender() 和 onPostRender()。请在 Render 阶段之前或之后插入任务。

    • 已移除 initializeWatermark() 和 initializeSplashScreen()。

    • 移除 getLastFrameTime() 和 getStopWatch()。请改用 MainLoopScheduler 定时接口 getLastFrameDuration()。

    • 已移除 reloadProject()。

    • 已移除 projectReloaded() 和 onProjectInitialized()。

    • 将 executePendingChanges() 重命名为 loadStartupKzb()。

    • 已移除 suspend()、yield()、idle() 和 idleLoop()。此功能现由 MainLoopScheduler 实现。

Timer 功能

Timer 功能现在是 MainLoopScheduler 子系统的一部分,并替代了已移除的 Timer 子系统。

现在,您可以将计时器任务直接添加到主循环中:

  • 要在阶段之前添加计时器任务,请使用 MainLoopScheduler::prependTimer。

  • 要在一个阶段之后添加一个计时器任务,请使用 MainLoopScheduler::appendTimer。

  • 要移除计时器,请使用 MainLoopScheduler::removeTimer。

计时器现在具有以下重复选项:

  • Kanzi 在自添加以来经过指定时间后执行 MainLoopScheduler::TimerRecurrence::OneTime 计时器任务一次。

  • Kanzi 定期在指定的间隔执行 MainLoopScheduler::TimerRecurrence::Recurring 计时器任务。当主循环迭代之间经过多个间隔时,Kanzi 只执行一次重复任务,但通过其回调接口提供重复计数。

Timers 不再使用消息参数或属性,而是定时器回调直接接收四舍五入到定时器间隔倍数的经过时间和经过间隔数作为参数。

性能 HUD (Performance HUD)

更新了 Performance HUD 以与 MainLoopScheduler 一起工作:

  • 从 ApplicationProperties::profilingCategoryFilter 中移除了 show 选项。

  • 引入了应用程序属性 PerformanceInfoProperties::graphFilter,该属性是一个以分号分隔的任务列表,用于在 Performance HUD 中显示分析图。

绑定 (Bindings)

在以前的 Kanzi 版本中,如果绑定使用作为源值的属性类型在源节点中不存在,Kanzi 不会应用该绑定。现在,当属性类型在源节点中不存在时,绑定使用该属性类型的默认值。

Resource manager

将 ResourceManager ProtocolHandler 签名进行了现代化:

  • 现在使用 std::function,而不是函数指针。

  • 已移除 userdata 参数。您现在可以使用该函数捕获其他状态,例如使用 lambda 捕获。

DataObject 类

DataObject 类不再具有公共构造函数。您必须使用静态 create 函数来构造它们:

Kanzi 3.8.0

Kanzi 3.9.0

DataObject::DataObject(Domain*, string_view)

DataObject::create(Domain*, string_view)

DataObjectBool::DataObjectBool(Domain*, string_view)

DataObjectBool::create(Domain*, string_view)

DataObjectInt::DataObjectInt(Domain*, string_view)

DataObjectInt::create(Domain*, string_view)

DataObjectReal::DataObjectReal(Domain*, string_view)

DataObjectReal::create(Domain*, string_view)

DataObjectString::DataObjectString(Domain*, string_view)

DataObjectString::create(Domain*, string_view)

色彩空间

引入了线性色彩工作流程,现在是默认的色彩空间。如果您希望在应用程序中继续使用传统色彩空间(非线性伽马),请在该应用程序的 application.cfg 文件中添加:

SurfaceColorSpace = legacy

备注

在 linux_imx8_wayland_aarch64 平台上,Kanzi 应用程序仅适用于传统色彩空间。

请参阅 颜色工作流程 和 表面属性。

Node 类

  • 从 getRelativePath() 返回中移除了末尾的 /。例如,该函数现在返回 my/item,而不是 my/item/。

  • 在 Node::PathProperty 和 Node::getPath() 返回值中添加了前导 /,以使它们成为有效的绝对路径。例如,不再使用 Screen/RootPage,现在的值是 /Screen/RootPage。

Light 节点

从 Light 节点中移除了 Color Scale (Light::ColorScaleProperty) 属性。要调整灯光的亮度,请设置灯光颜色属性的 Intensity (I)。请参阅 调整灯光的亮度。

当您在 Kanzi Studio 中打开项目时,Kanzi Studio 会自动转换光属性的本地值,但在某些情况下,您必须在将项目转换为 Kanzi 3.9.0 后手动调整灯光。例如,如果您的项目包含将光颜色属性绑定到自定义属性类型的绑定,请将该自定义属性类型的 Editor 设置为 HDR color editor,然后调整光颜色。

活动系统

如果您的应用程序使用 Activity 或 Activity Host 节点,将应用程序从 Kanzi 3.8.0 迁移到 3.9.0 的唯一方法是重新创建应用程序的 Activity 结构。

在重新创建活动结构之前,从 Node Tree 中移除所有现有的 Activity 和 Activity Host 节点。

要了解如何使用 Activity 系统:

  • 完成活动系统教程。请参阅 UI 结构。

  • 了解有关活动系统的详细信息。请参阅 活动。

API 更改

类型 (Type)

Kanzi 3.8.0

Kanzi 3.9.0

类

CodeBehindBase

CodeBehind

头文件

code_behind_base.hpp

code_behind.hpp

代码隐藏

当您在 Kanzi Studio 中打开使用 Code Behind 的应用程序项目,而尚未迁移 Code Behind 功能时,Kanzi Studio 预览无法启动。

要迁移使用 Code Behind 的应用程序:

  1. 在 Kanzi Studio 3.9.0 中,打开使用 Code Behind 的应用程序项目,在 Library > Kanzi Engine Plugins 中选择 Code Behind 插件 (<ProjectName>_CodeBehind),然后将其删除。

  2. 重新创建应用程序的活动结构。请参阅 活动系统。

  3. 重新添加代码隐藏:

    1. 在 Activity Browser 中,右键单击您要添加代码隐藏的 Activity 或 Activity Host,然后选择 Add Code Behind。

    2. 复制您在 Kanzi 3.8.0 中创建的代码隐藏功能:

      • 如果您的应用程序基于 Kanzi Studio project Kanzi Studio 模板,请复制该功能:

        • 从 <ProjectName>/CodeBehind/Application/include 到 <ProjectName>/CodeBehind/include

        • 从 <ProjectName>/CodeBehind/Application/source 到 <ProjectName>/CodeBehind/source

      • 如果您的应用程序基于 Application、Application with data source plugin 或 Application with Kanzi Engine plugin Kanzi Studio 模板,请复制该功能:

        • 从 <ProjectName>/Tool_project/CodeBehind/Application/include 到 <ProjectName>/Tool_project/CodeBehind/include

        • 从 <ProjectName>/Tool_project/CodeBehind/Application/source 到 <ProjectName>/Tool_project/CodeBehind/source。

      请记住这些在 Code Behind 文件命名约定中的更改。

      文件用途

      Kanzi 3.8.0

      Kanzi 3.9.0

      模块

      <ProjectName>codebehind_module

      <ProjectName>_code_behind_module

      活动

      <ActivityName>activitycode

      <ProjectName>_<ActivityName>_activity_code

      活动主机

      <ActivityHostName>activitycode

      <ProjectName>_<ActivityHostName>_activity_code

  4. 删除 <ProjectName>CodeBehind/Application 目录。

  5. 在 Kanzi Studio 中重启预览。

请参阅 使用代码隐藏的编程活动。

Android Gradle Plugin 和 Gradle

要将 Kanzi 应用程序迁移为使用 Android Gradle Plugin 4.2.2 和 Gradle 6.7.1:

  1. 在 Android Studio 中的 android_gradle/app/build.gradle 文件中替换:

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    

    通过

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    
  2. 在 android_gradle/build.gradle 文件中替换:

    dependencies {
        classpath 'com.android.tools.build:gradle:<android-studio-version>'
        classpath 'com.rightware.gradle:kanzi:<gradle-plugin-version>'
    }
    

    通过

    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.2'
        classpath 'com.rightware.gradle:kanzi:0.6.2'
    }
    
  3. 在 android_gradle/gradle/wrapper/gradle-wrapper.properties 文件中替换:

    distributionUrl=https\://services.gradle.org/distributions/gradle-<version>-bin.zip
    

    通过

    distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
    
  4. 在 android_gradle/gradle.properties 文件中替换:

    org.gradle.jvmargs=-Xmx<size>m
    

    通过

    org.gradle.jvmargs=-Xmx4608m
    
  5. 要更新应用程序中的 Gradle,可以:

    • 在 Android Studio 中选择 Gradle > Task > build setup > Wrapper。

    • 在命令行运行:

      ./gradlew wrapper
      

渲染通道 (Render Passes)

过滤器 (Filters)

重新设计的过滤器。

本表显示了 Kanzi 3.8.0 和 3.9.0 之间过滤器类的差异。

Kanzi 3.8.0

Kanzi 3.9.0

KzuObjectSource

ObjectSource

KzuSortObjectSource

SortObjectSource

KzuCombinerObjectSource

CombinerObjectSource

KzuFilterObjectSource

FilterObjectSource

KzuContainsPropertyFilter

ContainsPropertyFilter

KzuFrustumCullFilter

FrustumCullFilter

KzuLODFilter

已移除了

KzuObjectTypeFilter

ObjectTypeFilter

KzuPropertyIsEqualFilter

PropertyIsEqualFilter

KzuTagFilter

TagFilter

Instantiator 节点

重构了 Instantiator 节点。Instantiator 节点不再保留其实例化节点的局部变换。实例化现在从实例化的节点开始。请参阅 使用 Instantiator 节点。

要将您的项目迁移到 Kanzi 3.9,您可能需要将转换从实例化节点移动到 Instantiator 节点,或者添加一个您要实例化的父节点。

文本渲染

引入了用于实现文本渲染的节点的 TextConcept 基类(TextBlock2D、TextBlock3D、TextBox2D、TextBox3D)。

将这些通用属性移至 TextConcept,这些属性适用于所有实现文本渲染的节点:

Kanzi 3.8.0

Kanzi 3.9.0

TextBlockConcept::FontColorProperty

TextConcept::FontColorProperty

TextBlockConcept::FontMaterialProperty

TextConcept::FontMaterialProperty

TextBlockConcept::HorizontalPaddingProperty

TextConcept::HorizontalPaddingProperty

TextBlockConcept::RemoveSideBearingsProperty

TextConcept::RemoveSideBearingsProperty

TextBlockConcept::TextProperty

TextConcept::TextProperty

TextBlockConcept::TextHorizontalAlignmentProperty

TextConcept::TextHorizontalAlignmentProperty

TextBlockConcept::TextVerticalAlignmentProperty

TextConcept::TextVerticalAlignmentProperty

TextBlockConcept::VerticalPaddingProperty

TextConcept::VerticalPaddingProperty

TextBlockConcept::OverflowProperty

TextConcept::OverflowProperty

输入和焦点处理

  • 将按键重复功能从 KeyRepeatConcept 和 KeyRepeatConceptImpl<> 移动到 KeyRepeatGenerator。

  • 将 KeyInputConcept、KeyInputConceptImpl<> 和 KeyInputGestureDetector<> 的功能移至 InputManipulator。

  • 删除了 Enter 键处理消息 InputMethod::pressEnterKey、InputMethod::releaseEnterKey、InputMethod::cancelEnterKey、TextBoxConcept::EnterKeyPressedMessage、TextBoxConcept::EnterKeyReleasedMessage、TextBoxConcept::EnterKeyCanceledMessage、TextInputManipulator::EnterKeyPressedMessage、TextInputManipulator::EnterKeyReleasedMessage 和 TextInputManipulator::EnterKeyCanceledMessage。

  • 引入了输入法操作处理消息 TextBoxConcept::InputMethodActionMessage、TextBoxConcept::InputMethodAvailableMessage 和 TextBoxConcept::InputMethodUnavailableMessage。

  • 从消息参数中移除了 FocusManager::PreFocusMessageArguments::AcceptFocusProperty。要决定是否可以将焦点移动到一个节点,使用焦点范围类型和与焦点管理相关的属性。要限制节点树中的焦点链导航,请将 Focus Scope Type 属性附加到您的节点,并将其值设置为 Fence、Modal 或 Popup。

  • 弃用 Logical Focus 属性 (FocusManager::LogicalFocusProperty)。

    Kanzi Studio 自动转换使用 Logical Focus 属性的项目,通过将 Logical Focus 属性替换为 Focus Order 属性并设置为 0。此更改将一个具有 Focus Order 属性并设置为 0 的节点设置为焦点范围中的第一个可聚焦节点。请参阅 在焦点链中移动焦点。

  • 从 FocusManager 中移除了与定向导航相关的这些属性和选项:

    • NextFocusNodePathProperty、PreviousFocusNodePathProperty、UpNavigationNodePathProperty、DownNavigationNodePathProperty、LeftNavigationNodePathProperty 和 RightNavigationNodePathProperty 属性。

    • FocusChainDirection 选项 UpFocusable、DownFocusable、LeftFocusable 和 RightFocusable。

    使用 Navigation Manipulator 实现方向导航。请参阅 使用 Navigation Manipulator。

  • 重命名或删除了这些 FocusManager 方法:

    Kanzi 3.8.0

    Kanzi 3.9.0

    FocusManager::getActiveFocus()

    FocusManager::getFocus()

    FocusManager::trySetActiveFocus()

    FocusManager::trySetFocus()

    FocusManager::tryMoveActiveFocus()

    FocusManager::tryMoveFocus()

    FocusManager::tryMoveActiveFocusForward()

    FocusManager::tryMoveFocusForward()

    FocusManager::tryMoveActiveFocusBackward()

    FocusManager::tryMoveFocusBackward()

    FocusManager::tryMoveActiveFocusUpward()

    已移除了

    FocusManager::tryMoveActiveFocusDownward()

    已移除了

    FocusManager::tryMoveActiveFocusLeft()

    已移除了

    FocusManager::tryMoveActiveFocusRight()

    已移除了

滚动功能

  • Scroll View 2D 和 Grid List Box 2D 节点现在默认情况下滚动的距离与用户拖动指针的距离相同。要将您的项目迁移到 Kanzi 3.9.0,在 Scroll View 2D 和 Grid List Box 2D 节点中调整 Scroll Sensitivity 属性的值(ScrollViewConcept::SensitivityProperty,GridListBoxConcept::SensitivityProperty)。默认值为 1。例如,要设置节点滚动的距离为用户拖动指针距离的两倍,请将 Scroll Sensitivity 属性的值设置为 2。

    Kanzi 3.9.0 移除了由于将 Scroll Sensitivity 属性设置为负值而导致的非预期行为。Scroll Sensitivity 属性不再能有负值。例如,要更改用于旋转 3D 模型的 Scroll View 2D 节点中的滚动方向,请修改将旋转绑定到滚动位置的绑定。请参阅 教程:旋转 3D 模型。

  • 在 Scroll View、Grid List Box 和 Trajectory List Box 3D 节点中,Scroll Position 属性(ScrollViewConcept::ScrollPositionProperty、GridListBoxConcept::ScrollPositionProperty、TrajectoryListBox3D::ScrollPositionProperty)的值现在在指针向右和向下移动时减少。要将您的项目迁移到 Kanzi 3.9.0,请调整绑定和针对 Scroll View 或 List Box 节点的滚动位置的 Set Property 操作。在某些情况下,您必须将 Set Property 操作替换为绑定。例如,如果您在早期版本的 Kanzi 中使用 Scroll Position 属性的值来设置 Scroll View 节点中内容的平移,请取反 Scroll Position 属性的值。请参阅 创建一个 Scroll View 节点。

  • 弃用 Scroll Axis 属性 (ScrollViewConcept::ScrollAxisProperty)。

    Kanzi Studio 通过将 Scroll Axis 属性替换为 Allowed Scroll Axis 属性,自动转换使用 Scroll Axis 属性的项目。

  • 重构了滚动 Scroll View 和 Grid List Box 节点的消息。

    Kanzi 3.8.0

    Kanzi 3.9.0

    ScrollViewConcept::ScrollDirectionMessage

    ScrollViewConcept::ScrollDownMessage

    ScrollViewConcept::ScrollUpMessage

    ScrollViewConcept::ScrollLeftMessage

    ScrollViewConcept::ScrollRightMessage

    ScrollViewConcept::ScrollEdgeMessage

    ScrollViewConcept::ScrollHomeMessage

    ScrollViewConcept::ScrollEndMessage

    ScrollViewConcept::ScrollPageMessage

    ScrollViewConcept::ScrollPageDownMessage

    ScrollViewConcept::ScrollPageUpMessage

ListBoxItemContainer 预设 (prefabs)

ListBoxItemContainer2D 和 ListBoxItemContainer3D 现在继承自 ContentLayout2D 和 ContentLayout3D。

2D 节点缓存

移除以下属性:

  • Cache Children (Node2D::CacheChildrenProperty)

    Kanzi 不再支持仅缓存节点的子节点。要缓存节点的后代而不缓存节点本身,请将子节点移动到单独的节点中,并在该节点中将 Caching Mode 属性设置为 Enabled。

  • Cache Result (Node2D::CacheResultProperty)

    Kanzi Studio 自动转换使用 Cache Result 属性的项目,将其替换为 Caching Mode 属性。

  • Cache Self (Node2D::CacheSelfProperty)

    Kanzi 不再支持缓存一个节点但不缓存该节点的子节点。要缓存一个节点而不缓存其子节点,请将子节点移动到一个单独的节点中,并在您要缓存的节点中将 Caching Mode 属性设置为 Enabled。

2D 节点的缓存系统现在支持自动缓存刷新和失效。请参阅 缓存 2D 节点。

ForwardingAction 类

改进了 ForwardingAction 类,以减少在派生类中对样板代码的需求:

  • 所有绑定运行时的查找上下文现在自动附加到关联的触发器。派生类不再需要这样做。

  • 所有消息绑定运行时的查找上下文现在会自动附加到关联触发器的转发消息中。派生类不再需要这样做。

在发行说明中,请参阅 其他改进。

Profiler 类别创建

要创建分析类别,您现在必须调用一个附加的宏来初始化分析类别。您必须将此第二个宏放入 cpp 文件中。新宏可防止在将其包含到同一应用程序中动态加载的多个库时重新注册该类别。

要创建分析类别,请同时使用 kzProfilingRegisterExportedCategory 和 kzProfilingInitializeCategory。kzProfilingRegisterExportedCategory 可以在 hpp 文件或 cpp 文件中。kzProfilingInitializeCategory 必须在 cpp 文件中使用。

有关如何创建分析类别的示例,请参阅 Kanzi Engine C++ API 参考 中 kzProfilingRegisterExportedCategory 的代码示例。

// Example export/import macro for Windows.
#ifdef USE_SHARED_LIBRARY
#ifdef COMPILE_LIBRARY_CODE
// Compiling shared library: export category to shared library.
#define EXPORT_IMPORT_API __declspec(dllexport)
#else
// Compiling user code: import category from shared library.
#define EXPORT_IMPORT_API __declspec(dllimport)
#endif
#else
// Use empty macro for static linking.
#define EXPORT_IMPORT_API
#endif

#define MY_PROFILING_CATEGORY_EXPORTED kzProfilingCreateCategory(KZ_PROFILING_ENABLED_CATEGORY, "myCategoryExported", KZ_PROFILING_DEFAULT_SAMPLE_BUFFER_SIZE)
kzProfilingRegisterExportedCategory(EXPORT_IMPORT_API, MY_PROFILING_CATEGORY_EXPORTED, KZ_PROFILING_DISABLED_CATEGORY)

// kzProfilingInitializeCategory must be placed in a cpp file.
kzProfilingInitializeCategory(EXPORT_IMPORT_API, MY_PROFILING_CATEGORY_EXPORTED, KZ_PROFILING_DISABLED_CATEGORY)

应用程序配置

图形上下文和表面客户端 API

重命名了您在 application.cfg 中使用的这些配置设置和选项:

Kanzi 3.8.0

Kanzi 3.9.0

GraphicsBackend

SurfaceClientAPI, GraphicsContextAPI

opengl

gl

重命名了您在 Application::onConfigure() 函数中使用的这些配置设置和选项:

Kanzi 3.8.0

Kanzi 3.9.0

configuration.defaultSurfaceProperties.type

configuration.defaultSurfaceProperties.clientAPI

KZS_SURFACE_TYPE_GL_ONLY

SurfaceClientAPI::OpenGL

KZS_SURFACE_TYPE_GLES_ONLY

SurfaceClientAPI::OpenGLES

KZS_GRAPHICS_CONTEXT_API_WGL

GraphicsContextAPI::WGL

KZS_GRAPHICS_CONTEXT_API_EGL

GraphicsContextAPI::EGL

KZS_GRAPHICS_CONTEXT_API_GLX

GraphicsContextAPI::GLX

请参阅 图形库。

缓冲区交换行为

重命名了您在 Application::onConfigure() 函数中用于缓冲区交换的配置选项:

Kanzi 3.8.0

Kanzi 3.9.0

KZS_SWAP_BEHAVIOR_DONT_CARE

SwapBehavior::Unspecified

KZS_SWAP_BEHAVIOR_COPY

SwapBehavior::Copy

KZS_SWAP_BEHAVIOR_EXCHANGE

SwapBehavior::Exchange

请参阅 表面属性。

其他更改

  • 已移除不推荐使用的 Play Animation 操作。请改用 Animation Player。请参阅 使用关键帧动画 和 使用 Kanzi Engine API 创建动画和时间轴。。

  • 在 kanzi/core 中的更改:

    • 将 ScopedRefCounter 移动到 kanzi/core/util/scoped_ref_counter.hpp。

    • 将 from_chars 移动到 kanzi/core/cpp/charconv.hpp。

    • 将 KZ_NOT_MOVABLE_NOT_COPYABLE 和 KZ_MOVABLE_BUT_NOT_COPYABLE 移动到 kanzi/core/util/macros.hpp。

    • 将 kzArrayLength 替换为在 kanzi/core/cpp/iterator.hpp 中定义的 size(array)。

    • 将 std::move 导入到 kanzi 命名空间。

    • 已移除 boost/move/utility.hpp 包含。

    • 已移除的宏:

      • KZ_COPY_ASSIGN_REF

      • KZ_RV_REF

      • KZ_MOVE_RET

      • KZ_MOVE_BASE

      • KZ_USE_MOVE_EMULATION

  • 将 KzuBoundingVolume 和 KzuTransformedBoundingVolume 类替换为 Box 和 OrientedBoundingBox 类。如果您的类继承自 Node 并重写了 Node::getBoundingVolume 虚函数,则现在必须实现 Node3D::getBoundingBox 函数。在 Renderer3D 中重命名了用于渲染边界框的相关辅助函数。

  • 将 ActionArgumentType 移动到 KzbMemoryParser::ArgumentType。

  • 已移除 KzcHashMap 和 KzcHashSet。请改用 unordered_map 和 unordered_set。

  • 已移除 KzcDynamicArray。请改用 vector。

  • 已移除 KzcMemoryManager。请改用 vector、new/delete、new[]/delete[]。

  • 已移除 kzsTimeGetCurrentTimestamp 和 kzsTimeGetCurrentTimeMicroseconds。请使用 kanzi::Clock 或 std::steady_clock。

  • 删除了过时的内部位图图像加载函数:

    • imageLoadPVRTC

    • imageLoadETC

    • imageLoadATC

    • imageLoadASTC

    • imageLoadRaw2D

  • 将 task_dispatcher.hpp 从 kanzi/core.ui/scheduler 移动到 kanzi/core.ui/task_dispatcher。

  • 将 rayPickCalculateRay 替换为 Camera::calculateCameraRay。

另请参阅

Kanzi 3.9.0 发行说明

已知问题