在 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 及更高版本中,您可以使用整数纹理、浮点数和多个渲染目标。例如,这让您可以获得更高精度的渲染图像,应用效果更好的后处理效果,为纹理和 cubemap 纹理使用 HDR,以及创建无缝 cubemaps。在 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 版本标签添加为第一行。

    无论您的 Target Graphics API 是什么,Kanzi 都要求着色器源代码中的版本标签为 #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。要减小 kzb 文件的大小,请移除您的目标平台不使用的系列。

Kanzi Studio 为 OpenGL 和 OpenGL ES 系列使用的 GLSL 或 GLSL ES 版本取决于 Target Graphics API 设置。

备注

当 Target Graphics API 为 Vulkan 1.2 时,无论 Target Shader Family 设置如何,Kanzi Studio 都只导出 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

设置纹理的颜色格式

您可以将 .dds 格式的 HDR 和浮点图像导入到您的 Kanzi Studio 项目中,并设置使用这些图像的纹理的颜色格式。

要设置纹理的颜色格式:

  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 操作系统上,您可以在 Application::onConfigure 函数中、application.cfg 中或使用命令行参数(如果您的目标支持命令行参数)选择要使用 OpenGL ES、OpenGL 还是 Vulkan。

在命令行使用:

  • --gles 或 --opengles 以使用 OpenGL ES

  • --gl 或 --opengl 以使用 OpenGL

  • --vk 或 --vulkan 以使用 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

当您将使用高于 2.0 的 OpenGL ES API 级别的应用程序部署到 Android Emulator 时,请在 Android Emulator 中启用 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)

使用渲染目标纹理

着色器 (Shaders)

编辑着色器

应用程序配置参考