Kanzi 3.9.7 迁移指南¶
使用此迁移指南将 Kanzi 应用程序从 Kanzi 3.9.6 更新到 Kanzi 3.9.7。
NodeCompositor2D 和 NodeEffect2D 类中的更改¶
引入了 CompositionContentRequirements 结构体,其中包含设置合成和效果渲染目标要求的参数:
struct CompositionContentRequirements
{
/// Required size of the source content to be used by the effect.
Vector2 size;
/// Whether the content requires alpha channel.
bool alpha;
/// Whether the content requires depth buffer.
bool depth;
/// Whether the content requires stencil buffer.
bool stencil;
/// MSAA sample count for content buffer.
unsigned int numSamples;
};
NodeCompositor2D 类中的更改:
Kanzi 3.9.6 |
Kanzi 3.9.7 |
|---|---|
|
|
|
|
|
|
|
|
NodeEffectRenderer2D 类中的更改:
Kanzi 3.9.6 |
Kanzi 3.9.7 |
|---|---|
|
|
|
|
|
|
更改为 Kanzi Java API¶
CallbackBindingProcessor¶
Kanzi Java API BindingProcessor 现在继承自 KanziObject 而不是 NativeObject。这意味着 Kanzi Java API CallbackBindingProcessor.create 现在返回 ObjectRef<CallbackBindingProcessor> 而不是 CallbackBindingProcessor。
对枚举属性的支持¶
Kanzi Java API 现在支持具有枚举数据类型的属性:
在 setter 和 getter 函数中,您现在可以使用枚举值而不是整数。
例如,您可以替换
textNode.setProperty(TextBlock2D.FontHintingPreferenceProperty, 1); // FontHintingPreference::NativeHinting
通过
textNode.setProperty(TextBlock2D.FontHintingPreferenceProperty, FontHintingPreference.NativeHinting);
在
KanziObject.getProperty中,您不再需要将枚举属性的类作为第二个参数提供。例如,您可以替换
Node.HorizontalAlignment value = node.getProperty(Node.HorizontalAlignmentProperty, Node.HorizontalAlignment.class);
通过
Node.HorizontalAlignment value = node.getProperty(Node.HorizontalAlignmentProperty);
由于 Java 和 Kotlin 在接口继承方面的差异,内置枚举的访问方式有所不同。
例如:使用
metadata.NodeMetadata.HorizontalAlignmentProperty属性:这在 Java 和 Kotlin 中都适用:
NodeEnums.HorizontalAlignment.Center;
这仅在 Java 中有效:
Node.HorizontalAlignment.Center;
删除了这些未使用的枚举:
Node3D.RenderModeNode2D.RenderType
更改绑定的设置和移除¶
这些函数的返回类型从 AbstractBindingRuntimeSharedPtr 更改为 BindingRuntimeHandle:
BindingRuntimeHandle -> 运算符返回一个到 AbstractBindingRuntime 的链接。这样,绑定运行时函数的工作方式是相同的。
更改图形输出和桌面¶
在 Kanzi 3.9.7 中,您可以在使用 GBM 窗口系统的平台上设置您希望 Kanzi 应用程序使用的图形卡。引入的改进:
在
makeLegacyGraphicsOutput函数和LegacyGraphicsOutput::LegacyGraphicsOutput构造函数中,desktopProperties参数。在
kzs_desktop.h::kzsDesktopCreate和kzs_desktop.h::kzsDesktopNativeCreate函数中,desktopPropertiesRequested参数。
Kanzi 3.9.6 |
Kanzi 3.9.7 |
|---|---|
|
|
|
|
|
|
|
|
对 Java Code Behind 的更改¶
如果您的 Kanzi 应用程序基于某个 Android 模板,并且您想向该应用程序的 Kanzi Studio 项目添加 Java Code Behind,请迁移您的应用程序。
要迁移您的 Kanzi 应用程序:
在 Android Studio 中,打开您的 Kanzi 应用程序的 Android 应用程序。在主菜单中选择 File > Project Structure。在 Project Structure 窗口中,选择 Project 选项卡,并设置:
Android Gradle Plugin Version 到 7.2.2。
Gradle Version 到 7.3.3。
单击 OK。
在
app/src/main/AndroidManifest.xml中,从manifest元素中删除package属性。例如,更改
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication">
至 (To)
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
在
app/build.gradle中,将namespace属性添加到android范围。新工具要求将
compileSdk和targetSdk属性设置为 Android API 级别 31 或更高。android { namespace 'com.example.myapplication' compileSdk 31 defaultConfig { applicationId "com.example.myapplication" minSdk 26 targetSdk 31
如果您的应用程序已经有一个插件作为源项目或 Java Code Behind,请对其 AndroidManifest.xml 和 build.gradle 文件重复该过程。
对画笔渲染器的更改¶
Kanzi 3.9.7 简化了画笔渲染器,使其更加统一。改进引入了以下更改:
移除了
GlBrushRenderer基类,并将大部分功能从不同的画笔类移到了BrushRenderer基类。已移除
RenderValuePropertyNotificationHandler类。因为现在所有画笔都使用
GlRenderState来存储渲染值,所以不需要RenderValuePropertyNotificationHandler成员。Kanzi 现在在渲染状态中自动将属性映射到 uniforms。
如果您使用了早期版本的 Kanzi 来实现您自己的派生画笔类及其关联的画笔渲染器类,请使用以下说明将您的应用程序迁移到 Kanzi 3.9.7:
与其继承
GlBrushRenderer,不如继承BrushRenderer。这些函数的功能现在由基类提供:
getRenderOpacityValue()getContentTextureValue()getBlendModeValueOverride()setBlendModeOverride()setBlendModeFallback()
如果您实现了这些函数中的任何一个,在大多数情况下,您可以直接删除这些实现。
如果您实现了
bindOverride()函数,请将其修改为使用形式void bindOverride(Renderer3D&, PropertyObject*)。请参阅BrushRenderer::bindOverride。属性对象是一个附加对象,用于获取属性的备用值。对于
MaterialBrush,这是材质,它允许您对材质中的属性更改做出反应。对于所有使用不可变材质的其他画笔,将此参数设置为nullptr。BrushRenderer::isChangeCounterSame和BrushRenderer::updateChangeCounter函数现在是虚函数。如果笔刷使用可变材质,为了响应材质属性的更改,笔刷必须在这些函数中跟踪材质更改计数器。如果笔刷使用不可变材质,请勿实现这些函数。
PropertyObject API 的更改¶
为了提高 Kanzi Engine 代码质量,更改了 PropertyObject API。弃用了 PropertyObject::validatePropertyModifiers。请改用 PropertyObject::validatePropertyModifiersAndNotifyHandlers。
绑定 API 的更改¶
从 binding_processor_runtime.hpp 中移除了 m_lookupContext 类成员。
如果您的 Kanzi 应用程序实现了自定义绑定处理器运行时,请将 m_lookupContext 替换为 getBindingRuntime().getLookupContext()。