Using OpenGL ES 3.0 in Kanzi

Kanzi supports the OpenGL ES 3.0 shading language (GLSL ES version 300). With OpenGL ES 3.0 you can use integer textures, floating point and multiple render targets. For example, this allows you to have more precision with the rendered images, you can apply better looking post-processing effects, use HDR for textures and cubemap textures, and create seamless cubemaps.

Before you use OpenGL ES 3.0 make sure that your target platform supports OpenGL ES 3.0.

To use OpenGL ES 3.0 in Kanzi:

  • In the Project > Properties set the Target Graphics API to OpenGL ES 3.

    ../../_images/project-properties.png ../../_images/target-graphics-api-opengl-es-30.png
  • Add as the first line of vertex and fragment shaders the OpenGL ES 3.0 version tag

    #version 300 es
    

Setting color format of textures

You can import to your Kanzi Studio project HDR and floating point images in .dds format and set the color format of textures which use these images.

To set the color format of textures:

  1. In the Project > Properties set the Target Graphics API to OpenGL ES 3.

    ../../_images/project-properties.png ../../_images/target-graphics-api-opengl-es-30.png
  2. In the Library > Resource Files > Images select the image the color format of which you want to set.

    ../../_images/library-resource-files-images.png
  3. In the Properties set the Target Format property to Raw.

    ../../_images/target-format-raw.png
  4. In the Properties set the Color Format in Raw property to the color format you want Kanzi to use to interpret the texture.

    ../../_images/color-format-in-raw.png
  5. In the Library > Materials and Textures > Textures select the texture that uses the image the color format of which you set in the previous steps, and in the Properties set:

    • Wrap Mode to Clamp

    • Mipmap Mode to Linear or Nearest

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

Setting the format of a render target texture

Set the format of a render target texture to define the target pixel format used by the GPU.

To set the format of a render target texture:

  1. In the Project > Properties set the Target Graphics API to OpenGL ES 3.

    ../../_images/project-properties.png ../../_images/target-graphics-api-opengl-es-30.png
  2. In the Library > Materials and Textures > Textures select or create a Render Target Texture.

  3. In the Properties in Texture Settings set the Format to the target pixel format you want to use.

    ../../_images/render-target-texture-es-30-format.png
  4. If your render target textures are in integer target format, set the Minification Filter and Magnification Filter properties to Nearest.

Selecting runtime graphics backend

On the Windows operating system you can select whether you want to use OpenGL ES or OpenGL in the Application::onConfigure() function, in the application.cfg, or using the command line arguments, if your target supports command line arguments.

On the command line use:

  • -gles to use OpenGL ES

  • -gl to use OpenGL

  • -egl to use EGL

  • -wgl to use WGL

In application.cfg

GraphicsBackend = type

In onConfigure()

configuration.defaultSurfaceProperties.type = type;

configuration.defaultSurfaceProperties.contextApi = contextAPI;

Values

type

To use OpenGL ES and set the graphics context to EGL:

  • In application.cfg use gles.

  • In onConfigure() use KZS_SURFACE_TYPE_GLES_ONLY.

To use OpenGL and set the graphics context to WGL:

  • In application.cfg use opengl.

  • In onConfigure() use KZS_SURFACE_TYPE_GL_ONLY.

contextAPI

  • To use WGL, in onConfigure() use KZS_GRAPHICS_CONTEXT_API_WGL.

  • To use EGL, in onConfigure() use KZS_GRAPHICS_CONTEXT_API_EGL.

  • To use GLX, in onConfigure() use KZS_GRAPHICS_CONTEXT_API_GLX.

application.cfg example

# Sets the surface target for OpenGL rendering and WGL graphics context.
GraphicsBackend = opengl

onConfigure() example

// Sets the surface target for OpenGL rendering and WGL graphics context.
configuration.defaultSurfaceProperties.type = KZS_SURFACE_TYPE_GL_ONLY;