Kanzi でOpenGL ES 3.0+を使用する

Kanzi は、OpenGL ES 3.0、3.1、3.2 へのデプロイをサポートしています。マテリアル内のシェーダーの ソースコード は、デプロイターゲットにかかわらず、GLSL ES バージョン 310 以降の構文を使用する必要があります。Kanzi は、プロジェクトの Target Graphics API 設定に一致する GLSL ES 方言にシェーダーをクロスコンパイルします。OpenGL ES 3.0 以降では、整数テクスチャ、浮動小数点、マルチレンダーターゲットを使用できます。これにより、たとえばレンダリングされる画像の精度を高めたり、より見栄えの良いポストプロセスエフェクトを適用したり、テクスチャやキューブマップテクスチャに HDR を使用したり、シームレスなキューブマップを作成したりできます。OpenGL ES 3.1 では、さらにコンピュートシェーダー、イメージのロード/ストア、シェーダーストレージバッファオブジェクトを使用できます。OpenGL ES 3.2 では、ジオメトリシェーダーとテッセレーションシェーダーも使用できます。

OpenGL ES 3.0+を使用する前に、ターゲットプラットフォームがそのAPIバージョンをサポートしていることを確認してください。

Kanzi で使用する OpenGL ES のバージョンを選択するには:

  1. Kanzi Studio のメインメニューで Project > Properties を選択し、Target Graphics API をターゲットプラットフォームがサポートする OpenGL ES バージョン (OpenGL ES 3.0、OpenGL ES 3.1、または OpenGL ES 3.2) に設定します。

    ../../_images/project-properties.png ../../_images/target-graphics-api-opengl-es-30.png
  2. シェーダーソースファイルの最初の行に、OpenGL ES バージョンタグを追加します。

    Kanzi では、Target Graphics API にかかわらず、シェーダーソースコードのバージョンタグとして #version 310 es 以降が必要です。#version 300 es などの以前のタグは受け付けられません。Target Graphics API が OpenGL ES 3.0 に設定されている場合、ソースが GLSL ES 3.1 以降で導入された機能を使用していなければ、シェーダーはエクスポート時に #version 300 es にクロスコンパイルされます。

    • GLSL ES 3.1 より後に導入された機能を使用しないシェーダーには、次を追加します。

      #version 310 es
      
    • ジオメトリシェーダーまたはテッセレーションシェーダーの機能 (Target Graphics API に OpenGL ES 3.2 が必要) を使用するシェーダーには、次を追加します。

      #version 320 es
      

エクスポートするシェーダーファミリーの設定

Kanzi Studio は kzb ファイルをエクスポートするときに、Target Shader Family プロパティに列挙されたファミリー向けにシェーダーをコンパイルします。デフォルトでは、Kanzi Studio は OpenGL、OpenGL ES、Vulkan の3つのファミリーすべてに対してシェーダーをコンパイルします。kzb ファイルのサイズを小さくするには、ターゲットプラットフォームで使用しないファミリーを削除します。

Kanzi Studio が OpenGL および OpenGL ES ファミリーに使用する GLSL または GLSL ES のバージョンは、Target Graphics API 設定によって決まります。

注釈

Target Graphics API が Vulkan 1.2 の場合、Kanzi Studio は Target Shader Family の設定にかかわらず Vulkan SPIR-V シェーダーのみをエクスポートします。

エクスポートするシェーダーファミリーを設定するには:

  1. Kanzi Studio のメインメニューで Project > Properties を選択します。

  2. Binary Export カテゴリで Target Shader Family プロパティを設定します。Shader family をクリックして、含めるファミリーを選択します。

    • OpenGL — Kanzi Studio は OpenGL デスクトッププラットフォーム向けに GLSL シェーダーをコンパイルします。

    • OpenGL ES — Kanzi Studio は OpenGL ES のモバイルおよび組み込みプラットフォーム向けに GLSL ES シェーダーをコンパイルします。

    • Vulkan — Kanzi Studio は Vulkan プラットフォーム向けに SPIR-V シェーダーをコンパイルします。

    複数のファミリーを含めるには、メニューからそれぞれを選択します。Kanzi Studio は、選択したファミリーをプロパティフィールドにカンマ区切りのリストとして表示します。

    ../../_images/set-target-shader-family.png

テクスチャの色フォーマットの設定

Kanzi Studio プロジェクトに .dds 形式のHDRおよび浮動小数点画像をインポートし、これらの画像を使用するテクスチャのカラーフォーマットを設定できます。

テクスチャのカラーフォーマットを設定するには:

  1. Library > Resource Files > Images で、色フォーマットを設定したい画像を選択します。

    ../../_images/library-resource-files-images.png
  2. Properties で、設定します:

    • Target Format から Raw へ

    • Color Format in Raw を、Kanzi がテクスチャを解釈するために使用する色フォーマットに変更します。

    ../../_images/target-format-raw.png ../../_images/color-format-in-raw.png
  3. Library > Materials and Textures > Textures で、前のステップで色フォーマットを設定した画像を使用するテクスチャを選択します。Properties で、設定します:

    • Wrap Mode から Clamp へ

    • Mipmap Mode から Linear または Nearest へ

    ../../_images/mipmapmode-linear-wrap-mode-clamp.png

レンダーターゲットテクスチャのフォーマットを設定する

レンダーターゲットテクスチャのフォーマットを設定して、GPUが使用するターゲットピクセルフォーマットを定義します。

レンダーターゲットテクスチャの形式を設定するには:

  1. Library > Materials and Textures > Textures で、Render Target Texture を選択するか作成します。

  2. Properties で、使用したいターゲットピクセルフォーマットに Format を設定します。

    ../../_images/render-target-texture-es-30-format.png
  3. レンダーターゲットテクスチャが整数ターゲット形式の場合、Minification Filter および Magnification Filter プロパティを Nearest に設定してください。

ランタイムグラフィックスバックエンドの選択

Windows オペレーティングシステムでは、OpenGL ES、OpenGL、Vulkan のどれを使用するかを、Application::onConfigure 関数、application.cfg、またはコマンドラインアーギュメント (ターゲットがコマンドラインアーギュメントをサポートしている場合) で選択できます。

コマンドラインでは、以下を使用します。

  • OpenGL ES を使用する場合は --gles または --opengles

  • OpenGL を使用する場合は --gl または --opengl

  • Vulkan を使用する場合は --vk または --vulkan

  • EGL を使用する場合は --egl

  • WGL を使用する場合は --wgl

  • GLX を使用する場合は --glx

application.cfg で

SurfaceClientAPI = clientApi

GraphicsContextAPI = contextApi

Application::onConfigure で

configuration.defaultSurfaceProperties.clientAPI = clientApi;

configuration.defaultSurfaceProperties.contextAPI = contextApi;

値

clientApi

OpenGL ESを使用するには:

OpenGL を使用するには、

Vulkan を使用するには:

contextApi

WGL を使用するには、

EGL を使用するには、

GLX を使用するには、

application.cfg の例

# Sets the surface target for OpenGL rendering and WGL graphics context.
SurfaceClientAPI = gl
GraphicsContextAPI = wgl

Application::onConfigure の例

// Sets the surface target for OpenGL rendering and WGL graphics context.
configuration.defaultSurfaceProperties.clientAPI = SurfaceClientAPI::OpenGL;
configuration.defaultSurfaceProperties.contextAPI = GraphicsContextAPI::WGL;

AndroidエミュレーターでOpenGL ES 3.0を有効にする

OpenGL ES APIレベルが2.0より高いアプリケーションをAndroidエミュレーターにデプロイする場合、AndroidエミュレーターでOpenGL ES 3.0を有効にしてください。

AndroidエミュレーターでOpenGL ES 3.0を有効にするには:

  1. Android Studioで、Device Manager で、実行中の仮想デバイスに対して Extended Controls を選択します。

    ../../_images/android-studio-device-manager-extended-controls.png
  2. Extended Controls ウィンドウで、Settings > Advanced を選択します。OpenGL ES API level オプションを Renderer maximum (up to OpenGL ES 3.1) に設定します。

    ../../_images/extended-controls-settings-opengles-api-level.png
  3. 変更を適用するには、Android Emulator を再起動してください。

関連項目

テクスチャ (Textures)

レンダーターゲットテクスチャ (Render Target Texture) を使用する

シェーダー

シェーダーを編集する

アプリケーション構成リファレンス