Kanzi 3.9.6 迁移指南¶
使用此迁移指南将 Kanzi 应用程序从 Kanzi 3.9.5 更新到 Kanzi 3.9.6。
对 kanzi::variant 的更改¶
将 kanzi::variant 的 C++ typedef 从 boost::variant 更改为 boost::variant2。
boost::variant2 使用与 C++17 std::variant 相同的 API,但这与之前使用的 boost::variant API 不同。
例如,要迁移您的 Kanzi 应用程序:
将
v.which()替换为v.index()。将
v.type() == typeid(T)替换为holds_alternative<T>(v)。从所有访问者类中移除
boost::static_visitor的派生。将
v.apply_visitor(visitor)和apply_visitor(visitor, v)替换为visit(visitor, v)。
对头文件的更改¶
Kanzi Engine 现在使用更多的前向声明,并且不再在头文件 domain.hpp 和 metaclass.hpp 中包含不必要的 include。要迁移您的 Kanzi 应用程序,请包含缺失的头文件。
例如,以前可以使用 kanzi::TaskDispatcher 和 kanzi::ResourceDictionary 与
#include <kanzi/core.ui/domain/domain.hpp>
但现在您需要使用
#include <kanzi/core.ui/domain/domain.hpp>
#include <kanzi/core.ui/task_dispatcher/task_dispatcher.hpp>
#include <kanzi/core.ui/resource/resource_dictionary.hpp>
对 CMake 配置文件的更改¶
Cotire CMake 模块在 Kanzi 工作区中不再可用。如果您想继续使用该模块,可以从 https://github.com/sakra/cotire 或之前的 Kanzi 版本中获取。然而,我们建议您迁移您的 CMake 配置文件,以使用 CMake 3.16 版本开始提供的内置功能 target_precompile_headers。
Kanzi Java API 自定义 Resource Manager 协议的更改。¶
使用 Kanzi Java API 自定义 Resource Manager 协议时,资源现在位于 ObjectRef 实例之后,而不是使用非拥有的 Resource 引用。这确保了在资源仍在加载时,创建对象的生命周期不会被 JVM 垃圾收集器回收。
当实现同步加载时,ResourceManager.ProtocolHandler.Result 构造函数已更改为接受 ObjectRef<? extends Resource> 而不是简单的 Resource。更改使用此构造函数的代码以提供一个拥有的 ObjectRef 实例。
Kanzi 3.9.5 |
Kanzi 3.9.6 |
|---|---|
|
|
实现异步加载时,ResourceManager.LoadTask.getResult() 方法现在返回 ObjectRef<? extendes Resource>,而不是简单的 Resource。通常,LoadTask 实例在创建资源时就已能访问 ObjectRef。要使用该资源,请使用 clone() 方法返回该内部 ObjectRef 实例的克隆。
Kanzi 3.9.5 |
Kanzi 3.9.6 |
|---|---|
|
|
添加了 ResourceManager.LoadTask.close() 方法,您可以在扩展类中重写该方法。如果需要,这允许显式清理内部 LoadTask 资源的内存。
画笔渲染的更改¶
为了提高使用基于图块渲染的 GPU 的性能,Kanzi 不再尝试在 2D 渲染期间避免清除帧缓冲区。
改进在 BrushRenderer 接口中引入了以下更改:
Kanzi 3.9.5 |
Kanzi 3.9.6 |
|---|---|
|
|
|
|
更改影响:
从
BrushRenderer派生的自定义类手动使用画笔渲染内容的应用程序代码
对着色器创建的更改¶
Kanzi 3.9.6 增加了对几何着色器和细分着色器的支持。改进在 ShaderProgram::CreateInfo 中引入了这些更改:
将顶点和片段着色器特定字段替换为更通用的变体。
将二进制数据类型从字符串更改为字节向量。
便利类 ShaderProgram::CreateInfoShaderSource 和 ShaderProgram::CreateInfoShaderBinary 保持不变。
Kanzi 3.9.5 |
Kanzi 3.9.6 |
|---|---|
|
|
|
|
|
|
|
|
对焦点和输入管理的更改¶
在 Kanzi 3.9.6 中,Node 知道其附加到的 Screen 节点,并且可以从该 Screen 获取 FocusManager 和 InputManager 实例。
引入了这些函数:
Node::getFocusManager()和Node::getInputManager()获取与节点所属的Screen节点关联的FocusManager和InputManager实例。Node::getScreen()和Node::setScreen()获取和设置节点所属的Screen节点。Screen::setFocusManager()和Screen::setInputManager()将FocusManager和InputManager关联到Screen节点。
删除了以下函数:
Domain::getFocusManager()。请改用Node::getFocusManager()。Domain::getInputManager()。使用Node::getInputManager()代替。
从 Kanzi Android framework (droidfw) 访问 Kanzi Java API 的更改。¶
If the root node of the prefab displayed in a Kanzi view is a Screen node, the getRoot() method now returns the child of that Screen node. In previous versions of Kanzi, the method returned the Screen node. See 访问 Kanzi Java 和 Kotlin API.
对 KzuEngine 的更改¶
弃用 kzuEngine 结构,并将其功能移至 Application、Node、ResourceManager 和 Screen 类:
Kanzi 3.9.5 |
Kanzi 3.9.6 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
此更改使 kzuEngineCreate()、kzuEngineDelete() 和 Application::getEngine() 函数过时。
其他更改¶
在
GatherLightsRenderPass::checkLightsModified()函数中,引入了lightRange参数,该参数指定要检查的光范围。您可以在继承GatherLightsRenderPass的自定义渲染通道中使用此函数。在
PropertyAccessRange中,adapt()函数现在将范围引用作为输入,而不是shared_ptr。