Application configuration reference

You can configure your Kanzi application:

While you can configure your Kanzi application in the onConfigure() function, in application.cfg you can configure some parameters without recompiling your application or even without a C++ application. The configuration you specify in application.cfg overrides the configuration you specify in onConfigure().

For example, in application.cfg you can tell your Kanzi application which kzb file to load, enable performance information in your application, and set how many threads you want to use for loading the application resources.

See Configuring your application.

You can use these application configuration settings.

Loading
  BinaryName
moduleNames
LoadingThreadCount
UseMemoryMappedLoading

Performance
  ApplicationIdleState
MaximumFPS
PerformanceInfoLevel

Glyph cache texture size
  GlyphCacheHeight
GlyphCacheWidth
Graphics performance logging
  GraphicsLoggingEnabled
extensionOutputEnabled
informationOutputEnabled
propertyOutputEnabled

Graphics library
  GraphicsBackend
GraphicsContextAPI

Surface properties
  SurfaceBitsStencil
SurfaceBitsDepthBuffer
SurfaceBitsRed
SurfaceBitsGreen
SurfaceBitsBlue
SurfaceBitsAlpha
SurfaceBitsPadding
SurfaceSamplesAntialiasing
SurfaceSwapBehavior
Application window position and size
  WindowX
WindowY
WindowWidth
WindowHeight
DefaultDisplayIndex
WindowOrder

Application window style
  WindowStyle

Screen orientation and input event handling
  defaultEventSourceProperties.orientation
defaultEventSourceProperties.transformation
defaultEventSourceProperties.translation

Input event devices on Linux
  InputEventDevice

Loading

BinaryName

You can set which kzb file or configuration file your Kanzi application loads when you launch your Kanzi application.

See Using kzb files.

In application.cfg BinaryName = "name"
In onConfigure() configuration.binaryName = "name";
Value
name Path to a single kzb file, or to the binary configuration file listing all kzb files that your Kanzi application loads.
application.cfg example

# Loads the kzb file named MyApplication.kzb.
BinaryName = "MyApplication.kzb"

# Loads the binary configuration file MyApplicationKzbs.cfg that lists
# all kzb files that your Kanzi application loads.
BinaryName = "MyApplication.kzb.cfg"

onConfigure() example

// Loads kzb file named MyApplication.kzb.
configuration.binaryName = "MyApplication.kzb";

// Loads the binary configuration file MyApplicationKzbs.cfg that lists
// all kzb files that your Kanzi application loads.
configuration.binaryName = "MyApplication.kzb.cfg";

moduleNames

You can set which plugins your Kanzi application loads when you launch your Kanzi application.

You can set the list of plugin names only in the Application::onConfigure() function.

In onConfigure() configuration.moduleNames = names;
Values
names List of plugins to load. Enclose the list of plugin names in curly braces and separate a list of several names with a comma.
onConfigure() example
// Loads the plugin DLL files MyPlugin1.dll and MyPlugin2.dll. 
configuration.moduleNames = {"MyPlugin1", "MyPlugin1"};

LoadingThreadCount

When users run your Kanzi application in an environment with a multi-core processor, Kanzi automatically uses multiple CPU cores to load the GPU resources in the kzb files to RAM. See Loading resources in parallel.

GPU resources Kanzi loads in parallel include all types of textures, shaders, and meshes. To deploy these resources from RAM to GPU memory and to load prefab templates, Kanzi always uses the main thread. See Images and textures best practices, Shaders best practices, Meshes best practices.

In application.cfg LoadingThreadCount = threads
In onConfigure() configuration.loadingThreadCount = threads;
Values
threads Number of CPU cores used for loading the resources. The default value is 3.
application.cfg example
# Switches off the use of multiple cores for loading your application.
# Loads your application resources using the main thread.
LoadingThreadCount = 0
# Uses six threads to load your application.
LoadingThreadCount = 5
onConfigure() example
// Switches off the use of multiple cores for loading your application.
// Loads your application resources using the main thread.
configuration.loadingThreadCount = 0;
// Uses six threads to load your application.
configuration.loadingThreadCount = 5;

UseMemoryMappedLoading

When running your Kanzi application on an operating system that supports memory mapping of files, you can enable memory mapped loading for the kzb files your Kanzi application uses. When you enable memory mapped loading you can reduce the loading times of your Kanzi application because it reduces the amount of file accesses.

Memory mapping of files is supported, for example, on Windows, Linux, and QNX operating systems. Before enabling memory mapped loading, check that it is supported on the platform running your Kanzi application.

To check whether memory mapped loading is supported on your platform, call the kzsMemoryMappedFileIsSupported() function. The function returns True if memory mapped loading is supported, and False if it is not supported.

If you enable memory mapped loading on a platform that does not support this feature, Kanzi shows a warning and uses regular file access for loading the kzb files.

In application.cfg UseMemoryMappedLoading = value
In onConfigure() configuration.useMemoryMappedLoading = value;
Values
0 Disable the memory mapped loading. Default value.
1 Enable the memory mapped loading.
application.cfg example
# Enables the memory mapped loading for the kzb files in your Kanzi application.
UseMemoryMappedLoading = 1
onConfigure() example
// Enables the memory mapped loading for the kzb files in your Kanzi application.
configuration.useMemoryMappedLoading = 1;

Performance

ApplicationIdleState

Kanzi suspends the main loop when there is no input, tasks, timers, animations, or when there is nothing in the application that updates the rendering. See Application idle state.

When using application idle state, consider these use cases:

In application.cfg ApplicationIdleState = value
In onConfigure() configuration.applicationIdleStateEnabled = value;
Values
0 Disable the application idle state.
1 Enable the application idle state. Default value.
application.cfg example
# Disables the application idle state.
ApplicationIdleState = 0
onConfigure() example
// Disables the application idle state.
configuration.applicationIdleStateEnabled = 0;

MaximumFPS

You can limit the number of frames rendered per second by setting the maximum frame rate.

If your Kanzi application is showing an animation, Kanzi by default throttles the CPU to the maximum FPS. If there are no animations, Kanzi sets the application to idle state. For this reason to conserve the CPU and power, Kanzi by default limits the maximum frame rate to 60 frames per second. Use the application configuration to set the maximum frame rate for your application.

See PerformanceInfoLevel.

In application.cfg MaximumFPS = limit
In onConfigure() configuration.frameRateLimit = limit;
Value
limit The maximum frame rate of the application in frames per second.
application.cfg example
# Sets the maximum application frame rate to 32 frames per second.
MaximumFPS = 32
# Disables the limit.
MaximumFPS = 0
onConfigure() example
// Sets the maximum application frame rate to 32 frames per second.
configuration.frameRateLimit = 32;
// Disables the limit.
configuration.frameRateLimit = 0;

PerformanceInfoLevel

You can enable the display of Performance HUD that shows the performance information for your Kanzi application. Use the Performance HUD to see how your application performs on target devices and to find performance bottlenecks.

Performance HUD shows this performance information for your Kanzi application:

See Best practices.

In application.cfg PerformanceInfoLevel = level
In onConfigure() configuration.performanceInfoLevel = ApplicationProperties::level;
Values
level

The level of display of performance information.

To disable the display of the Performance HUD:

  • In application.cfg use 0. Default value.
  • In onConfigure() use PerformanceInfoLevelDisabled. Default value.

To enable the display of the frames rendered per second (FPS):

  • In application.cfg use 1.
  • In onConfigure() use PerformanceInfoLevelFPS.

To enable the display of the full Performance HUD:

  • In application.cfg use 2.
  • In onConfigure() use PerformanceInfoLevelFull.
application.cfg example
# Enables the full Performance HUD in a Kanzi application.
PerformanceInfoLevel = 2
onConfigure() example
// Enables the full Performance HUD in a Kanzi application.
configuration.performanceInfoLevel = ApplicationProperties::PerformanceInfoLevelFull;

Glyph cache texture size

When you use a Text Block Kanzi creates a glyph cache texture for every font and font size combination. You can set the height and width of glyph cache textures to adjust the size of the glyph cache texture either when it gets full, or to optimize the performance of your Kanzi application.

Because larger glyph cache textures use more VRAM, try different sizes before you set the final size . The upper limit of the glyph cache texture size depends on the GPU, but usually it is 2048 by 2048 pixels. The default size of the glyph cache texture is 512 by 512 pixels.

Kanzi applies the size of the glyph cache texture to all glyph cache textures.

In application.cfg GlyphCacheHeight = size
GlyphCacheWidth = size
In onConfigure() configuration.glyphCacheHeight = size;
configuration.glyphCacheWidth = size;
Values
size Size of the glyph cache texture in pixels. The default value is 512.
application.cfg example
# Sets the glyph cache texture height to 768, and width to 1024 pixels.
GlyphCacheHeight = 768
GlyphCacheWidth = 1024
onConfigure() example
// Sets the glyph cache texture height to 768, and width to 1024 pixels.
configuration.glyphCacheHeight = 768;
configuration.glyphCacheWidth = 1024;

Graphics performance logging

GraphicsLoggingEnabled

You can enable Kanzi to print to the debug console the graphics API calls of your application in the Application::onConfigure() function, in the application.cfg, or using the command line argument, if your target supports command line arguments.

On the command line use:

In application.cfg GraphicsLoggingEnabled = value
In onConfigure() configuration.graphicsLoggingEnabled = value;
Values
0 Disable the logging of the graphics API calls. Default value.
1 Enable the logging of the graphics API calls.
application.cfg example
# Enables the logging of the graphics API calls.
GraphicsLoggingEnabled = 1
onConfigure() example
// Enables the logging of the graphics API calls.
configuration.graphicsLoggingEnabled = 1;

extensionOutputEnabled

You can enable Kanzi to print to the debug console a list of the graphics-related extensions on application startup.

You can enable the logging of the graphics extensions only in the Application::onConfigure() function.

In onConfigure() configuration.extensionOutputEnabled = value;
Values
0 Disable the logging of the graphics-related extensions. Default value.
1 Enable the logging of the graphics-related extensions.
onConfigure() example
// Enables the logging of the graphics-related extensions.
configuration.extensionOutputEnabled = 1;

informationOutputEnabled

You can enable Kanzi to print to the debug console this graphics-related information on application startup:

You can enable the logging of the graphics-related information only in the Application::onConfigure() function.

In onConfigure() configuration.informationOutputEnabled = value;
Values
0 Disable the logging of the graphics-related information. Default value.
1 Enable the logging of the graphics-related information.
onConfigure() example
// Enables the logging of the graphics-related information.
configuration.informationOutputEnabled= 1;

propertyOutputEnabled

You can enable Kanzi to print to the debug console these graphics-related properties on application startup:

You can enable the logging of the graphics-related properties only in the Application::onConfigure() function.

In onConfigure() configuration.propertyOutputEnabled = value;
Values
0 Disable the logging of the graphics-related properties. Default value.
1 Enable the logging of the graphics-related properties.
onConfigure() example
// Enables the logging of the graphics-related properties.
configuration.propertyOutputEnabled= 1;

Graphics library

You can select whether you want to use ES or GL 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:

In application.cfg GraphicsBackend = type
GraphicsContextAPI = contextAPI
In onConfigure() configuration.defaultSurfaceProperties.type = type;
configuration.defaultSurfaceProperties.contextApi = contextAPI;
Values
type

To use OpenGLES 2.0:

To use OpenGL:

contextAPI

To use WGL:

To use EGL:

To use GLX, in onConfigure() use KZS_GRAPHICS_CONTEXT_API_GLX.

application.cfg example
# Sets the surface target for OpenGLES 2.0 rendering and EGL graphics context.
GraphicsBackend = GLESGraphicsContextAPI = EGL
onConfigure() example
// Sets the surface target for OpenGLES 2.0 rendering and EGL graphics context.
configuration.defaultSurfaceProperties.type = KZS_SURFACE_TYPE_ES2_ONLY;
configuration.defaultSurfaceProperties.contextApi = KZS_GRAPHICS_CONTEXT_API_EGL;

Surface properties

Surface properties control the properties of the hardware accelerated graphics surface on which Kanzi renders. They control the relation between image quality and rendering speed. The surface properties you set are considered requests to be matched by the graphics system of the target hardware. Whether a given request is considered an upper bound, a lower bound, or an exact value is platform dependent.

The default values of surface properties are platform dependent. You can get them by calling kzsSurfaceGetDefaultProperties().

In application.cfg

SurfaceBitsStencil = stencil
SurfaceBitsDepthBuffer = buffer
SurfaceBitsRed = red
SurfaceBitsGreen = green
SurfaceBitsBlue = blue
SurfaceBitsAlpha = alpha
SurfaceBitsPadding = padding
SurfaceSamplesAntialiasing = anti
SwapBehavior = swap

In onConfigure() configuration.defaultSurfaceProperties.bitsStencil = stencil;
configuration.defaultSurfaceProperties.bitsDepthBuffer = buffer;
configuration.defaultSurfaceProperties.bitsColorR = red;
configuration.defaultSurfaceProperties.bitsColorG = green;
configuration.defaultSurfaceProperties.bitsColorB = blue;
configuration.defaultSurfaceProperties.bitsAlpha = alpha;
configuration.defaultSurfaceProperties.bitsPadding = padding;
configuration.defaultSurfaceProperties.antiAliasing = anti;
configuration.defaultSurfaceProperties.swapBehaviorCopy = swap;
configuration.defaultSurfaceProperties.priority = priority;
Values
stencil Size of the stencil buffer in bits.
buffer Size of the depth buffer in bits.
red Size of the red color channel in bits.
green Size of the green color channel in bits.
blue Size of the blue color channel in bits.
alpha Size of the alpha channel in bits.
padding Size of the padding in bits that is added to the application window.
Setting the padding size is supported only on the QNX operating system.
anti Number of anti-aliasing samples used.
swap During the swap buffer, are the buffers swapped or copied. Use 1 for copy, 0 for swap, KZS_SURFACE_PROPERTY_DONT_CARE for automatic selection. Default value is 0 (swap).
priority Enables the creation of EGL content with a priority hint. The default value is KZS_SURFACE_PROPERTY_DONT_CARE, which does not apply the priority. You can set the priority only in the onConfigure() function.
application.cfg example

# An example configuration for a typical high-speed rendering application
SurfaceBitsStencil = 1
SurfaceBitsDepthBuffer = 16
SurfaceBitsRed = 5
SurfaceBitsGreen = 6
SurfaceBitsBlue = 5
SurfaceBitsAlpha = 0
SurfaceSamplesAntialiasing = 0

# An example configuration for a high image quality application
SurfaceBitsStencil = 8
SurfaceBitsDepthBuffer = 24
SurfaceBitsRed = 8
SurfaceBitsGreen = 8
SurfaceBitsBlue = 8
SurfaceBitsAlpha = 8
SurfaceSamplesAntialiasing = 4

onConfigure() example

// An example configuration for a typical high-speed rendering application
configuration.defaultSurfaceProperties.bitsStencil = 1;
configuration.defaultSurfaceProperties.bitsDepthBuffer = 16;
configuration.defaultSurfaceProperties.bitsColorR = 5;
configuration.defaultSurfaceProperties.bitsColorG = 6;
configuration.defaultSurfaceProperties.bitsColorB = 5;
configuration.defaultSurfaceProperties.bitsAlpha = 0;
configuration.defaultSurfaceProperties.antiAliasing = 0;

// An example configuration for a high image quality application
configuration.defaultSurfaceProperties.bitsStencil = 8;
configuration.defaultSurfaceProperties.bitsDepthBuffer = 24;
configuration.defaultSurfaceProperties.bitsColorR = 8;
configuration.defaultSurfaceProperties.bitsColorG = 8;
configuration.defaultSurfaceProperties.bitsColorB = 8;
configuration.defaultSurfaceProperties.bitsAlpha = 8;
configuration.defaultSurfaceProperties.antiAliasing = 4;

Application window position and size

You can set the position of the application on the screen relative to the upper-left corner of the screen and the size of the application window in pixels. The default size of the window is 640x480 pixels and center of the device screen.

When you run your Kanzi application in full-screen mode on a system with more than one display, you can set the default display where your Kanzi application window appears.

Note that in order to use the default application display, you have to set the window style of your Kanzi application to full-screen.

To make the application window fixed size, resizable, fullscreen, or without borders, see Application window style.

In application.cfg WindowX = positionX
WindowY = positionY
WindowWidth = width
WindowHeight = height
DefaultDisplayIndex = index
WindowOrder = order
In onConfigure() configuration.defaultWindowProperties.x = positionX;
configuration.defaultWindowProperties.y = positionY;
configuration.defaultWindowProperties.width = width;
configuration.defaultWindowProperties.height = height;
configuration.defaultWindowProperties.defaultDisplayIndex = index;
configuration.defaultWindowProperties.order = order;
Value
positionX Horizontal position of the top-left corner of the application window from the top-left corner of the screen in pixels. Use 0 to position the window to the left of the device screen.
positionY Vertical position of the top-left corner of the application window from the top-left corner of the screen in pixels. Use 0 to position the window to the top of the device screen.
width Window width in pixels.
height Window height in pixels.
index Index number of the display. Default value is 0.
order Z-order of the application window. The value is target platform dependent. The default value is NativeWindowProperties::WindowPositionUnspecified, which does not apply the order.
application.cfg example
# Set the width to 1280 and height to 720 pixels and place it 100 pixels
# from the top and 1 pixel from the left side of the device screen.
WindowWidth = 1280
WindowHeight = 720
WindowX = 100
WindowY = 1
# Place the application window in the top-left corner of the device screen.
WindowX = 0
WindowY = 0
# Sets the second display as the default display for the full-screen application window.
DefaultDisplayIndex = 1
# On Windows, places the application window on top of other windows.
WindowOrder = 0
onConfigure() example
// Set the width to 1280 and height to 720 pixels and place it 100 pixels
// from the top and 1 pixel from the left side of the device screen.
configuration.defaultWindowProperties.width = 1280;
configuration.defaultWindowProperties.height = 720; configuration.defaultWindowProperties.x = 100; configuration.defaultWindowProperties.y = 1;
// Place the application window in the top-left corner of the device screen.
configuration.defaultWindowProperties.x = 0;
configuration.defaultWindowProperties.y = 0;
// Sets the second display as the default display for the full-screen application window.
configuration.defaultWindowProperties.defaultDisplayIndex = 1;
// On Windows, places the application window on top of other windows.
configuration.defaultWindowProperties.order = 0;

Application window style

You can set the style of the window of your Kanzi application. Besides the default window with a border that users can resize, you can set your Kanzi application to launch in a window without a border, in a window of fixed size, and in a window that occupies the entire device screen.

To set the position and size of the application window, see Application window position and size.

In application.cfg WindowStyle = "style"
In onConfigure() configuration.defaultWindowProperties.style = style;
Value
style

Window style (onConfigure() values in parenthesis):

application.cfg example

# Launch the application in a window that occupies the whole screen of the device.
WindowStyle = "fullscreen"

onConfigure() example
// Launch the application in a window that occupies the whole screen of the device.
configuration.defaultWindowProperties.style = KZS_WINDOW_STYLE_FULL_SCREEN;

Screen orientation and input event handling

You can configure the orientation of your application screen, and define how your application handles touch and pointer input. When you run your application on a device, you can set whether the application reacts to the pointer of the device, uses a touch screen, or both. You can set these properties only in the onConfigure() function.

In onConfigure() configuration.defaultEventSourceProperties.orientation = orientation;
configuration.defaultEventSourceProperties.transformation = transformation;
configuration.defaultEventSourceProperties.translation = translation;
Value
orientation

Orientation of the application screen:

transformation Transformation matrix of the application screen.
translation

Translation of pointer and touch events:

onConfigure() example
// Rotate the application screen by 180 degrees.
configuration.defaultEventSourceProperties.orientation = KZS_INPUT_ORIENTATION_ANGLE_180;
// Rotate an application screen sized 1280x720 pixels by 180 degrees.
configuration.defaultEventSourceProperties.transformation = Matrix3x3::createTranslation(1280, 720) * Matrix3x3::createRotationInDegrees(180.0f);
// Translate pointer events to touch events.
configuration.defaultEventSourceProperties.translation = KZS_INPUT_TRANSLATE_POINTER_TO_TOUCH;

Input event devices on Linux

You can configure the input event devices that Kanzi listens to on Linux ports where the native windowing system does not provide input device handling. This way Kanzi can listen to events directly from the input event devices provided by the operating system.
For example, in Vivante fbdev and WSEGL ports you can configure the input event devices that Kanzi listens to. In X11 and Wayland ports the native windowing system handles input devices.

Kanzi by default listens to all input event devices named eventN, where N is an integer, in the /dev/input directory.

In application.cfg InputEventDevice = path
In onConfigure() configuration.defaultEventSourceProperties.inputEventDevice = path;
Values
path Full path to one or more input event devices. Separate a list of several paths with a semicolon.
application.cfg example
# Listens to events from one input event device.
InputEventDevice = "/dev/input/event1"
# Listens to events from two input event devices.
InputEventDevice = "/dev/input/event0;/dev/input/event1"
# Disables listening to events from input event devices.
InputEventDevice = "none"
onConfigure() example
// Listens to events from one input event device.
configuration.defaultEventSourceProperties.inputEventDevice = "/dev/input/event1";
// Listens to events from two input event devices.
configuration.defaultEventSourceProperties.inputEventDevice = "/dev/input/event0;/dev/input/event1";
// Disables listening to events from input event devices.
configuration.defaultEventSourceProperties.inputEventDevice = "none";

See also

Configuring your application

Best practices

Loading resources in parallel

Using kzb files