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-properties8.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-properties8.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-images1.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-properties8.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

  • -glx to use GLX

In application.cfg

SurfaceClientAPI = clientApi

GraphicsContextAPI = contextApi

In onConfigure()

configuration.defaultSurfaceProperties.clientAPI = clientApi;

configuration.defaultSurfaceProperties.contextAPI = contextApi;

Values

clientApi

To use OpenGL ES:

  • In application.cfg use gles.

  • In onConfigure() use SurfaceClientAPI::OpenGLES.

To use OpenGL:

  • In application.cfg use gl.

  • In onConfigure() use SurfaceClientAPI::OpenGL.

contextApi

To use WGL:

  • In application.cfg use wgl.

  • In onConfigure() use GraphicsContextAPI::WGL.

To use EGL:

  • In application.cfg use egl.

  • In onConfigure() use GraphicsContextAPI::EGL.

To use GLX:

  • In application.cfg use glx.

  • In onConfigure() use GraphicsContextAPI::GLX.

application.cfg example

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

onConfigure() example

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