# Candera V3.4.0

Release Date: May 2017  
  
To keep backwards compatibility for any interface change in the public API the old interface has been kept and marked as deprecated. The deprecated interfaces will be removed in future versions. Compiler warnings will be generated when using a deprecated interface through the usage of Candera Macro CANDERA\_DEPRECATED\_3\_4\_0.

# Candera/FeatStd CMake Build System Changes

Added flags:

<div class="contents" id="bkmrk-name-description-pos"><div class="contents"><div class="textblock"><table border="1" cellpadding="5" cellspacing="0" style="width: 100%;"><tbody><tr bgcolor="#d4d4d4"><td class="align-center" style="width: 33.3745%;">**Name**</td><td class="align-center" style="width: 56.8591%;">**Description**</td><td class="align-center" style="width: 9.76636%;">**Possible values**</td></tr><tr><td style="width: 33.3745%;">MONITOR\_FRAME\_DEBUGGER\_ENABLED</td><td style="width: 56.8591%;">Enables basic frame debugger (frame timeline capture, single step mode, no OpenGL specific features).</td><td style="width: 9.76636%;">ON/OFF</td></tr><tr><td style="width: 33.3745%;">MONITOR\_FRAME\_DEBUGGER\_OPENGL\_CAPTURE\_ENABLED</td><td style="width: 56.8591%;">Enables OpenGL specific Frame Debugger features.</td><td style="width: 9.76636%;">ON/OFF</td></tr></tbody></table>

---

</div></div></div>

# Candera Engine 3D

#### Uniformbuffers for Light and Material

[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") [Light](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_light.html "A Node that represents different kinds of light sources. Light sources are used to determine the colo...") and [Material](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_material.html "The class Material describes the color attributes of an object's surface and is primarily used for li...") parameters are now passed as uniform buffers to shaders whenever possible. The [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") reference shader include files have been updated so that any existing shader using Candera's [Light](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_light.html "A Node that represents different kinds of light sources. Light sources are used to determine the colo...") and/or [Material](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_material.html "The class Material describes the color attributes of an object's surface and is primarily used for li...") automatically benefits from this new feature without any change necessary. The [Renderer::Statistics](http://dev.doc.cgistudio.at/APILINK/struct_candera_1_1_renderer_1_1_statistics.html) has been enhanced by the number of instantiated uniform buffer objects and the number of uniform buffer objects that were updated.

<div class="contents" id="bkmrk-"><div class="contents"><div class="textblock">---

</div></div></div>#### Renderer Statistics Overlay

This feature enables the user to draw renderer statistics data into a render target for diagnostic purposes. A common case would be to draw it every frame after rendering all objects so that it constitutes an overlay presenting relevant rendering data to the user in realtime. The color of the overlay's text and values can be configured separately, as well es the properties of the appearance used to draw the overlay. Added the ability to draw only parts of a [VertexBuffer](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_vertex_buffer.html "The VertexBuffer encapsulates the attributes of an uploaded VertexGeometry. It holds the actual handl...") to RenderDevice.

<div class="contents" id="bkmrk-see-also%3A-rendererst"><div class="contents"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[RendererStatisticsOverlay](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_renderer_statistics_overlay.html "RendererStatisticsOverlay renders statistics data from the Renderer to the given renderTarget using t...").</dd></dl>---

</div></div></div>#### New 3D Animation Property Setters

New animation property setters have been implemented for the Viewport ([Camera::GetViewport](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_camera.html#a1f3545f5d90d39d1d2dc8b2c0ef3daee)) and ScissorRectangle ([Camera::GetScissorRectangle](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_camera.html#a2abb508330ae5ac29e3353527f277267)) properties of a [Camera](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_camera.html "A Camera provides Modelview and Projection matrices. Camera is a Transformable.* The eye point is set...") object from a 3D [Scene](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_scene.html "The class Scene represents a top level scene graph node. Multiple Scenes are allowed. A Scene can not be part of any other Scene. To render a Scene, at least one Camera must be part of this Scene and the Camera must have rendering enabled. A Scene can have more than one Camera. Note: Lights added to a Scene apply for that Scene only and do not affect 3D objects in any other Scene."). The corresponding classes for these are [Animation::CameraViewportPropertySetter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_animation_1_1_camera_viewport_property_setter.html "A PropertySetter that sets the "Viewport" property of a Camera.") and [Animation::CameraScissorRectanglePropertySetter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_animation_1_1_camera_scissor_rectangle_property_setter.html "A PropertySetter that sets the "ScissorRectangle" property of a Camera.").

A new animation property setter has been implemented also for the vertex rectangle property of renderable canvas objects. The corresponding class for this is [Animation::CanvasVertexRectanglePropertySetter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_animation_1_1_canvas_vertex_rectangle_property_setter.html "A PropertySetter that sets the "VertexRectangle" property for a CanvasRenderable.").

<div class="contents" id="bkmrk--0"><div class="contents"><div class="textblock">---

</div></div></div>#### Transform Feedback

[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") 3.4.0 supports transform feedback on OpenGL ES3.0 platforms. This feature enables the user to utilize the vertex processing unit of the GPU to perform calculations and reuse the results. This can be used for debugging vertex transformations, speed up particle systems, or reuse skinned mesh data for physics calculations.

<div class="contents" id="bkmrk--1"><div class="contents"><div class="textblock">---

</div></div></div>#### Pixel Buffer Objects

[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") 3.4.0 supports pixel buffer objects on OpenGL ES3.0 platforms. This feature can be used transfer data to and from video memory asynchronously. The [Renderer::Statistics](http://dev.doc.cgistudio.at/APILINK/struct_candera_1_1_renderer_1_1_statistics.html) has been enhanced by the number of instantiated pixel buffer objects.

<div class="contents" id="bkmrk-see-also%3A-renderer%3A%3A"><div class="contents"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[Renderer::UploadPixelBuffer](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_renderer.html#a44d2919c242fbc6e8632701ab9db2726).</dd></dl>---

</div></div></div>#### Submesh

This version introduces the ability to draw a subset of a vertex buffer.

<div class="contents" id="bkmrk-see-also%3A-vertexbuff"><div class="contents"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[VertexBuffer::SetElementStart](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_vertex_buffer.html#a85adc3ef7c00f2f9490464bbfab9a4e8) and [VertexBuffer::SetElementCount](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_vertex_buffer.html#a29826a798925a0327dbfc9f8593d3d65).</dd></dl>---

</div></div></div>#### RenderMode Rasterizer Discard

The [RenderMode](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_render_mode.html "The class RenderMode is an Appearance component that encapsulates polygon-level and per-fragment comp...") now offers an option to discard rasterization. This means that vertex shaders are processed while fragment shaders are not. This is useful in conjunction with transform feedback. This feature is OpenGL ES3.0 only.

<div class="contents" id="bkmrk-see-also%3A-rendermode"><div class="contents"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[RenderMode::SetRasterizerDiscardEnabled](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_render_mode.html#a7bb5e6f00c034ca139a5d9e152edfb54).</dd></dl>---

</div></div></div>#### Hashes for RenderOrderBin Comparison

During runtime, the RenderOrderBins have been compared via String compare, which is very time consuming, especially if long names are used that differ only in the last letters. To reduce CPU time, hashes are used now (instead of IDs in order to not break the existing interface).

<div class="contents" id="bkmrk-see-also%3A-node%3A%3Agetr"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[Node::GetRenderOrderBinAssignmentHash](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_node.html#acd4ae8f0ee80509c563c55378d7d835c).</dd></dl></div></div>---

# Candera Engine 2D

#### Custom Effect Set

It is now possible to configure the list of Effects needed from an external source. For information on how to integrate this feature please refer to <span style="color: rgb(230, 126, 35);">[Custom Effect Set](https://doc316en.candera.eu/books/2d-effects/page/custom-effect-set)</span>.

<div class="contents" id="bkmrk-"><div class="contents"><div class="textblock">---

</div></div></div>#### New 2D Animation Property Setters

New animation property setters have been implemented for the Viewport ([Camera2D::GetViewport](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_camera2_d.html#aa0bd3e4c93fcd47d343937c97da6daeb)) and ScissorRectangle ([Camera2D::GetScissorRectangle](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_camera2_d.html#a98fdf99bed92ed41271a655e7efafca5)) properties of a [Camera2D](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_camera2_d.html "A camera defines the view to the scene. At least one Camera2D has to be added to a 2D scene graph and...") object. The corresponding classes for these are [Animation::Camera2DViewportPropertySetter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_animation_1_1_camera2_d_viewport_property_setter.html "A PropertySetter that sets the "Viewport" property of a Camera2D.") and [Animation::Camera2DScissorRectanglePropertySetter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_animation_1_1_camera2_d_scissor_rectangle_property_setter.html "A PropertySetter that sets the "ScissorRectangle" property of a Camera2D.").

New animation property setters have been implemented also for BoundingRectangle and ClippingRectangle properties of a [Node2D](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_node2_d.html "The class Node2D is an abstract base class for all 2D scene graph nodes.") object. The corresponding classes for these are [Animation::Node2DBoundingRectanglePropertySetter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_animation_1_1_node2_d_bounding_rectangle_property_setter.html "A PropertySetter that sets the "BoundingRectangle" property of a Node2D.") and [Animation::Node2DClippingRectanglePropertySetter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_animation_1_1_node2_d_clipping_rectangle_property_setter.html "A PropertySetter that sets the "ClippingRectangle" property of a Node2D.").

A new animation property setter has been implemented also for the Layout [Margin](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_margin.html "A non-zero margin applies space outside the element layout's width and height. The values can be set ...") property of 2D nodes. The corresponding class for this is [Animation::LayoutMarginsPropertySetter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_animation_1_1_layout_margins_property_setter.html "A PropertySetter that sets the "Margin" property used for layouting the associated Node2D...").

<div class="contents" id="bkmrk--0"><div class="contents"><div class="textblock">---

</div></div></div>#### New Math2D Functions

[Math2D::TransformScreenToWorld](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_math2_d.html#a1c4bc540c491d53c328cd0d692b833a0) accepts a camera object and a position in screen space. It returns the corresponding position in the world space.   
[Math2D::TransformScreenToObject](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_math2_d.html#a39fd5ce8beeb3575d5c21773d7d3cb68) accepts a camera object, a position in screen space and an object. It returns the corresponding position in the provided object's space.

<div class="contents" id="bkmrk--1"><div class="contents"><div class="textblock">---

</div></div></div>#### Option to inherit the Layout Direction or to use the Culture

Previously the AutomaticDirection resulted in an inherited layout direction.   
As a consequence the layout stayed fix at either left-to-right or right-to-left once a specific layout direction has been choosen on a node for the complete sub tree.

Hence, two additional options for the layout direction have been introduced:

<div class="contents" id="bkmrk-inheritdirection%3A-ta"><div class="contents"><div class="textblock">- InheritDirection: take the parent layout direction.
- CultureDirection: take the culture specific layout direction.

</div></div></div>Now it is possible to change the setting again to the culture specific layout direction. For backward compatibility the AutomaticDirection will be by default interpreted as InheritDirection.

<div class="contents" id="bkmrk-see-also%3A-2d-layout."><div class="contents"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[2D Layout](http://dev.doc.cgistudio.at/APILINK/group___layout2_d.html "2D specific layout features.").</dd></dl>---

</div></div></div>#### GridLayouter effective Row/Column Data

Effective grid row/column data access interface has been added to [GridLayouter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_grid_layouter.html "GridLayouter arranges its elements in a grid. The amount of rows and columns for the grid must be spe...").

<div class="contents" id="bkmrk-see-also%3A-gridlayout"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[GridLayouter::GetEffectiveRowData](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_grid_layouter.html#aee829cf1a8722965e7fb02e4b3a3cb25) and [GridLayouter::GetEffectiveColumnData](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_grid_layouter.html#a7e8e84925f485520c2ea123b28c01349).</dd></dl></div></div>---

# Candera Base

#### Dynamic Properties: Code Size Reduction

New macros have been introduced to reduce the code size by moving dynamic property code to implementation files. The new macros are used already in [Layouter](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_layouter.html "A non-zero padding applies space inside the element layout's width and height. The values can be set ...") classes.

<div class="contents" id="bkmrk-see-also%3A-cdadynamic"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[CdaDynamicPropertiesDeclaration](http://dev.doc.cgistudio.at/APILINK/group___dynamic_properties_base.html#gac62d27c07689fcf3af9674192e81283f) and [CdaDynamicPropertiesDefinition](http://dev.doc.cgistudio.at/APILINK/group___dynamic_properties_base.html#ga56cdb2a230d286a8fdcc9a09cc4560c0).</dd></dl></div></div>---

# Candera Scripting

#### Lua Update

Lua has been updated to version 5.3.4.

---

# Candera System

#### Screenshot-Tool

[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") has a tool to create screenshots now. It is currently only available when 3D is enabled and OpenGL (ES) 3.0 is in use. The screenshot tool has an event listener which will be fired as soon as the screenshot is done. For more advanced usages on how to override the behavior, please have a look in the API.

<div class="contents" id="bkmrk-see-also%3A-diagnostic"><div class="contents"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[Diagnostics::ScreenshotTool](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_diagnostics_1_1_screenshot_tool.html).</dd></dl>---

</div></div></div>#### SizeType Datatype

FeatStd::SizeType can now be used as widget property type for 32 and 64 bit targets.

---

# Candera Device

#### RenderTarget events

RenderTarget now supports attaching listeners for catching events before and after SwapBuffers is called.

<div class="contents" id="bkmrk-"><div class="contents"><div class="textblock">---

</div></div></div>#### RenderDevice::ActivateShader deprecated

RenderDevice::ActivateShader has been deprecated. [Renderer::ActivateShader](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_renderer.html#aae13461c655c45cbfbcf4a1fd9697569) shall be used instead.

<div class="contents" id="bkmrk--0"><div class="contents"><div class="textblock">---

</div></div></div>#### TextBrush Line Spacing in Pixels/Factor of Height

A flag has been added to [TextBrush](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_text_brush.html "Output alpha only glyph data. A color may be specified, which is applied to the color channels...") for line spacing. When this is set to true, line spacing will be in pixels. When this is set to false, line spacing will be a factor by which [TextRendering::Metrics::lineHeight](http://dev.doc.cgistudio.at/APILINK/struct_candera_1_1_text_rendering_1_1_metrics.html#a6b46cc61bde72d6be7737f466906b9f9 "Line height of the font (lineGap = lineHeight - (ascender - descender)).") from [TextRendering::Style::GetMetrics()](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_text_rendering_1_1_style.html#af05dbeaab5e111fb4fea42bb227d3b9b) is multiplied.

<div class="contents" id="bkmrk-see-also%3A-textbrush%3A"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[TextBrush::PixelwiseLineSpacing](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_text_brush.html#a83c9667de0d3c9ebf8063dea7037fab4).</dd></dl></div></div>---

# Candera Transitions

#### New Default Transition Type

The transition framework now supports triggering of animations that can be defined via [Transitions::Hint](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_transitions_1_1_hint.html "A Hint can be set on a Rule and a transition RequestFragment. The TransitionStrategy will match trans...") parameters.

<div class="contents" id="bkmrk-"><div class="contents"><div class="textblock">---

</div></div></div>#### Reverse Transition

It is now possible to trigger reverse transitions. In case reversible fragments are identified, the already running transition fragments will go reverse, from their current state to their original one. An optional flag has been added to the [Transitions::Rule](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_transitions_1_1_rule.html "Class to store transition rules. The TransitionStrategy matches RequestFragments to Rules...") to specify whether it shall be allowed to reverse a transition or not. Default value is false. A [Transitions::OnReverseTransitionFragment](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_transitions_1_1_on_reverse_transition_fragment.html) corresponding event notifier has been added.

---

# Candera Globalization

#### CultureChangeListener Callbacks

New methods have been added to [Globalization::CultureChangeListener](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_globalization_1_1_culture_change_listener.html) which are called before and after the culture has been changed.

<div class="contents" id="bkmrk-see-also%3A-globalizat"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>[Globalization::CultureChangeListener::OnPreCultureChanged](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_globalization_1_1_culture_change_listener.html#aabb5ca215ea876f8ca4feafb2c15687b) and [Globalization::CultureChangeListener::OnPostCultureChanged](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_globalization_1_1_culture_change_listener.html#a74f76105e50c877fc781260f1969438e).</dd></dl></div></div>---

# TextEngine

#### Language Dependent Fonts

Extended the [TextRendering::Style](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_text_rendering_1_1_style.html "Defines a text style.") to support language dependent fonts. A style can change the font to a culture dependent font when the culture has been changed. Further information can be found in the Changelog entry of SceneComposer and the [TextRendering::Style](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_text_rendering_1_1_style.html "Defines a text style.") documentation.

<div class="contents" id="bkmrk-"><div class="contents"><div class="textblock">---

</div></div></div>#### Alignment Behavior

The TextEngine provides a flag with [TextRendering::LayoutingOptions::IsOrientationRealignmentEnabled](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_text_rendering_1_1_layouting_options.html#a73c9bd3fe7ff3841f7758a37c62bf6ee) to switch between different solutions in case of a text which is too long for the maximum width. This flag decides which part of the text will be clipped in cases of centered or right-aligned texts. The flag provides two choices:

<div class="contents" id="bkmrk-show-the-text-which-"><div class="contents"><div class="textblock">1. Show the text which is normally placed within the visual bounding box.
2. Show the beginning of the text within the visual bounding box providing the ability to read the beginning of the text.

</div></div></div>The [TextNode2D](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_text_node2_d.html "TextNode2D is a RenderNode that renders text using the attached BitmapBrush effect.") handles this by using the first solution when text trimming is disabled and the second one when it is enabled.

<div class="contents" id="bkmrk--0"><div class="contents"><div class="textblock">---

</div></div></div>#### Minor Changes

Further optimized the visual output of justified text. And fixed some alignment issues.

---

# Candera Widgets

#### More Property Types for Animations

It is now possible to animate widget properties of [Rectangle](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_rectangle.html "Represents a rectangle.") and [Margin](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_margin.html "A non-zero margin applies space outside the element layout's width and height. The values can be set ...") types. Also, properties of [Vector4](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_vector4.html "The default Vector4 class.") type for widgets are now supported and can be animated. Access to the properties by specifying an index has been added.

<div class="contents" id="bkmrk-"><div class="contents"><div class="textblock">---

</div></div></div>#### Widget MetaInfo Improvements

<div class="contents" id="bkmrk-the-widget-macros-no"><div class="contents"><div class="textblock">- The [Widget](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_widget.html "Abstract class for Candera Widgets.") Macros no longer move everything after the macros into the public scope of a class (bug before the changes in [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]")).
- The internal CdaMetaInfo struct generated by the macros has been renamed to CMI (due to reduction in code size).
- New method for Widgets: [WidgetBase::GetMetaInfo](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_widget_base.html#a02eabda984b9d6a1812dc1c7e82cdac9) (in macro CdaWidgetDefEnd).
- Restructuring of the MetaInfo Macro implementation to reduce the code size dramatically.

---

</div></div></div>

# Candera Monitor

#### Frame Debugger

Extended Monitor with the ability to capture frames and events.

Captured data includes frame timeline with important events (rendered nodes, camera, OpenGL calls) and color/depth/stencil buffer for selected nodes.

---

# Candera V3.4.0.1

#### Release Info

<div class="contents" id="bkmrk-release-date%3A-june-2"><div class="contents"><div class="textblock">- Release Date: June 22, 2017
- For details please refer to the release document

---

</div></div></div>