Kanzi 4.0.0 迁移指南¶
使用此迁移指南将 Kanzi 应用程序从 Kanzi 3.9 更新到 Kanzi 4.0。
备注
根据您的工程对本文所述更改的依赖程度,在 Kanzi 4.0.0 上重新组建一个新工程可能比迁移更省力。
升级到 Visual Studio 2022¶
Kanzi 不再支持适用于 Visual Studio 2017 和 2019 的 Kanzi Engine 库。
对于带有 Kanzi Engine 插件的 Kanzi Studio 工程,请使用 Visual Studio 2022 重新构建插件,并将插件 DLL 导入 Kanzi Studio 工程。
构建系统的更改¶
所有平台都已迁移为使用 CMake 而不是 SCons。
引入 Kanzi Graphics¶
Kanzi Graphics 的引入改变了 Kanzi 应用程序与 Kanzi 渲染子系统交互的方式。
Renderer 类中的大多数函数已被移除。请改为使用 Kanzi Graphics API 和所配置的后端(Open GL、Open GL ES 或 Vulkan)。
Kanzi Graphics 由以下主要部分组成:
使用
gfx::create函数和GraphicsCreateInfo结构体创建对象。Kanzi 将
GraphicsCommands记录到命令缓冲区中,Kanzi Graphics 后端针对特定的图形 API 处理这些命令。对于带有 Kanzi Engine 插件的 Kanzi Studio 工程,需要将插件 DLL 重新导入到 Kanzi Studio 工程中。
使用 Kanzi 4.0.0 重新构建插件。
在 Library > Kanzi Engine Plugins 中,删除 Kanzi Engine 插件并导入更新后的 Kanzi Engine 插件。
删除了以下类、成员或函数:
kanzi::acquireUniformLocationkanzi::getUniformElementCountkanzi::GLBufferHandlekanzi::GLFramebufferHandlekanzi::GlGraphicsLogScopekanzi::GlGraphicsAdapterkanzi::GlGraphicsAdapterCallGleskanzi::GlGraphicsAdapterCallOpenGlkanzi::GlGraphicsAdapterCheckForErrorskanzi::GlGraphicsAdapterLoggerkanzi::GLGraphicsOutputkanzi::GLProgramHandlekanzi::GLRenderbufferHandlekanzi::GlRenderState::acquireUniformLocationkanzi::GlRenderState::allocateValueskanzi::GlRenderState::RenderValueUnionkanzi::GlRenderState::RenderValueInfokanzi::GlRenderState::TextureRenderValuekanzi::GlRenderValueBasekanzi::GLShaderHandlekanzi::GLTextureHandlekanzi::GlTextureRenderValuekanzi::Mesh::bindkanzi::Mesh::bindAttributekanzi::Mesh::bindAttributeskanzi::Mesh::bindIndicieskanzi::Renderer::getActiveGraphicsContextkanzi::Renderer::getActiveSurfaceVendorkanzi::Renderer::getUniformLocationSlowkanzi::Renderer::getUniformArrayLengthkanzi::Renderer::setUniformIntArraykanzi::Renderer::setUniformFloatArraykanzi::Renderer::setUniformVecArraykanzi::Renderer::setUniformColorArraykanzi::Renderer::setUniformMatArraykanzi::Renderer::setUniformIntegerkanzi::Renderer::setUniformFloatkanzi::Renderer::setUniformVec2kanzi::Renderer::setUniformVec3kanzi::Renderer::setUniformVec4kanzi::Renderer::setUniformColorRGBAkanzi::Renderer::setUniformMatrix3x3kanzi::Renderer::setUniformMatrix4x4kanzi::Renderer::setActiveScalarkanzi::Renderer::getActiveScalarkanzi::Renderer::calculateProjectionCameraWorldMatrixkanzi::Renderer::applyFixedUniformTimekanzi::Renderer::applyFixedUniformWindowSizekanzi::Renderer::applyTransformationUniformkanzi::Renderer::applyTransformationkanzi::Renderer::applyTextureSizeUniformskanzi::Renderer::applyTexturekanzi::Renderer::detachTexturekanzi::Renderer::setUniformTexturekanzi::Renderer::generateTexturekanzi::Renderer::deleteTexturekanzi::Renderer::setTextureAddressingModekanzi::Renderer::setTextureSwizzleMaskkanzi::Renderer::setTextureSwizzleEachChannelkanzi::Renderer::deleteShaderProgramkanzi::Renderer::deleteShaderkanzi::Renderer::generateFramebufferkanzi::Renderer::deleteFramebufferkanzi::Renderer::invalidateFramebufferAttachmentskanzi::Renderer::framebufferRenderbufferkanzi::Renderer::generateRenderbufferkanzi::Renderer::deleteRenderbufferkanzi::Renderer::bindRenderbufferkanzi::Renderer::renderbufferStoragekanzi::Renderer::generateBufferkanzi::Renderer::setVertexBufferDatakanzi::Renderer::setIndexBufferDatakanzi::Renderer::setVertexBufferSubDatakanzi::Renderer::setIndexBufferSubDatakanzi::Renderer::deleteBufferkanzi::Renderer::BufferAccessModekanzi::Renderer::mapVertexBufferkanzi::Renderer::unmapVertexBufferkanzi::Renderer::mapIndexBufferkanzi::Renderer::unmapIndexBufferkanzi::Renderer::enableVertexAttributeArraykanzi::Renderer::disableVertexAttributeArraykanzi::Renderer::getActiveShaderHandlekanzi::Renderer::getActiveShaderAttributeMapkanzi::Renderer::beginMaterialSetupkanzi::Renderer::endMaterialSetupkanzi::Renderer::pushStatisticskanzi::Renderer::popStatisticskanzi::Renderer::getIndexCountkanzi::Renderer::getTriangleCountkanzi::Renderer::getVertexCountkanzi::Renderer::getInstanceCountkanzi::Renderer::getBatchCountkanzi::Renderer::getShaderSwitchCountkanzi::Renderer::getUniformSendCountkanzi::Renderer::getTextureSwitchCountkanzi::Renderer::getFramebufferSwitchCountkanzi::Renderer::getBufferSwitchCountkanzi::Renderer::getHeavyweightCallCountkanzi::Renderer::getHalfFloatVertexAttributeSupportkanzi::Renderer::getTexStorageSupportkanzi::Renderer::getGLFormatTripletkanzi::Renderer::clearUniformCacheskanzi::Renderer::TextureUnitInfokanzi::Renderer::RenderingChangeStateFlagkanzi::Renderer::refreshRenderContextkanzi::Renderer::enableStatekanzi::Renderer::disableStatekanzi::Renderer::setStatekanzi::Renderer::getStatekanzi::Renderer::setBlendModekanzi::Renderer::getBlendModekanzi::Renderer::setCullModekanzi::Renderer::getCullModekanzi::Renderer::setDepthTestkanzi::Renderer::getDepthTestkanzi::Renderer::setLineWidthkanzi::Renderer::getLineWidthkanzi::Renderer::clearkanzi::Renderer::resetClearTargetkanzi::Renderer::addClearTargetkanzi::Renderer::getClearModekanzi::Renderer::addClearColorkanzi::Renderer::removeClearTargetkanzi::Renderer::isClearEnabledkanzi::Renderer::setClearColorkanzi::Renderer::setClearDepthValuekanzi::Renderer::setClearStencilkanzi::Renderer::setColorWriteModekanzi::Renderer::getColorWriteModekanzi::Renderer::setViewportkanzi::Renderer::getViewportkanzi::Renderer::setScissorTestkanzi::Renderer::getScissorkanzi::Renderer::setVertexBufferkanzi::Renderer::setIndexBufferkanzi::Renderer::drawBufferskanzi::Renderer::setVertexCountkanzi::Renderer::setIndexCountkanzi::Renderer::setIndexDatakanzi::Renderer::setInstanceCountkanzi::Renderer::setActiveTextureUnitkanzi::Renderer::bindTexturekanzi::Renderer::setTextureImage2Dkanzi::Renderer::setTextureSubImage2Dkanzi::Renderer::textureStoragekanzi::Renderer::generateMipMapskanzi::Renderer::setTextureFilterkanzi::Renderer::setTextureComparekanzi::Renderer::setTextureMaximumLevelkanzi::Renderer::createShaderkanzi::Renderer::createShaderProgramkanzi::Renderer::attachShaderToProgramkanzi::Renderer::detachShaderFromProgramkanzi::Renderer::bindAttributeToLocationkanzi::Renderer::linkShaderProgramkanzi::Renderer::compileSourceShaderkanzi::Renderer::deployBinaryShaderkanzi::Renderer::deployBinaryProgramkanzi::Renderer::loadProgramFromCachekanzi::Renderer::saveProgramToCachekanzi::Renderer::getCacheFilePathkanzi::Renderer::updateSettingskanzi::Renderer::getProgramBinarykanzi::Renderer::isFramebufferCompletekanzi::Renderer::framebufferTexture2Dkanzi::Renderer::applyVertexAttributeArrayskanzi::Renderer::setVertexBufferPointerkanzi::Renderer::setVertexBufferPointerkanzi::Renderer::setActiveShaderHandlekanzi::Renderer::setActiveFramebufferkanzi::Renderer::setColorBufferCountkanzi::Renderer::getActiveFramebufferkanzi::Renderer::beginVertexArraykanzi::Renderer::setVertexArrayDatakanzi::Renderer::endVertexArraykanzi::Renderer::getCurrentVertexArrayFlagskanzi::Renderer::getCurrentVertexArrayAttributeDatakanzi::Renderer::isShaderBinaryFormatSupportedkanzi::Renderer::isProgramBinaryFormatSupportedkanzi::Renderer::applyAttributePointerkanzi::Renderer::supportsTexStoragekanzi::Renderer::setHasTessellationShaderkanzi::Renderer::setFillModekanzi::Renderer::readPixelskanzi::Renderer::setPixelStorePackkanzi::Renderer::setPixelStoreUnpackkanzi::Shader::UniformProperty::uniformLocationkanzi::Shader::hasSamplersWithoutPropertieskanzi::Shader::getTextureUniformLocationkanzi::Texture::deployImageskzsGlGraphicsContextCreatekzsGlGraphicsContextDestroykzsGlGraphicsContextSetActivekzsGlGraphicsContextGetAdapterkzsGlGraphicsContextIsKhrDebugSupportedkzsGlGraphicsContextGetVendorkzsGlGraphicsContextGetSurfaceClientAPIkzsGlGraphicsContextGetAPIkzsGlIsExtensionSupportedkzsGlGraphicsContextSetLoggingkzsGlGraphicsContextGetLoggingkzsGlGraphicsContextGetDumpStateOnDrawCallskzsGlGraphicsContextSetErrorCheckingkzsGlGraphicsContextSetDebugCallbackkzsGlGraphicsContextGetGlesSymbolskzsGlGraphicsContextGetOpenGlSymbols
kanzi::GlRenderState类已重命名为RenderState,以移除特定于平台的 “Gl” 前缀,因为渲染状态抽象并非 OpenGL 所特有。头文件也已从
kanzi/core.ui/graphics3d/render_state.hpp移至kanzi/core.ui/graphics/render_state.hpp。删除了以下具有直接替代项的函数:
已移除了
改用
kanzi::captureCurrentFramebufferToImagekanzi::captureScreenToImagekanzi::GPUBuffer::getNativeHandlekanzi::Mesh::getNativeVertexBufferHandlekanzi::Mesh::getNativeIndexBufferHandlekanzi::Mesh::getNativeInstanceBufferHandlekanzi::Renderbuffer::getNativeHandlekanzi::Renderer::applyFixedUniformskanzi::Renderer::getMaximumVertexAttributeCountgfx::getDeviceProperty(gfx::DevicePropertyId::MaxVertexAttributes)kanzi::Renderer::setActiveGLGraphicsOutput删除了
kanzi::Geometry::drawTextured和kanzi::Geometry::drawUntextured函数。如果您使用这些函数,您可以按如下方式更改代码if (isTextured()) { geometry.drawTextured(renderer, transform, GraphicsPrimitiveTypeTriangleStrip, material); } else { geometry.drawUntextured(renderer, transform, GraphicsPrimitiveTypeTriangleStrip, material); }
至 (To)
renderer.setMatrix(FixedMatrixWorld, transform); renderState.updateTransformationUniforms(renderer); renderState.draw(renderer, geometry);
Renderer API 的更改¶
删除了
Renderer3D类。Kanzi 使用Renderer3D类在 3D rendering 期间存储临时属性,并为 Preview 提供调试功能。此版本的 Kanzi 进行了以下移动:
将调试 rendering 移至
DebugRenderRegistry和DebugVisualization类3D rendering 的具体细节现在由渲染通道处理,例如
GatherLightsRenderPass
在您的应用程序代码中,将所有对
Renderer3D的使用更改为使用Renderer。这包括所有以Renderer3D作为参数传递的虚函数。将这些函数从
Renderer3D类移动到Renderer类:由于与移除
Renderer3D类相关的重构,移除了这些函数。大多数被移除的函数与调试 (Debug) 渲染相关:Renderer::bindFramebufferRenderer::setActiveFramebufferCallbackRenderer::setDefaultFramebufferRenderer3D::addVertexAndNormalToFloatArraysRenderer3D::addVertexToFloatArrayRenderer3D::applyBoolPropertyRenderer3D::applyColorMaterialRenderer3D::applyColorPropertyRenderer3D::applyFloatPropertyRenderer3D::applyIntPropertyRenderer3D::applyMaterialRenderer3D::applyMaterialStrictRenderer3D::applyMatrix3x3PropertyRenderer3D::applyMatrix4x4PropertyRenderer3D::applyPropertyTypeRenderer3D::applySRT2DPropertyRenderer3D::applySRT3DPropertyRenderer3D::applyStencilSettingsRenderer3D::applyTexturePropertyRenderer3D::applyVector2PropertyRenderer3D::applyVector3PropertyRenderer3D::applyVector4PropertyRenderer3D::calculateNormalRenderer3D::drawBoxSolidNormalRenderer3D::drawLayerOutlineQuadRenderer3D::drawLayerQuadRenderer3D::drawLayerQuadWithMaterialRenderer3D::drawLineListRenderer3D::drawPrimitivesRenderer3D::drawOrientedBoundingBoxSolidNormalRenderer3D::drawPrimitiveBufferTexturedRenderer3D::drawPrimitiveBufferUntexturedRenderer3D::drawPrimitivesNormalRenderer3D::drawSelectionIndicatorRenderer3D::drawQuadRenderer3D::drawTrajectoryRenderer3D::drawUntexturedLayerQuadRenderer3D::drawViewportQuadWithTextureSpanRenderer3D::getActiveGLGraphicsOutputRenderer3D::getClearColorOverrideRenderer3D::getFloatBufferRenderer3D::getResourceManagerRenderer3D::isBoundingBoxVisualizationEnabledRenderer3D::isColorWriteDisabledRenderer3D::isSkeletonVisualizationEnabledRenderer3D::printInfoRenderer3D::removeClearColorOverrideRenderer3D::setActiveGLGraphicsOutputRenderer3D::setBoundingBoxVisualizationEnabledRenderer3D::setClearColorOverrideRenderer3D::setDefaultOrthoProjectionRenderer3D::setDisableColorWriteRenderer3D::setFramebufferCallbackRenderer3D::setLoggingRenderer3D::setSkeletonVisualizationEnabledSurface::attachSurface::attachOverride
请改用
DebugVisualization和DebugVisualizationStorage类来绘制和存储节点的调试可视化。DebugComposer自动使用的标准DebugRenderRegistry::DebugObjectRenderingFunction已更改为:void (*DebugObjectRenderingFunction)(Renderer& renderer, DebugRenderStorage& storage, DebugVisualization* visualization, NodeSharedPtr object);
您可以访问
storage为Node创建调试可视化结构。如果您已在上一帧中执行过此操作,则visualization参数不为空,您可以使用它。存储在DebugVisualization中的几何体会一直保留,直到您从场景图中移除该Node。移除了
Surface::Usage枚举。RenderTargetMode已弃用,并已从Texture中移除。因此:已从
Texture::CreateInfo::Status和interop::TextureEnums::CreateInfo::Status中移除StatusInvalidRenderTargetMode。在
Texture::CreateInfo::Status和interop::TextureEnums::CreateInfo::Status中,已将StatusUnsupportedInternalRenderTargetSampleCount重命名为StatusUnsupportedRenderTargetSampleCount。
由于移除了
RenderTargetMode枚举,修改了Texture::CreateInfo和Texture,移除了GraphicsFormatFeature和RenderTargetMode设置。纹理创建信息现在使用gfx::ImageUsageFlag遮罩来指定纹理的用途。为
Texture::CreateInfo添加了usageFlags字段。创建合成目标时,请启用
gfx::ImageUsageFlag::Attachment标志。kanzi::Texture::CreateInfoNode2DRenderTarget会自动启用该标志。gfx::ImageUsageFlag::SampledShaderResource默认处于启用状态。如果不对纹理进行采样,请移除该标志,改为设置gfx::ImageUsageFlag::ShaderResource。其他相关标志会根据纹理设置自动启用: - 对于 MSAA 纹理,启用
gfx::ImageUsageFlag::CopyDestination。 - 您可以根据预期用途手动启用其他标志,例如复制源和复制目标。
移除了
GlRenderValue和GlBlendModeRenderValue类以及updateRenderValue函数,请改用kanzi::GlRenderState。从
GraphicsPrimitiveType枚举中移除了GraphicsPrimitiveTypeLineLoop选项。请改用GraphicsPrimitiveType::GraphicsPrimitiveTypeLineStrip,并在顶点列表末尾重复第一个顶点。将
GlRenderValueBinding类重命名为RenderValueBinding。移除了
GPUBufferType枚举。请改用gfx::BufferUsageFlag。创建新的 GPU 缓冲区时,请使用gfx::BufferUsageFlag::VertexBuffer或gfx::BufferUsageFlag::IndexBuffer。在
Texture::create(用于从现有图像对象创建纹理的重载方法)中,nativeHandle参数的类型更改为gfx::NativeTextureHandle。移除了因采用新图形后端而不再使用的函数:
Renderer::getColorReadFormatRenderer::getColorReadType
从
Renderer中移除了部分功能检测方法。已移除了
改用
kanzi::Renderer::checkGLSupportkanzi::Renderer::checkGLESSupportkanzi::Renderer::getGlesVersionkanzi::Renderer::getMultisampleSupport始终支持多重采样。
kanzi::Multisample不再区分不同的多重采样类型。
合并 kanzi::Mesh 中的索引缓冲区¶
将 kanzi::Mesh 的索引缓冲区合并为 Mesh 对象自身中的一个缓冲区,不再由每个 kanzi::Mesh::Cluster 各自拥有索引缓冲区。因此,与索引缓冲区相关的 API 调用移至 Mesh 本身,或移除了其中的 Cluster 参数。从 kanzi::Mesh::CreateInfo::Cluster 构造函数中移除了索引缓冲区类型和句柄参数,因为它们现在直接属于 kanzi::Mesh::CreateInfo。如有需要,请使用 Mesh::getClusterIndexOffset 获取在主索引缓冲区中的字节偏移量。
已移除了 |
改用 |
|---|---|
|
|
|
|
|
直接设置 |
从以下函数中移除了群集索引参数:
kanzi::Mesh::mapIndexData |
平台 API 的更改¶
重命名了多个引用 OpenGL 上下文 API 的实体。
已移除了 |
改用 |
|---|---|
|
|
|
|
所有依赖于平台的窗口和输入代码均已移至单独的 library (kzplatform)。
Data-Driven Exclusive Activity Host 的更改¶
Data-Driven Exclusive Activity Host 现在仅支持从数据源创建的活动,不再支持手动添加的活动。请改用 Exclusive Activity Host。
列表框的更改¶
在
ListBoxConcept类中,重命名了这些消息和消息参数:Kanzi 3.9
Kanzi 4.0
ListBoxConcept::ItemHiddenMessageListBoxConcept::ItemHiddenMessageArgumentsListBoxConcept::ItemVisibleMessageListBoxConcept::ItemVisibleMessageArguments在
ListBoxConceptImpl类中,重命名了这些公开成员函数:Kanzi 3.9
Kanzi 4.0
ListBoxConceptImpl::getAliveRangeListBoxConceptImpl::updateVisibleRangeQuietListBoxConceptImpl::updateVisibleRange在
ListBoxTrajectoryPresenter类中,重命名了这些受保护成员函数:Kanzi 3.9
Kanzi 4.0
ListBoxTrajectoryPresenter::calculateVisibleRangeListBoxTrajectoryPresenter::updateVisibleRangeListBoxTrajectoryPresenter::extendVisibleItemRangeToItem重命名了这些类及其元类名称:
Kanzi 3.9
Kanzi 4.0
DataSourceListItemGeneratorDataSourceListItemGenerator2DDataSourceListItemGenerator3D
列表框节点的更改¶
在 Grid List Box 节点中,默认的方向导航键不再移动项选择。在 List Box 节点中,默认的方向导航键现在会在可聚焦的列表项之间移动按键焦点。
例如,要使用 ↑ 和 ↓ 键滚动 Grid List Box,请将列表项设为可聚焦。请参阅 在 List Box 节点中处理键焦点。。
ActivityCodeBehind 类的更改¶
在 Kanzi C++ API 的
ActivityCodeBehind类中,将onActive、onInactive、onActivating和onDeactivating回调替换为ActivityCodeBehind::onStatusChange。要迁移您的 Kanzi 应用程序,请将
onActive、onInactive、onActivating和onDeactivating回调的内容移至ActivityCodeBehind::onStatusChange回调。例如,如果您从ActivityCodeBehind派生,请将void onActive() override { kzLogInfo(KZ_LOG_CATEGORY_GENERIC, ("Activity status changed: Active")); }
至 (To)
void onStatusChange(ActivityConcept::Status status) override { switch(status) { case ActivityConcept::Status::Active: kzLogInfo(KZ_LOG_CATEGORY_GENERIC, ("Activity status changed: Active")); break; } }
在 Kanzi C++ (
ActivityCodeBehind) 和 Kanzi Java API (ActivityCodeBehind) 中,均移除了registerStatusChange、registerStatusChangeOverride、unregisterStatusChange和unregisterStatusChangeOverride。要迁移您的 Kanzi 应用程序,请将已注册的状态更改回调的内容移至
ActivityCodeBehind::onStatusChange回调。例如:
如果您从
ActivityCodeBehind派生,请将void registerStatusChangeOverride() override { registerStatusChange(ActivityConcept::Status::Active, [](ActivityConcept::StatusChangedMessageArguments&) { kzLogInfo(KZ_LOG_CATEGORY_GENERIC, ("Activity status changed: Active")); }); }
至 (To)
void onStatusChange(ActivityConcept::Status status) override { switch(status) { case ActivityConcept::Status::Active: kzLogInfo(KZ_LOG_CATEGORY_GENERIC, ("Activity status changed: Active")); break; } }
如果您从
ActivityCodeBehind派生,请将@Override protected void registerStatusChangeOverride() { registerStatusChange(ActivityStatus.Active, (messageArguments) -> { Log.info("Activity status changed: Active"); }); }
至 (To)
@Override protected void onStatusChange(ActivityStatus status) { super.onStatusChange(status); switch(status) { case Active: Log.info("Activity status changed: Active"); break; } }
ActivityElementImpl 和 ActivityHostConceptImpl 类的更改¶
在
ActivityHostConceptImpl类中,移除了以下方法:getActiveOrAttachedActivatinggetAttachedActivityNodesgetActivityInfo
要迁移您的 Kanzi 应用程序,请在继承
ActivityHostConceptImpl类的类中,移除对已移除方法的重写。ActivityElementImpl::onAttachedOverride方法不再是虚方法。要迁移您的 Kanzi 应用程序,请在继承
ActivityElementImpl类的类中,移除重写ActivityElementImpl::onAttachedOverride方法的onAttachedOverride方法重写。
File API 的更改¶
在 File 类中,将以下成员函数更改为在匿名数据缓冲区操作中使用 byte 而不是 char:
函数 |
签名 |
|---|---|
|
|
|
|
|
此更改也适用于继承 File 类的 ReadOnlyDiskFile、ReadOnlyMemoryFile 和 WriteOnlyDiskFile 类中的函数。
捏合操纵器的更改¶
在 PinchManipulator 类中:
移除了以下不起作用的成员函数和变量:
函数:
setRotationRecognitionThresholdsetScaleRecognitionThreshold
变量:
m_rotateThresholdm_rotatingm_scaleThresholdm_scaling
将以下成员变量设为私有:
m_normalizedReferenceVectorm_previousMiddlem_referenceScalem_touchIdAm_touchIdB
对应用程序配置的更改¶
移除了枚举值
MultisamplePreference::MultisamplePreferenceImplicit。这同时移除了应用程序配置文件选项MultisamplePreference = "implicit"
这反映了一项更广泛的更改,即从 Kanzi Engine 中移除了对隐式多重采样的支持。从现在起,Kanzi 仅在您使用
Renderbufferblit 或可显式访问的样本时才应用多重采样。渲染结果可见,因为此选项面向的是旧版 GPU。修改了应用程序配置,使其按照通行做法接受带双短划线前缀的命令行参数。用于选择图形后端的新参数为:
--gles--opengles--gl--opengl--vk--vulkan
用于选择窗口系统的新参数为:
--egl--wgl--glx
您可以在应用程序配置文件中使用不带双短划线的相同参数。
Kanzi 现在仅接受
false、true、0和1作为布尔配置选项的有效值。TracingInterval配置选项已重命名。已移除了
改用
TracingIntervalTracingTimeIntervalconfiguration.tracingConfiguration.recurringIntervalconfiguration.tracingConfiguration.recurringTimeInterval
对合成堆栈的更改¶
简化了 CompositionStack 的使用,现在要求使用由 Renderer 拥有的实例。
移除了
CompositionStack的默认构造函数以及会自动添加合成目标的构造函数。从以下方法中移除了
kanzi::Renderer3D和Renderer参数:kanzi::CompositionStack::apply2Dkanzi::CompositionStack::applyPerspective2D
从以下方法及其所有重写中移除了
CompositionStack参数:在
CompositionStack::pushComposition中,将参数类型从NativeFramebufferHandle更改为Framebuffer。对于为NativeFramebufferHandle使用0的代码,现在可以使用CompositionStack::pushCompositionActiveGraphicsOutput推送Renderer活动图形输出中的帧缓冲区。
在
NodeEffectRenderer2D::endInitialEffectPass中,将参数类型从CompositionStack更改为kanzi::Renderer。
在
CompositionStack::pushRasterization中,添加了参数类型GraphicsFillMode。
从
CompositionStack中移除了默认的堆栈状态。现在必须先显式推送状态,然后才能调用kanzi::CompositionStack::apply。添加了
CompositionStack::pushDefaultSettings2D和CompositionStack::pushDefaultSettings3D,用于推送默认设置。添加了CompositionStack::popSettings,用于从堆栈中弹出 2D 或 3D 设置。
从
CompositionStack中移除了 apply 函数。所有推送和弹出操作都会自动应用,无需额外的函数调用。
已移除了 |
改用 |
|---|---|
|
无需任何操作。 |
|
|
|
使用 |
|
无需任何操作。 |
|
不再支持。 |
|
无需任何操作。 |
|
不再支持。 |
|
无需任何操作。 |
|
不再支持。 |
|
无需任何操作。 |
|
不再支持。 |
对状态机的更改¶
更改了状态机在状态更改时发送属性更改通知和更新绑定的方式。以前,每次状态更改都会在移除旧状态的属性时发送一个通知,并在添加新状态的属性时再发送一个通知。现在,状态更改只发送一个通知,其中包含新状态的新属性值。如果状态更改带有 Transition 动画,则在 Transition 期间 Kanzi 会像以前一样发送属性通知,但不会在 Transition 开始时发送由状态更改引起的冗余通知。
使用 API 创建状态机时:
使用
Style::createWithValueModifiers为StateManager::StateObject::setStyle创建样式。Kanzi 会修改传递给
StateManager::StateObject::setStyle的样式,使该样式在状态机之外使用时也不会发送通知。删除了以下冗余或损坏的函数:
Style::createEmptyStyle::copyStyle::copyParentPropertiesStateManager::createEmpty
对属性和绑定的更改¶
属性和绑定中布尔值的字符串转换结果现在为小写的 true 或 false,而不再是 1 或 0 以及 True 或 False。
要将您的 Kanzi 应用程序从早期版本迁移过来,确保所有与布尔值进行比较的字符串值为小写的 true 或 false。
对挂起处理的更改¶
添加了 WakeupSignalSource 类,其功能替代了以下已删除的函数:
EventSource::getNativeEventHandleKeyMapEventFilter::getNativeEventHandleKeyRepeatGenerator::getNativeEventHandle
对事件处理的更改¶
添加了 Application::setInputEventHandle 函数,用于替代从 Application::appendEventSource 中删除的功能。
对 kzuEngine 的更改¶
删除了以前已弃用的与 kzuEngine 相关的功能:
Application::getEngine函数Application::m_engine成员kzuEngine结构体所有以
kzuEngine开头的函数kzu_engine.h头文件
对 Scroll View 消息的更改¶
删除了 Scroll View 和 Grid List Box 节点使用的以下已弃用的消息和消息处理程序:
已移除了 |
改用 |
|---|---|
|
|
|
|
|
请参阅 滚动功能。
对多个 Kanzi Engine API 的更改¶
更新了多个 Kanzi Engine API 的参数和返回类型,改为使用 size_t 数据类型,而不是 unsigned int。
将 kanzi::optional 和 kanzi::string_view 更改为 C++17 std 实现。在上一版本 Kanzi 中使用 Boost 实现的平台上,请迁移这些类的参数和返回类型。
将 kanzi::byte 更改为 C++17 std 实现。在上一版本 Kanzi 中使用 unsigned char 的平台上,请迁移这些类的参数和返回类型。
更改了针对 kanzi::string_view 参数的 trim 实现,使其与其他参数类型一样直接原地修改输入。
Wayland IVI 后端上的表面不透明度设置现在解释为浮点数,而不是整数。请参阅 wayland::IviSurfaceProps::opacity 和 wayland::IviLayerProps::opacity。
将函数 surfaceColorSpaceNameToEnum 从 libkzcoreui 移至 libkzplatform。
在不存在配置时,Kanzi Engine 应用程序的默认
SurfaceColorSpace已从SurfaceColorSpace::sRGB更改为SurfaceColorSpace::Standard。该值与新 Kanzi Studio 工程中默认配置的颜色工作流一致。
对 C 包装器头文件的更改¶
移除了头文件 kzs_string.hpp、kzs_arg.hpp 和 kzs_memory.hpp。
已移除了 |
改用 |
|---|---|
等等 |
等等 |
|
|
|
|
|
|
对旧版文件 API 的更改¶
移除了头文件 kzs_file.hpp 和 kzs_resource_file.hpp。
请改用 ReadOnlyDiskFile。
对焦点消息的更改¶
移除了焦点系统使用的以下已弃用消息和消息处理器:
已移除了 |
改用 |
|---|---|
|
|
|
请参阅 焦点处理中的更改。
对 Android 应用程序模板的更改¶
Kanzi Android 应用程序模板已升级到 Gradle 8.13、Android Gradle Plugin 8.12.1 和 Java 语言版本 11。
要迁移现有的应用程序:
在
<ProjectName>/Application/configs/platforms/android_gradle/gradle/wrapper/gradle-wrapper.properties中,替换:distributionUrl=https\://services.gradle.org/distributions/gradle-<version>-bin.zip
通过
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
在
<ProjectName>/Application/configs/platforms/android_gradle/build.gradle中,替换:dependencies { classpath 'com.android.tools.build:gradle:<android-gradle-plugin-version>' classpath 'com.rightware.gradle:kanzi:<kanzi-gradle-plugin-version>' }
通过
dependencies { classpath 'com.android.tools.build:gradle:8.12.1' classpath 'com.rightware.gradle:kanzi:0.9.0' }
在
<ProjectName>/Application/configs/platforms/android_gradle/app/build.gradle:更新 Java 兼容性:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } }
更新 Kotlin JVM 目标:
android { kotlinOptions { jvmTarget = '11' } }
如果您有自定义 Java 插件,请更新
exportJar任务:替换 (Replace)
task exportJar(type: Jar) { // ... rest of the task configuration from("build/intermediates/javac/${buildType.name}/classes/") // ... rest of the task configuration }
通过
task exportJar(type: Jar) { // ... rest of the task configuration from("build/intermediates/javac/${buildType.name}/compile${buildType.name.capitalize()}JavaWithJavac/classes/") // ... rest of the task configuration }
对 Android NDK 版本的更改¶
要将 Kanzi 应用程序设置为使用当前的 Android NDK 版本,请在应用程序的 build.gradle 文件中将 ndkVersion 设置为 26.3.11579264。
Kanzi Studio Android 包导出的更改¶
从 Kanzi Studio 构建 Android 包时,Kanzi Studio 现在根据工程的 Binary File Name 属性导出 cfg 文件。
要迁移应用程序,请更新 binaryFileName 或 kzbPathList 的定义。
弃用 Page 和 Page Host 节点¶
Page 和 Page Host 节点已被弃用,并将在 Kanzi 的下一个版本中移除。要创建可导航的用户界面,您必须手动重新创建 Kanzi Studio 工程和 Kanzi 应用程序,改为使用 Activity 和 Activity Host 节点。
要创建和检查 Activity Host 和 Activity 节点,以及模拟 Activity 激活,请使用 Activity Browser 窗口。请参阅 使用 Activity Browser。
使用以下 Activity Host 节点替换 Page Host 节点:
一个 Exclusive Activity Host 一次只能激活其一个子活动。当一个 Exclusive Activity Host 的子活动处于活动状态时,该活动主机的所有其他活动都处于非活动状态。例如,您可以使用一个 Exclusive Activity Host 在应用程序中切换视图。
请参阅 独占活动主机。
Parallel Activity Host 可以同时激活多个子活动。当您激活一个活动时,Parallel Activity Host 会将该活动置于前台。
请参阅 并行活动主机。
您可以使用列表数据源和 Data-Driven Exclusive Activity Host 从数据对象的内容中创建具有 Activities 的 UI 部分。例如,您可以在数据源中定义菜单的内容,并使用 Data-Driven Exclusive Activity Host 在您的应用程序中创建菜单。
请参阅 数据驱动独占活动主机。
用 Activity 节点替换 Page 节点。
要了解 Activities,请参阅:
文本渲染的更改¶
将
FontRuntime::getGlyphCache的返回类型从GlyphCache引用更改为GlyphCacheSharedPtr。GlyphRun现在在构造函数中接受GlyphCache,而不是在GlyphRun::draw方法中接受,并通过GlyphCache::getTexture方法公开其字形缓存纹理。更改了
TextFormat::draw的签名,使其接受渲染条目和内容纹理句柄,而不是材质参数。该函数现在假定材质已在渲染状态中绑定。移除了先前已弃用的
kanzi::StandardMaterial::GlyphTextureProperty属性类型。如果字体系列参数为空,
FontManager::getRuntimeFont现在可以返回nullptr,而不是返回空字体。
变形数据的更改¶
以前版本的 Kanzi 使用单独的 kanzi::Morph 对象,该对象继承 Mesh,并将其他网格引用为混合起点和终点的变形目标。从 Kanzi 4.0.0-beta2 版本开始,变形数据表示为相对于基础网格的差异。对多个网格的使用已被移除,整个 kanzi::Morph 类概念也已移除。
网格现在可以包含一个内部 Mesh::MorphData 对象,该对象包含差异数据。可以通过 const kanzi::Mesh::MorphData* kanzi::Mesh::getMorphData() const 访问此数据。对于形状数量足够少、符合常见的 16 个特性通道限制的变形,Kanzi Studio 将网格数据作为顶点缓冲区 blob 导出到 Mesh::MorphData 中。需要更多通道的变形数据将根据选定使用的变形形状,存储为直接分配给 Model3D 的数据纹理。
使用旧的变形固定 Uniforms kzMorphDataTexture、kzMorphIndices 和 kzMorphWeights 的着色器现在在 Studio 中被标记为已弃用。
对变形权重的更改¶
在以前版本的 Kanzi 中,当您为 Model3D 节点设置变形网格时,Kanzi Engine 会用 kanzi::Morph 中的默认权重覆盖变形权重。从 Kanzi 4.0.0-beta1 开始,变形权重会被保留。
要复现旧的行为,请将 Model3D::MeshProperty 设置为 nullptr,然后分配新的 kanzi::Morph。
在以前版本的 Kanzi 中,变形权重由单独的变形运行时处理,该运行时是 kanzi::Model3D 节点的子对象。从 Kanzi 4.0.0-beta1 开始,变形权重只是一个范围。
要设置变形权重,请将包含元素数量正确的 kanzi::TypedValueRange<float> 的 AbstractRangeSharedPtr 分配给 Model3D::MorphingProperty。可以从 Mesh::MorphData 读取权重的最大数量。
即使未分配任何权重,Kanzi Engine 也会创建一个填充了默认权重的类值源,只要应用程序开发人员未分配更高级别的值或绑定,就会使用该值源。
以前使用 kanzi::MorphWeightAnimationTimeline 为变形权重创建动画的机制已被弃用。由于变形权重现在只是一个范围属性,请使用新引入的类型 RangeIndexAnimationTimeline。
已移除了 |
改用 |
|---|---|
|
|
|
CubeMapRenderPass 的更改¶
CubeMapRenderPass 不再自动创建深度纹理。要创建深度纹理,请设置 CubeMapRenderPass::DepthFormatProperty。
除非您设置了 CubeMapRenderPass::DepthFormatProperty,或使用 CubeMapRenderPass::DepthTargetProperty 手动设置了深度纹理,否则为了节省内存并提高性能,Kanzi 只使用一个深度渲染缓冲区。Kanzi 会为 CubeMapRenderPass 中的每个面重复使用该深度渲染缓冲区。
纹理的更改¶
已移除过时的创建信息类型 kanzi::Texture::CreateInfoNode2DRenderTarget 和 Texture::CreateInfoRenderpassRenderTarget。请使用 Texture::CreateInfoRenderTarget。用于合成的纹理现在始终要么包含自己的帧缓冲区,要么由 Kanzi 在内部合并为单个帧缓冲区,例如在 CompositionTargetRenderPass 中。这些特定的单独创建场景已无必要,因此已被移除。
对光源 (Light) 属性的更改¶
已从光源节点 (Light node) 中移除这些属性。请改用摄像机节点 (Camera node) 中的属性。
已从光源节点 (Light node) 中移除 |
请改用摄像机节点 (Camera node) 中的 |
|---|---|
Shadow Projection Z Near |
Z 近平面 (Z Near) |
Shadow Projection Z Far |
Z 远平面 (Z Far) |
Shadow Projection Z Orthogonal Plane Size |
正交片面尺寸 (Orthogonal Plane Size) |
对 Progressive Rendering Viewport 2D 属性的更改¶
已移除了 |
改用 |
|---|---|
ProgressiveRenderingViewport2D.MultisampleLevel |
Node2D.MultisampleLevel |
对 Kanzi Studio 命令的更改¶
更改了
SaveProject,使其接受目录路径而非文件路径。请将SaveProject "C:\Example\directory\path\projectName.kzproj"替换为SaveProject "C:\example\directory\path\",或者替换为SaveProject以将工程保存到其现有位置。请参阅 SaveProject。更改了
NewProject,使其接受目录路径而非文件路径。请将NewProject "C:\Example\directory\path\projectName.kzproj"替换为NewProject "C:\example\directory\path\" "projectName"。请参阅 NewProject。
从
SaveProject命令中移除了可选的projectFileFormat参数。
已移除的 API 成员¶
移除了以下在 Kanzi 早期版本中已弃用的 Kanzi Engine C++ API 成员:
已移除了 |
改用 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不可用 |
|
|
|
|
|