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 プロジェクトにインポートしてください。

ビルドシステムの変更点

  • すべてのプラットフォームが SCons ではなく CMake を使用するように移行されました。

Kanzi Graphics の導入

Kanzi Graphics の導入により、Kanzi アプリケーションが Kanzi のレンダリングサブシステムとやり取りする方法が変わります。

Renderer クラスのほとんどの関数を削除しました。代わりに、構成済みのバックエンド (Open GL、Open GL ES、または Vulkan) で Kanzi Graphics API を使用してください。

Kanzi Graphics は次の主要な部分で構成されています。

  • gfx::create 関数と GraphicsCreateInfo 構造体を使用してオブジェクトを作成します。

  • Kanzi は GraphicsCommands をコマンドバッファに記録し、Kanzi Graphics バックエンドがこれらのコマンドを特定のグラフィックス API 向けに処理します。

  • Kanzi Engine プラグインを使用する Kanzi Studio プロジェクトでは、プラグイン DLL を Kanzi Studio プロジェクトに再インポートする必要があります。

  1. Kanzi 4.0.0 を使用してプラグインをリビルドします。

  2. Library > Kanzi Engine Plugins で Kanzi Engine プラグインを削除し、更新した Kanzi Engine プラグインをインポートします。

  • これらのクラス、メンバー、または関数を削除しました:

    • kanzi::acquireUniformLocation

    • kanzi::getUniformElementCount

    • kanzi::GLBufferHandle

    • kanzi::GLFramebufferHandle

    • kanzi::GlGraphicsLogScope

    • kanzi::GlGraphicsAdapter

    • kanzi::GlGraphicsAdapterCallGles

    • kanzi::GlGraphicsAdapterCallOpenGl

    • kanzi::GlGraphicsAdapterCheckForErrors

    • kanzi::GlGraphicsAdapterLogger

    • kanzi::GLGraphicsOutput

    • kanzi::GLProgramHandle

    • kanzi::GLRenderbufferHandle

    • kanzi::GlRenderState::acquireUniformLocation

    • kanzi::GlRenderState::allocateValues

    • kanzi::GlRenderState::RenderValueUnion

    • kanzi::GlRenderState::RenderValueInfo

    • kanzi::GlRenderState::TextureRenderValue

    • kanzi::GlRenderValueBase

    • kanzi::GLShaderHandle

    • kanzi::GLTextureHandle

    • kanzi::GlTextureRenderValue

    • kanzi::Mesh::bind

    • kanzi::Mesh::bindAttribute

    • kanzi::Mesh::bindAttributes

    • kanzi::Mesh::bindIndicies

    • kanzi::Renderer::getActiveGraphicsContext

    • kanzi::Renderer::getActiveSurfaceVendor

    • kanzi::Renderer::getUniformLocationSlow

    • kanzi::Renderer::getUniformArrayLength

    • kanzi::Renderer::setUniformIntArray

    • kanzi::Renderer::setUniformFloatArray

    • kanzi::Renderer::setUniformVecArray

    • kanzi::Renderer::setUniformColorArray

    • kanzi::Renderer::setUniformMatArray

    • kanzi::Renderer::setUniformInteger

    • kanzi::Renderer::setUniformFloat

    • kanzi::Renderer::setUniformVec2

    • kanzi::Renderer::setUniformVec3

    • kanzi::Renderer::setUniformVec4

    • kanzi::Renderer::setUniformColorRGBA

    • kanzi::Renderer::setUniformMatrix3x3

    • kanzi::Renderer::setUniformMatrix4x4

    • kanzi::Renderer::setActiveScalar

    • kanzi::Renderer::getActiveScalar

    • kanzi::Renderer::calculateProjectionCameraWorldMatrix

    • kanzi::Renderer::applyFixedUniformTime

    • kanzi::Renderer::applyFixedUniformWindowSize

    • kanzi::Renderer::applyTransformationUniform

    • kanzi::Renderer::applyTransformation

    • kanzi::Renderer::applyTextureSizeUniforms

    • kanzi::Renderer::applyTexture

    • kanzi::Renderer::detachTexture

    • kanzi::Renderer::setUniformTexture

    • kanzi::Renderer::generateTexture

    • kanzi::Renderer::deleteTexture

    • kanzi::Renderer::setTextureAddressingMode

    • kanzi::Renderer::setTextureSwizzleMask

    • kanzi::Renderer::setTextureSwizzleEachChannel

    • kanzi::Renderer::deleteShaderProgram

    • kanzi::Renderer::deleteShader

    • kanzi::Renderer::generateFramebuffer

    • kanzi::Renderer::deleteFramebuffer

    • kanzi::Renderer::invalidateFramebufferAttachments

    • kanzi::Renderer::framebufferRenderbuffer

    • kanzi::Renderer::generateRenderbuffer

    • kanzi::Renderer::deleteRenderbuffer

    • kanzi::Renderer::bindRenderbuffer

    • kanzi::Renderer::renderbufferStorage

    • kanzi::Renderer::generateBuffer

    • kanzi::Renderer::setVertexBufferData

    • kanzi::Renderer::setIndexBufferData

    • kanzi::Renderer::setVertexBufferSubData

    • kanzi::Renderer::setIndexBufferSubData

    • kanzi::Renderer::deleteBuffer

    • kanzi::Renderer::BufferAccessMode

    • kanzi::Renderer::mapVertexBuffer

    • kanzi::Renderer::unmapVertexBuffer

    • kanzi::Renderer::mapIndexBuffer

    • kanzi::Renderer::unmapIndexBuffer

    • kanzi::Renderer::enableVertexAttributeArray

    • kanzi::Renderer::disableVertexAttributeArray

    • kanzi::Renderer::getActiveShaderHandle

    • kanzi::Renderer::getActiveShaderAttributeMap

    • kanzi::Renderer::beginMaterialSetup

    • kanzi::Renderer::endMaterialSetup

    • kanzi::Renderer::pushStatistics

    • kanzi::Renderer::popStatistics

    • kanzi::Renderer::getIndexCount

    • kanzi::Renderer::getTriangleCount

    • kanzi::Renderer::getVertexCount

    • kanzi::Renderer::getInstanceCount

    • kanzi::Renderer::getBatchCount

    • kanzi::Renderer::getShaderSwitchCount

    • kanzi::Renderer::getUniformSendCount

    • kanzi::Renderer::getTextureSwitchCount

    • kanzi::Renderer::getFramebufferSwitchCount

    • kanzi::Renderer::getBufferSwitchCount

    • kanzi::Renderer::getHeavyweightCallCount

    • kanzi::Renderer::getHalfFloatVertexAttributeSupport

    • kanzi::Renderer::getTexStorageSupport

    • kanzi::Renderer::getGLFormatTriplet

    • kanzi::Renderer::clearUniformCaches

    • kanzi::Renderer::TextureUnitInfo

    • kanzi::Renderer::RenderingChangeStateFlag

    • kanzi::Renderer::refreshRenderContext

    • kanzi::Renderer::enableState

    • kanzi::Renderer::disableState

    • kanzi::Renderer::setState

    • kanzi::Renderer::getState

    • kanzi::Renderer::setBlendMode

    • kanzi::Renderer::getBlendMode

    • kanzi::Renderer::setCullMode

    • kanzi::Renderer::getCullMode

    • kanzi::Renderer::setDepthTest

    • kanzi::Renderer::getDepthTest

    • kanzi::Renderer::setLineWidth

    • kanzi::Renderer::getLineWidth

    • kanzi::Renderer::clear

    • kanzi::Renderer::resetClearTarget

    • kanzi::Renderer::addClearTarget

    • kanzi::Renderer::getClearMode

    • kanzi::Renderer::addClearColor

    • kanzi::Renderer::removeClearTarget

    • kanzi::Renderer::isClearEnabled

    • kanzi::Renderer::setClearColor

    • kanzi::Renderer::setClearDepthValue

    • kanzi::Renderer::setClearStencil

    • kanzi::Renderer::setColorWriteMode

    • kanzi::Renderer::getColorWriteMode

    • kanzi::Renderer::setViewport

    • kanzi::Renderer::getViewport

    • kanzi::Renderer::setScissorTest

    • kanzi::Renderer::getScissor

    • kanzi::Renderer::setVertexBuffer

    • kanzi::Renderer::setIndexBuffer

    • kanzi::Renderer::drawBuffers

    • kanzi::Renderer::setVertexCount

    • kanzi::Renderer::setIndexCount

    • kanzi::Renderer::setIndexData

    • kanzi::Renderer::setInstanceCount

    • kanzi::Renderer::setActiveTextureUnit

    • kanzi::Renderer::bindTexture

    • kanzi::Renderer::setTextureImage2D

    • kanzi::Renderer::setTextureSubImage2D

    • kanzi::Renderer::textureStorage

    • kanzi::Renderer::generateMipMaps

    • kanzi::Renderer::setTextureFilter

    • kanzi::Renderer::setTextureCompare

    • kanzi::Renderer::setTextureMaximumLevel

    • kanzi::Renderer::createShader

    • kanzi::Renderer::createShaderProgram

    • kanzi::Renderer::attachShaderToProgram

    • kanzi::Renderer::detachShaderFromProgram

    • kanzi::Renderer::bindAttributeToLocation

    • kanzi::Renderer::linkShaderProgram

    • kanzi::Renderer::compileSourceShader

    • kanzi::Renderer::deployBinaryShader

    • kanzi::Renderer::deployBinaryProgram

    • kanzi::Renderer::loadProgramFromCache

    • kanzi::Renderer::saveProgramToCache

    • kanzi::Renderer::getCacheFilePath

    • kanzi::Renderer::updateSettings

    • kanzi::Renderer::getProgramBinary

    • kanzi::Renderer::isFramebufferComplete

    • kanzi::Renderer::framebufferTexture2D

    • kanzi::Renderer::applyVertexAttributeArrays

    • kanzi::Renderer::setVertexBufferPointer

    • kanzi::Renderer::setVertexBufferPointer

    • kanzi::Renderer::setActiveShaderHandle

    • kanzi::Renderer::setActiveFramebuffer

    • kanzi::Renderer::setColorBufferCount

    • kanzi::Renderer::getActiveFramebuffer

    • kanzi::Renderer::beginVertexArray

    • kanzi::Renderer::setVertexArrayData

    • kanzi::Renderer::endVertexArray

    • kanzi::Renderer::getCurrentVertexArrayFlags

    • kanzi::Renderer::getCurrentVertexArrayAttributeData

    • kanzi::Renderer::isShaderBinaryFormatSupported

    • kanzi::Renderer::isProgramBinaryFormatSupported

    • kanzi::Renderer::applyAttributePointer

    • kanzi::Renderer::supportsTexStorage

    • kanzi::Renderer::setHasTessellationShader

    • kanzi::Renderer::setFillMode

    • kanzi::Renderer::readPixels

    • kanzi::Renderer::setPixelStorePack

    • kanzi::Renderer::setPixelStoreUnpack

    • kanzi::Shader::UniformProperty::uniformLocation

    • kanzi::Shader::hasSamplersWithoutProperties

    • kanzi::Shader::getTextureUniformLocation

    • kanzi::Texture::deployImages

    • kzsGlGraphicsContextCreate

    • kzsGlGraphicsContextDestroy

    • kzsGlGraphicsContextSetActive

    • kzsGlGraphicsContextGetAdapter

    • kzsGlGraphicsContextIsKhrDebugSupported

    • kzsGlGraphicsContextGetVendor

    • kzsGlGraphicsContextGetSurfaceClientAPI

    • kzsGlGraphicsContextGetAPI

    • kzsGlIsExtensionSupported

    • kzsGlGraphicsContextSetLogging

    • kzsGlGraphicsContextGetLogging

    • kzsGlGraphicsContextGetDumpStateOnDrawCalls

    • kzsGlGraphicsContextSetErrorChecking

    • kzsGlGraphicsContextSetDebugCallback

    • kzsGlGraphicsContextGetGlesSymbols

    • kzsGlGraphicsContextGetOpenGlSymbols

  • レンダーステートの抽象化は OpenGL 固有のものではないため、プラットフォーム固有の "Gl" プレフィックスを除くために、kanzi::GlRenderState クラスの名前を RenderState に変更しました。

    ヘッダーファイルも kanzi/core.ui/graphics3d/render_state.hpp から kanzi/core.ui/graphics/render_state.hpp に移動しました。

  • 直接の代替がある以下の関数を削除しました:

    削除されました

    代わりに使用するもの

    kanzi::captureCurrentFramebufferToImage

    captureFramebuffer

    kanzi::captureScreenToImage

    captureFramebuffer

    kanzi::GPUBuffer::getNativeHandle

    GPUBuffer::getHandle

    kanzi::Mesh::getNativeVertexBufferHandle

    Mesh::getVertexBufferHandle

    kanzi::Mesh::getNativeIndexBufferHandle

    Mesh::getIndexBufferHandle

    kanzi::Mesh::getNativeInstanceBufferHandle

    Mesh::getInstanceBufferHandle

    kanzi::Renderbuffer::getNativeHandle

    Renderbuffer::getHandle

    kanzi::Renderer::applyFixedUniforms

    RenderState::updateFixedFunctionUniforms

    kanzi::Renderer::getMaximumVertexAttributeCount

    gfx::getDeviceProperty (gfx::DevicePropertyId::MaxVertexAttributes)

    kanzi::Renderer::setActiveGLGraphicsOutput

    Renderer::setActiveGraphicsOutput

  • kanzi::Geometry::drawTextured 関数および kanzi::Geometry::drawUntextured 関数を削除しました。これらの関数を使用している場合は、コードを次のように変更できます。

    if (isTextured())
    {
        geometry.drawTextured(renderer, transform, GraphicsPrimitiveTypeTriangleStrip, material);
    }
    else
    {
        geometry.drawUntextured(renderer, transform, GraphicsPrimitiveTypeTriangleStrip, material);
    }
    

    終点

    renderer.setMatrix(FixedMatrixWorld, transform);
    renderState.updateTransformationUniforms(renderer);
    
    renderState.draw(renderer, geometry);
    

Renderer API の変更

  • Renderer3D クラスを削除しました。Kanzi は Renderer3D クラスを使用して 3D レンダリング中に一時的なプロパティを保存し、Preview のデバッグ機能を提供していました。

    このバージョンの Kanzi では、次のように移行しています。

    アプリケーションコード内の Renderer3D の使用箇所をすべて Renderer を使用するように変更してください。これには、Renderer3D をパラメーターとして受け取るすべての仮想関数も含まれます。

    これらの関数を Renderer3D クラスから Renderer クラスに移動しました。

    Renderer3D クラスの削除に伴うリファクタリングにより、これらの関数を削除しました。削除された関数のほとんどはデバッグレンダリングに関連するものです。

    • Renderer::bindFramebuffer

    • Renderer::setActiveFramebufferCallback

    • Renderer::setDefaultFramebuffer

    • Renderer3D::addVertexAndNormalToFloatArrays

    • Renderer3D::addVertexToFloatArray

    • Renderer3D::applyBoolProperty

    • Renderer3D::applyColorMaterial

    • Renderer3D::applyColorProperty

    • Renderer3D::applyFloatProperty

    • Renderer3D::applyIntProperty

    • Renderer3D::applyMaterial

    • Renderer3D::applyMaterialStrict

    • Renderer3D::applyMatrix3x3Property

    • Renderer3D::applyMatrix4x4Property

    • Renderer3D::applyPropertyType

    • Renderer3D::applySRT2DProperty

    • Renderer3D::applySRT3DProperty

    • Renderer3D::applyStencilSettings

    • Renderer3D::applyTextureProperty

    • Renderer3D::applyVector2Property

    • Renderer3D::applyVector3Property

    • Renderer3D::applyVector4Property

    • Renderer3D::calculateNormal

    • Renderer3D::drawBoxSolidNormal

    • Renderer3D::drawLayerOutlineQuad

    • Renderer3D::drawLayerQuad

    • Renderer3D::drawLayerQuadWithMaterial

    • Renderer3D::drawLineList

    • Renderer3D::drawPrimitives

    • Renderer3D::drawOrientedBoundingBoxSolidNormal

    • Renderer3D::drawPrimitiveBufferTextured

    • Renderer3D::drawPrimitiveBufferUntextured

    • Renderer3D::drawPrimitivesNormal

    • Renderer3D::drawSelectionIndicator

    • Renderer3D::drawQuad

    • Renderer3D::drawTrajectory

    • Renderer3D::drawUntexturedLayerQuad

    • Renderer3D::drawViewportQuadWithTextureSpan

    • Renderer3D::getActiveGLGraphicsOutput

    • Renderer3D::getClearColorOverride

    • Renderer3D::getFloatBuffer

    • Renderer3D::getResourceManager

    • Renderer3D::isBoundingBoxVisualizationEnabled

    • Renderer3D::isColorWriteDisabled

    • Renderer3D::isSkeletonVisualizationEnabled

    • Renderer3D::printInfo

    • Renderer3D::removeClearColorOverride

    • Renderer3D::setActiveGLGraphicsOutput

    • Renderer3D::setBoundingBoxVisualizationEnabled

    • Renderer3D::setClearColorOverride

    • Renderer3D::setDefaultOrthoProjection

    • Renderer3D::setDisableColorWrite

    • Renderer3D::setFramebufferCallback

    • Renderer3D::setLogging

    • Renderer3D::setSkeletonVisualizationEnabled

    • Surface::attach

    • Surface::attachOverride

    代わりに、DebugVisualization クラスと DebugVisualizationStorage クラスを使用して、ノードのデバッグビジュアライゼーションを描画および保存します。

    DebugComposer が自動的に使用する標準の DebugRenderRegistry::DebugObjectRenderingFunction は次のように変更されました。

    void (*DebugObjectRenderingFunction)(Renderer& renderer, DebugRenderStorage& storage, DebugVisualization* visualization, NodeSharedPtr object);
    

    storage にアクセスして、Node のデバッグビジュアライゼーション構造を作成できます。前のフレームでこれを行っている場合、visualization パラメーターは null ではないため、それを使用できます。DebugVisualization に保存されたジオメトリは、シーングラフから Node を削除するまで保持されます。

  • Surface::Usage エヌメレーションを削除しました。

  • RenderTargetMode は非推奨となり、Texture から削除されました。その結果、次のようになります。

  • 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::getColorReadFormat

    • Renderer::getColorReadType

kanzi::Mesh のインデックスバッファーの統合

kanzi::Mesh のインデックスバッファを、各 kanzi::Mesh::Cluster がそれぞれ個別に持つのではなく、メッシュ (Mesh) オブジェクト自体が持つ 1 つのインデックスバッファに統合しました。これにより、インデックスバッファ関連の API 呼び出しはメッシュ自体に移動するか、クラスタのパラメータが削除されます。インデックスバッファのタイプ (Type) とハンドルのパラメータは、kanzi::Mesh::CreateInfo::Cluster のコンストラクタから削除されました。これらは kanzi::Mesh::CreateInfo に直接含まれるようになったためです。必要に応じて、Mesh::getClusterIndexOffset を使用してメインのインデックスバッファ内のバイトオフセットを取得してください。

削除されました

代わりに使用するもの

kanzi::Mesh::getClusterIndexType

Mesh::getIndexType

kanzi::Mesh::getClusterIndexData

Mesh::getIndexData

kanzi::Mesh::CreateInfo::Cluster::setIndexCount

kanzi::Mesh::CreateInfo::Cluster::indexCount メンバーと kanzi::Mesh::CreateInfo::Cluster::indexOffset メンバーを直接設定してください。

以下の関数からクラスタインデックスのパラメータを削除しました:

kanzi::Mesh::mapIndexData

Mesh::setIndexData

Mesh::setIndexSubData

プラットフォーム API の変更

  • OpenGL コンテキスト API を参照するいくつかのエンティティの名前を変更しました。

削除されました

代わりに使用するもの

kanzi::platform::OpenGLPlatform

kanzi::platform::GlContextApi

kanzi::platform::createDefaultOpenGLPlatform

kanzi::platform::createDefaultGlContextApi

  • kanzi/core/platform/cpp/win32/string_conversion.hpp にある Win32 文字列 (String) ユーティリティを、kanzi ネームスペース (Namespace) から win32 に移動しました。

  • プラットフォームに依存するウィンドウ処理とインプット (Input) のコードはすべて、別のライブラリ (Library) である kzplatform に移動しました。

データ駆動型エクスクルーシブアクティビティホストの変更

Data-Driven Exclusive Activity Host は、データソースから作成されたアクティビティのみをサポートするようになり、手動で追加したアクティビティはサポートしなくなりました。代わりに Exclusive Activity Host を使用してください。

リストボックス (List Box) の変更

リストボックス (List Box) ノードへの変更

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"));
    }
    

    終点

    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"));
       });
    }
    

    終点

    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");
       });
    }
    

    終点

    @Override
    protected void onStatusChange(ActivityStatus status)
    {
       super.onStatusChange(status);
       switch(status)
       {
          case Active:
             Log.info("Activity status changed: Active");
             break;
       }
    }
    

ActivityElementImpl クラスと ActivityHostConceptImpl クラスへの変更

  • ActivityHostConceptImpl クラスから以下のメソッドを削除しました。

    • getActiveOrAttachedActivating

    • getAttachedActivityNodes

    • getActivityInfo

    Kanzi アプリケーションを移行するには、ActivityHostConceptImpl クラスを継承するクラスで、削除されたメソッドのオーバーライドを削除します。

  • ActivityElementImpl::onAttachedOverride メソッドは仮想メソッドではなくなりました。

    Kanzi アプリケーションを移行するには、ActivityElementImpl クラスを継承するクラスで、ActivityElementImpl::onAttachedOverride メソッドをオーバーライドしている onAttachedOverride メソッドのオーバーライドを削除します。

File API への変更

File クラスで、以下のメンバー関数を、匿名データバッファ操作に char ではなく byte を使用するように変更しました。

関数

シグネチャ

File::read

void File::read(byte* buffer, uintmax_t count)

File::tryRead

uintmax_t File::tryRead(byte* buffer, uintmax_t count)

File::write

void write(const byte* buffer, uintmax_t count)

この変更は、File クラスを継承する ReadOnlyDiskFile、ReadOnlyMemoryFile、WriteOnlyDiskFile クラスの関数にも適用されます。

ピンチマニピュレータ (Pinch Manipulator) の変更

PinchManipulator クラスの変更:

  • 効果のなかった以下のメンバー関数とメンバー変数を削除しました。

    • 関数:

      • setRotationRecognitionThreshold

      • setScaleRecognitionThreshold

    • 変数:

      • m_rotateThreshold

      • m_rotating

      • m_scaleThreshold

      • m_scaling

  • 以下のメンバー変数をプライベートにしました。

    • m_normalizedReferenceVector

    • m_previousMiddle

    • m_referenceScale

    • m_touchIdA

    • m_touchIdB

アプリケーション構成の変更

  • エヌメレーション値 MultisamplePreference::MultisamplePreferenceImplicit を削除しました。これにより、次のアプリケーション構成ファイルのオプションも削除されます

    MultisamplePreference = "implicit"
    

    これは、Kanzi Engine から暗黙的なマルチサンプリングのサポートを削除するという、より広範な変更を反映したものです。今後、Kanzi がマルチサンプリングを適用するのは、Renderbuffer のブリットまたは明示的にアクセス可能なサンプルを使用する場合のみです。このオプションはレガシー GPU を対象としていたため、レンダリング結果に目に見える影響があります。

  • 一般的な慣習に従い、ダブルダッシュのプレフィックスが付いたコマンドラインパラメータを受け付けるようにアプリケーション構成を変更しました。グラフィックスバックエンドを選択するための新しいパラメータは以下のとおりです。

    • --gles

    • --opengles

    • --gl

    • --opengl

    • --vk

    • --vulkan

    ウィンドウシステムを選択するための新しいパラメータは以下のとおりです。

    • --egl

    • --wgl

    • --glx

    アプリケーション構成ファイルでは、同じパラメータをダブルダッシュなしで使用できます。

  • Kanzi は、論理値の構成オプションの有効な値として false、true、0、1 のみを受け付けるようになりました。

  • TracingInterval 構成オプションの名前を変更しました。

    削除されました

    代わりに使用するもの

    TracingInterval

    TracingTimeInterval

    configuration.tracingConfiguration.recurringInterval

    configuration.tracingConfiguration.recurringTimeInterval

    TracingTimeInterval を参照してください。

Composition Stack の変更

CompositionStack の使用方法を簡素化し、Renderer が所有するインスタンスを使用する必要があるようにしました。

  • CompositionStack からアプライ関数を削除しました。すべてのプッシュおよびポップ操作は、追加の関数呼び出しなしで自動的に適用されます。

削除されました

代わりに使用するもの

kanzi::CompositionStack::apply3D kanzi::CompositionStack::apply

対応は不要です。

kanzi::CompositionStack::apply2D

Renderer::setOrthographicProjection

kanzi::CompositionStack::applyPerspective2D

FixedMatrixCamera と FixedMatrixProjection を指定した Renderer::setMatrix の複数回の呼び出し。

kanzi::CompositionStack::applyColorBlend2D kanzi::CompositionStack::applyColorBlend3D kanzi::CompositionStack::applyColorBlend

対応は不要です。

kanzi::CompositionStack::invalidateColorBlend

サポートされなくなりました。

kanzi::CompositionStack::applyComposition2D kanzi::CompositionStack::applyComposition3D kanzi::CompositionStack::applyComposition

対応は不要です。

kanzi::CompositionStack::invalidateComposition

サポートされなくなりました。

kanzi::CompositionStack::applyDepthStencil2D kanzi::CompositionStack::applyDepthStencil3D kanzi::CompositionStack::applyDepthStencil

対応は不要です。

kanzi::CompositionStack::invalidateDepthStencil

サポートされなくなりました。

kanzi::CompositionStack::applyRasterization2D kanzi::CompositionStack::applyRasterization3D kanzi::CompositionStack::applyRasterization

対応は不要です。

kanzi::CompositionStack::invalidateRasterization

サポートされなくなりました。

ステートマネージャーの変更

ステートの変更時に、ステートマネージャーがプロパティ変更通知を送信し、バインディングを更新する方法を変更しました。以前は、ステートが変更されるたびに、古いステートのプロパティを削除する際に 1 回、新しいステートのプロパティを追加する際に 1 回の通知が送信されていました。現在は、ステートの変更時に、新しいステートの新しいプロパティ値を含む通知が 1 回だけ送信されます。ステートの変更にトランジションアニメーションがある場合、トランジション中は Kanzi が従来どおりプロパティ通知を送信しますが、トランジション開始時のステート変更によって発生する冗長な通知は送信しません。

API を使用してステートマネージャーを作成する場合:

  • StateManager::StateObject::setStyle に渡すスタイルは、Style::createWithValueModifiers を使用して作成してください。

  • Kanzi は、StateManager::StateObject::setStyle に渡されたスタイルを変更し、ステートマネージャーの外部でそのスタイルを使用した場合にも通知を送信しないようにします。

  • これらの冗長な関数または正しく動作しない関数を削除しました:

    • Style::createEmpty

    • Style::copy

    • Style::copyParentProperties

    • StateManager::createEmpty

プロパティとバインディングの変更

プロパティとバインディングにおける Boolean 値の文字列変換の結果が、1 または 0、および True または False ではなく、小文字の true または false になりました。

Kanzi アプリケーションを以前のバージョンから移行するには、Boolean 値と比較するすべての文字列値が小文字の true または false であることを確認してください。

サスペンド処理の変更

削除された以下の関数に代わる機能を備えた WakeupSignalSource クラスを追加しました:

  • EventSource::getNativeEventHandle

  • KeyMapEventFilter::getNativeEventHandle

  • KeyRepeatGenerator::getNativeEventHandle

イベント処理の変更

Application::appendEventSource から削除された機能に代わる Application::setInputEventHandle 関数を追加しました。

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 のパラメータと戻り値の型を、unsigned int ではなく size_t データタイプを使用するように更新しました。

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 を削除しました。

削除されました

代わりに使用するもの

kzsStrcat

kzsStrncmp

など

strcat

strncmp

など

kzsStringFormatList

kzsStringFormatGetLength

kanzi::format

kzsStringFindNextCharacter

string_view::find

kzsStringGetUTF8ByteCount

kzsStringWriteUnicodeCharacter

kzsStringGetUnicodeCharacter

stringToUnicodeVector

レガシーファイル API の変更

ヘッダー kzs_file.hpp と kzs_resource_file.hpp を削除しました。

代わりに ReadOnlyDiskFile を使用してください。

フォーカスメッセージの変更

フォーカスシステムで使用されていた、以下の非推奨のメッセージとメッセージハンドラーを削除しました。

削除されました

代わりに使用するもの

ScopeBroughtToFrontMessage

FocusManager::OverlayBroughtToFrontMessage

ScopeSentToBackMessage

FocusManager::OverlaySentToBackMessage

フォーカス処理の変更 を参照してください。

Androidアプリケーションテンプレートの変更

Kanzi の Android アプリケーションテンプレートが Gradle 8.13、Android Gradle Plugin 8.12.1、Java 言語バージョン 11 にアップグレードされました。

既存のアプリケーションを移行するには:

  1. <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
    
  2. <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'
    }
    
  3. <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 の次のバージョンで削除されます。ナビゲーション可能なユーザーインターフェイスを作成するには、代わりに Activity ノードと Activity Host ノードを使用するように、Kanzi Studio プロジェクトと Kanzi アプリケーションを手動で作り直す必要があります。

Activity Host ノードと Activity ノードを作成および検査し、Activity のアクティベーションをシミュレートするには、Activity Browser ウィンドウを使用します。アクティビティブラウザの使用 を参照してください。

Page Host ノードを置き換えるには、以下の Activity Host ノードを使用します:

  • Exclusive Activity Host は、子アクティビティのうち一度に1つだけをアクティブにすることができます。Exclusive Activity Host の1つの子アクティビティがアクティブな場合、そのアクティビティホストの他のすべてのアクティビティは非アクティブになります。例えば、Exclusive Activity Host を使用して、アプリケーション内のビューを切り替えることができます。

    エクスクルーシブアクティビティホスト を参照してください。

  • Parallel Activity Host は、複数の子アクティビティを同時にアクティブ化することができます。アクティビティをアクティブ化すると、Parallel Activity Host がそのアクティビティを前面に表示します。

    パラレルアクティビティホスト を参照してください。

  • リストデータソースと Data-Driven Exclusive Activity Host を使用して、データオブジェクトのコンテンツから Activities を持つUIの一部を作成できます。例えば、データソースでメニューのコンテンツを定義し、Data-Driven Exclusive Activity Host を使用してアプリケーション内にメニューを作成することができます。

    データ駆動型エクスクルーシブアクティビティホスト を参照してください。

Page ノードを Activity ノードに置き換えます。

アクティビティについて学ぶには、次を参照してください:

テキストレンダリングの変更

  • FontRuntime::getGlyphCache の戻り値の型を、GlyphCache の参照から GlyphCacheSharedPtr に変更しました。

  • GlyphRun は、GlyphRun::draw メソッドではなくコンストラクターで GlyphCache を受け取るようになり、GlyphCache::getTexture メソッドを通じてグリフキャッシュテクスチャを公開します。

  • TextFormat::draw のシグネチャを、マテリアルパラメーターの代わりにレンダーエントリーとコンテンツテクスチャハンドルを受け取るように変更しました。この関数は、マテリアルがすでにレンダーステートにバインドされていることを前提とするようになりました。

  • 以前に非推奨となった kanzi::StandardMaterial::GlyphTextureProperty プロパティタイプを削除しました。

  • FontManager::getRuntimeFont は、フォントファミリーパラメーターが空の場合、空のフォントを返す代わりに nullptr を返すことがあるようになりました。

モーフデータの変更

以前のバージョンの Kanzi では、Mesh を継承し、ブレンドの起点および終点となるモーフターゲットとして他のメッシュを参照する、個別の kanzi::Morph オブジェクトを使用していました。Kanzi バージョン 4.0.0-beta2 以降、モーフデータはベースメッシュに対する差分として表現されます。複数のメッシュの使用は廃止され、kanzi::Morph クラスの概念全体も削除されました。

メッシュには、差分データを含む内部の Mesh::MorphData オブジェクトを含めることができるようになりました。このデータには const kanzi::Mesh::MorphData* kanzi::Mesh::getMorphData() const でアクセスできます。シェイプ数が十分に少なく、一般的な 16 アトリビュートチャンネルの制限内に収まるモーフの場合、Kanzi Studio はメッシュデータを Mesh::MorphData 内の頂点バッファーブロブとしてエクスポートします。より多くのチャンネルを必要とするモーフデータは、使用するために選択されたモーフシェイプに基づいて、Model3D に直接割り当てられるデータテクスチャとして保存されます。

古いモーフ用の固定ユニフォーム 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 を使用してください。

削除されました

代わりに使用するもの

  • kanzi::Model3D::MorphRuntime (特殊化クラス)

  • kanzi::MorphWeightAnimationTimeline

CubeMapRenderPass の変更

CubeMapRenderPass はデプステクスチャを自動的に作成しなくなりました。デプステクスチャを作成するには、CubeMapRenderPass::DepthFormatProperty を設定します。

CubeMapRenderPass::DepthFormatProperty を設定するか、CubeMapRenderPass::DepthTargetProperty を使用してデプステクスチャを手動で設定しない限り、メモリを節約しパフォーマンスを向上させるために、Kanzi はデプスレンダーバッファを 1 つだけ使用します。Kanzi は、CubeMapRenderPass の各面でこのデプスレンダーバッファを再利用します。

タグの変更

ノードリストとタグが変化しない場合の、タグを使用した NodeList のフィルタリングのパフォーマンスが大幅に向上しました。変更が検出されない場合、フィルタリングフェーズを完全にスキップできます。

ノードにタグがあるかどうかを確認するには、PropertyObject::getProperty の代わりに kanzi::Node::hasTag を使用します。タグは引き続き論理値プロパティとして設定され、StateManager またはバインディングを使用してバインドおよび設定できます。これらのプロパティは継承されなくなり、タグの状態はノードヒエラルキー内で個別に管理されます。

タグには、関連付けられた変更フラグタイプ PropertyTypeChangeFlag::PropertyTypeChangeFlagTag が追加されました。このフラグは、プロジェクトのエクスポート時に Studio によって自動的に設定されます。タグの変更を有効にするには、既存のプロジェクトをエクスポートする必要があります。

ヘルパークラス kanzi::Tag は削除されました。新しいタグを作成したり既存のタグにアクセスしたりするには、Node::acquireTag を使用します。タグを操作するには、プロパティインターフェイスか、ヘルパー関数 Node::setTag および Node::removeTag を使用します。

テクスチャの変更

廃止された作成情報の型 kanzi::Texture::CreateInfoNode2DRenderTarget と Texture::CreateInfoRenderpassRenderTarget を削除しました。Texture::CreateInfoRenderTarget を使用してください。コンポジションに使用するテクスチャは、常に独自のフレームバッファを持つか、たとえば CompositionTargetRenderPass のように、Kanzi によって内部で単一のフレームバッファに統合されるようになりました。個別の作成シナリオは不要なため削除されました。

ライトプロパティの変更

以下のプロパティはライトノードから削除されました。代わりにカメラノードのプロパティを使用してください。

ライトノードから削除

代わりに使用するカメラノードのプロパティ

Shadow Projection Z Near

Z Near

Shadow Projection Z Far

Z Far

Shadow Projection Z Orthogonal Plane Size

Orthogonal Plane Size

プログレッシブレンダリングビューポート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 メンバーを削除しました。

削除されました

代わりに使用するもの

Application::getInputManager

Screen::getInputManager

FocusManager::createFocusScopeInfo

FocusScope::create

FocusManager::isFocusFence

FocusManager::getFocusScopeType

FocusManager::isFocusScope

FocusManager::getFocusScopeType

FocusManager::setFocusFence

FocusManager::setFocusScopeType

FocusManager::setFocusScope

FocusManager::setFocusScopeType

FocusManager::trySetActiveFocus

FocusManager::trySetFocus

FocusManager::tryMoveActiveFocus

FocusManager::tryMoveFocus

InputManipulator::getTouchEventRoutingMode

InputManipulator::getEventRoutingMode

InputManipulator::setTouchEventRoutingMode

InputManipulator::setEventRoutingMode

Keyboard

KeyManipulator

rayPickHitTest(const Vector2& limits, OverlayScope& scope, Scene* scene, Camera* camera, int x, int y)

rayPickHitTest

KzuInputTouchPoint

TouchPoint

Light::isEnabled

Node::isVisible

Light::setEnabled

Node::setVisible

Node2D::setLayoutSize

Node2D::setSize

collectResourceUrlsFromPrefabTemplateNodeResourceDictionaryUrls

使用不可

NodeComponent::NodeComponentMessageArguments

NodeComponent::NodeComponentTargetMessageArguments

InputManipulator::TouchEventRoutingMode

InputManipulator::EventRoutingMode

PopupScope

AutoClosingModalScope

関連項目

Kanzi 4.0.0 リリースノート

既知の問題