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

bool beginComposition(Renderer3D& renderer, CompositionStack& compositionStack, CompositionManager* compositionManager, Vector2 requiredSize, bool alphaRequired, bool depthRequired, bool stencilRequired, bool drawFlagSet);

bool beginComposition(Renderer3D& renderer, CompositionStack& compositionStack, CompositionManager* compositionManager, const CompositionContentRequirements& requirements, bool drawFlagSet);

NodeCompositor2D::beginComposition を参照してください。

TextureSharedPtr beginFinalComposition(CompositionStack& compositionStack, CompositionManager* compositionManager, Vector2 requiredSize, bool alphaRequired, bool depthRequired, bool stencilRequired, bool needsRender);

TextureSharedPtr beginFinalComposition(CompositionStack& compositionStack, CompositionManager* compositionManager, const CompositionContentRequirements& requirements, bool needsRender);

NodeCompositor2D::beginFinalComposition を参照してください。

void updateRender(Node2D& node, Vector2 actualSize, bool alphaRequired, bool depthRequired, bool stencilRequired, optional<int> blendMode, float opacity, bool translucencyHint);

void updateRender(Node2D& node, const CompositionContentRequirements& requirements, optional<int> blendMode, float opacity, bool translucencyHint);

NodeCompositor2D::updateRender を参照してください。

bool updatePersistentCompositionTarget(Node2D& node, TextureSharedPtr& managedCompositionTarget, Vector2 requiredSize, bool alphaRequired, bool depthRequired, bool stencilRequired);

bool updatePersistentCompositionTarget(Node2D& node, TextureSharedPtr& managedCompositionTarget, const CompositionContentRequirements& requirements);

NodeCompositor2D::updatePersistentCompositionTarget を参照してください。

NodeEffectRenderer2D クラスの変更:

Kanzi 3.9.6

Kanzi 3.9.7

void beginEffect(Renderer3D &renderer, CompositionStack& compositionStack, CompositionManager* compositionManager, const Matrix3x3& worldTransform, Vector2 requiredSize, bool alphaRequired, bool depthRequired,  bool stencilRequired);

void beginEffect(Renderer3D& renderer, CompositionStack& compositionStack, CompositionManager* compositionManager, const Matrix3x3& worldTransform, const CompositionContentRequirements& requirements);

NodeEffectRenderer2D::beginEffect を参照してください。

void beginEffectOverride(Renderer3D &renderer, CompositionStack& compositionStack, CompositionManager* compositionManager, const Matrix3x3& worldTransform, Vector2 requiredSize, bool alphaRequired, bool depthRequired,  bool stencilRequired);

void beginEffectOverride(Renderer3D& renderer, CompositionStack& compositionStack, CompositionManager* compositionManager, const Matrix3x3& worldTransform, const CompositionContentRequirements& requirements);

NodeEffectRenderer2D::beginEffectOverride を参照してください。

void beginInitialEffectPass(Renderer3D &renderer, CompositionStack& compositionStack, CompositionManager* compositionManager, bool alphaRequired, bool depthRequired, bool stencilRequired);

void beginInitialEffectPass(Renderer3D& renderer, CompositionStack& compositionStack, CompositionManager* compositionManager, const CompositionContentRequirements& requirements);

NodeEffectRenderer2D::beginInitialEffectPass を参照してください。

Kanzi Java API への変更

CallbackBindingProcessor

Kanzi Java API BindingProcessor は、NativeObject の代わりに KanziObject を継承するようになりました。これは、Kanzi Java API CallbackBindingProcessor.create が、CallbackBindingProcessor の代わりに ObjectRef<CallbackBindingProcessor> を返すようになったことを意味します。

列挙型プロパティのサポート

Kanzi Java API は、列挙型データ型のプロパティをサポートするようになりました。

  • セッターおよびゲッター関数では、整数の代わりに列挙型の値を使用できるようになりました。

    たとえば、以下を置き換えることができます

    textNode.setProperty(TextBlock2D.FontHintingPreferenceProperty, 1); // FontHintingPreference::NativeHinting
    

    以下に置き換えます。

    textNode.setProperty(TextBlock2D.FontHintingPreferenceProperty, FontHintingPreference.NativeHinting);
    
  • KanziObject.getProperty では、列挙型プロパティのクラスを2番目のパラメーターとして提供する必要がなくなりました。

    たとえば、以下を置き換えることができます

    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.RenderMode

  • Node2D.RenderType

バインディングの設定と削除の変更

これらの関数の戻り値の型が AbstractBindingRuntimeSharedPtr から BindingRuntimeHandle に変更されました。

BindingRuntimeHandle -> 演算子は、AbstractBindingRuntime へのリンクを返します。この方法で、バインディングランタイム関数は同一に動作します。

グラフィックス出力とデスクトップの変更

Kanzi 3.9.7では、GBMウィンドウシステムを使用するプラットフォームで、Kanzi アプリケーションに使用するグラフィックスカードを設定できます。導入された改善点:

Kanzi 3.9.6

Kanzi 3.9.7

KANZI_COREUI_API GraphicsOutputSharedPtr makeLegacyGraphicsOutput(const struct KzsSurfaceProperties* surfaceProperties, const NativeWindowProperties* windowProperties);

KANZI_COREUI_API GraphicsOutputSharedPtr makeLegacyGraphicsOutput(const struct KzsSurfaceProperties* surfaceProperties, const NativeWindowProperties* windowProperties, const NativeDesktopProperties* desktopProperties);

makeLegacyGraphicsOutput を参照してください。

explicit LegacyGraphicsOutput(const struct KzsSurfaceProperties* surfaceProperties, const NativeWindowProperties* windowProperties);

explicit LegacyGraphicsOutput(const struct KzsSurfaceProperties* surfaceProperties, const NativeWindowProperties* windowProperties, const NativeDesktopProperties* desktopProperties);

LegacyGraphicsOutput::LegacyGraphicsOutput を参照してください。

KANZI_COREUI_API kzsError kzsDesktopCreate(struct KzsDesktop** out_desktop);

KANZI_COREUI_API kzsError kzsDesktopCreate(const kanzi::NativeDesktopProperties* desktopPropertiesRequested, struct KzsDesktop** out_desktop);

kzs_desktop.h::kzsDesktopCreate を参照してください。

KANZI_COREUI_API kzsError kzsDesktopNativeCreate(struct KzsDesktopNative** out_desktopNative);

KANZI_COREUI_API kzsError kzsDesktopNativeCreate(const kanzi::NativeDesktopProperties* desktopPropertiesRequested, struct KzsDesktopNative** out_desktopNative);

kzs_desktop.h::kzsDesktopNativeCreate を参照してください。

Javaコードビハインドの変更

Kanzi アプリケーションがAndroidテンプレートの1つに基づいており、そのアプリケーションの Kanzi Studio プロジェクトにJava Code Behindを追加したい場合は、アプリケーションを移行してください。

Kanzi アプリケーションを移行するには、

  1. Android Studioで、Kanzi アプリケーションのAndroidアプリケーションを開きます。メインメニューで File > Project Structure を選択します。Project Structure ウィンドウで、Project タブを選択し、次の設定を行います。

    • Android Gradle Plugin Version から 7.2.2 へ

    • Gradle Version から 7.3.3 へ

    OK をクリックします。

    ../../_images/migration-java-code-behind-project.png
  2. app/src/main/AndroidManifest.xml で、manifest 要素から package 属性を削除します。

    たとえば、変更

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.myapplication">
    

    終点

    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
    
  3. app/build.gradle で、android スコープに namespace プロパティを追加します。

    新しいツールでは、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 クラスを削除しました。

    すべてのブラシ (Brushes) がレンダー値の格納に kanzi::GlRenderState を使用するようになったため、RenderValuePropertyNotificationHandler メンバーは不要になりました。Kanzi は、レンダーステート内でプロパティ (Properties) をユニフォーム (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() に置き換えてください。

関連項目

Kanzi 3.9.7 リリースノート

既知の問題