# CGI Studio 3.4.2

Release Date: January 2018

# Candera V3.4.2

# Candera/FeatStd CMake Build System Changes

Due to refactoring the layouter the flag to enable layout is no more appropriate as it is not only a feature for 2D anymore but also for 3D.

<div class="contents" id="bkmrk-v3.4.1-v3.4.2-cander"><div class="contents"><div class="textblock"><table class="doxtable"><tbody><tr><th>**V3.4.1**</th><th>**V3.4.2**</th></tr><tr><td>CANDERA\_2D\_LAYOUTING\_ENABLED</td><td>CANDERA\_LAYOUT\_ENABLED</td></tr></tbody></table>

---

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

# Candera Base

#### Layout support for 2D and 3D (Canvas only)

The 2D feature to layout nodes by common dynamic layouters has been introduced into 3D now. As a starter only [Canvas](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_canvas.html) nodes are supported. This means [CanvasGroup](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_canvas_group.html), [CanvasSprite](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_canvas_sprite.html) and [CanvasText](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_canvas_text.html "CanvasText represents a text node within a 3D Canvas object.").

The supported layout types are equal to 2D:

<div class="contents" id="bkmrk-baseline-grid-stack-"><div class="contents"><div class="textblock">- Baseline
- Grid
- Stack
- DockPanel
- Overlay
- Default

</div></div></div>The layout is currently applied to the X,Y - plane. The layouter now uses [AbstractNodePointer](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_abstract_node_pointer.html "The class AbstractCameraPointer is an wrapper class to abstract 2D and 3D camera nodes.") and [CanderaObject](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_candera_object.html "Represents the base class for Candera objects related to 3D rendering. Every CanderaObject can have a...") types instead of the 2D only node types.

Restrictions on this version are given as follows:

<div class="contents" id="bkmrk-layout-clipping-in-3"><div class="contents"><div class="textblock">- Layout clipping in 3D canvas is not supported yet
- Z-Fighting: When using the overlay layouter nodes are above each other but have the same Z coordinate. Therefore, these nodes have z fighting. It is planned to automatically solve this. However, for this version, it is advised to set the Depth Bias Unit of the [Appearance](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_appearance.html "The class Appearance groups following render attributes: Material, Textures, RenderMode, and Shader. Render attributes define the distinctive visualization of a geometry like Mesh, Billboard, and PointSprite. Further, render attributes can be shared across multiple objects, which conserves memory and enables sharing of appearance characteristics. An Appearance object is mandatory for any object in order to get rendered. Per default all render attributes are initialized to null, which is a valid setting. If the Appearance is activated, all render attributes that are set become activated. If no RenderMode is defined (null), then the default RenderMode is used instead;.") - [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..."). Changing the appearance of a [CanvasSprite](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_canvas_sprite.html) instead of [CanvasText](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_canvas_text.html "CanvasText represents a text node within a 3D Canvas object.") is strongly recommended. [CanvasText](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_canvas_text.html "CanvasText represents a text node within a 3D Canvas object.") requires only one draw call for all texts with equal conditions. One of them is the [Appearance](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_appearance.html "The class Appearance groups following render attributes: Material, Textures, RenderMode, and Shader. Render attributes define the distinctive visualization of a geometry like Mesh, Billboard, and PointSprite. Further, render attributes can be shared across multiple objects, which conserves memory and enables sharing of appearance characteristics. An Appearance object is mandatory for any object in order to get rendered. Per default all render attributes are initialized to null, which is a valid setting. If the Appearance is activated, all render attributes that are set become activated. If no RenderMode is defined (null), then the default RenderMode is used instead;."). Changing the render mode removes the shared appearance and produces an additional draw call.

---

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

# Courier V3.4.2

#### Release Info

<div class="contents" id="bkmrk-release-date%3A-septem"><div class="contents"><div class="textblock">- Release Date: September 2017

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

<div class="contents" id="bkmrk-reimplementation-of-"><div class="contents"><div class="contents"><div class="textblock">- Reimplementation of Default RenderJobStrategy Sorting Operator
- Integration of 3D layout

---

</div></div></div></div><span style="color:rgb(34,34,34);font-size:1.666em;font-weight:400;">Reimplementation of Default RenderJobStrategy Sorting Operator</span>

RenderJobStrategy::operator() is now implemented as 'strictly less' RenderJobVector::Sort() comparison function over render jobs, according to following criteria (from Courier\\Visualization\\Renderer.h):

<div class="contents" id="bkmrk-offscreen-render-job"><div class="contents"><div class="textblock">1. Offscreen render jobs before Display render jobs.
2. 2d render jobs before 3d render jobs. (this criteria can be disabled by a new configuraton flag now)
3. Clear render jobs before normal view render jobs.
4. Lower camera sequence number before higher camera sequence number.

</div></div></div>#### Integration of 3D layout

The 3D layout functionality support has been added to courier equal to 2D.

---

# FeatStd V3.4.2

#### Release Info

<div class="contents" id="bkmrk-release-date%3A-septem"><div class="contents"><div class="textblock">- Release Date: September 2017

</div></div></div>#### Interface Changes

<div class="contents" id="bkmrk-removal-of-log-realm"><div class="contents"><div class="textblock">- Removal of Log Realm limitation
- Extension of Initialized and Optional classes by comparison operator

---

</div></div></div>#### Removal of Log Realm limitation

The name of a log realm were bound to a maximum length of 32 characters including the terminating null byte. This limitation has been removed. Existing logger (appender) are using the CMake macro FEATSTD\_LOGGER\_MAX\_BUFFER\_SIZE now. If the name is still too long and does not fit into the buffers, this CMake flag can be adjusted accordingly. Note that appenders statically reserve these buffers.

<div class="contents" id="bkmrk-"><div class="contents"><div class="textblock">  
</div></div></div>#### Extension of Initialized and Optional classes by comparison operator

The [Initialized](http://dev.doc.cgistudio.at/APILINK/class_feat_std_1_1_initialized.html) and [Optional](http://dev.doc.cgistudio.at/APILINK/class_feat_std_1_1_optional.html "The template class Optional is a wrapper for representing optional objects that may not have been ini...") classes are extended to forward the comparison operators to the underlying value. This includes pointer comparison if the type is a pointer type.

<div class="contents" id="bkmrk--0"><div class="contents"><div class="textblock">  
</div></div></div>#### UnitTest-Helper extended by MemoryLeak check

The unit test helper class 'EnvironmentTestEventListener' includes a memory check after all test cases. The check is done after all subtests of a test (class) are done and the teardown for this test case has been processed. It shows new potential leaks after the test case. This feature is only available if MemoryPools are enabled and memory leak detection for MemoryPools is also enabled.

Important notes: Static preallocations which are available over the complete runtime are marked as memory leaks even if they are cleaned up correctly afterwards. Additionally, unit tests may have no focus on correct clean ups. These memory leaks are also visible.

---

# Analyzer V3.4.2

#### Release Info

<div class="contents" id="bkmrk-release-date%3A-septem"><div class="contents"><div class="textblock">- Release Date: September 2017

</div></div></div>#### Feature Changes

---

# SceneComposer V3.4.2

# SceneComposer Usability Improvements

#### 3D Layout for Canvas Nodes

A new feature - "Layouter" - is available for canvas groups. The settings for this feature can be done through a category with the same name available in the Properties panel. The functionality of 3D Layout for canvas nodes is similar with the usage of those layouters known from SceneComposer 2d scenes. By using this feature a Canvas Group is able to align its nodes (group, sprite, or text) according to the configured layouter. The available layout types are identical with those used for the 2D layouters:

<div class="header" id="bkmrk-baseline-layouter-gr"><div class="header"><div class="headertitle"><div class="title"><div class="contents"><div class="contents"><div class="textblock">- BaseLine Layouter
- Grid Layouter
- Overlay Layouter
- Stack Layouter
- DockPanel Layouter

</div></div></div></div></div></div></div><p class="callout info">The "Ctrl+L" command is the shortcut for the "Do Layout" operation. Please, note, that in the case of 3D layout for Canvas nodes, this command will update both the position and scale' values for the selected object.</p>

<div class="header" id="bkmrk-see-also%3A-canvas-lay"><div class="header"><div class="headertitle"><div class="title"><div class="contents"><div class="contents"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>- <span style="color: rgb(230, 126, 35);">[Canvas Layouter](https://doc316en.candera.eu/link/130#bkmrk-canvas-layouter-0)</span> in SceneComposer User Manual

</dd></dl>---

</div></div></div></div></div></div></div>#### Safety Improvements

Since this version on it is possible to create animations for safety content and to export them to safety generated asset (Polarion CGI1-18264).

Any safety node can be animated by using the following animated properties:

<div class="header" id="bkmrk-position-scale-%28exce"><div class="header"><div class="headertitle"><div class="title"><div class="contents"><div class="contents"><div class="textblock">- Position
- Scale (except for Groups)
- Alpha Transparency
- Rendering enabled
- Text Color (on Text Node only)

</div></div></div></div></div></div></div>In comparison with an animated node from a 2D or 3D scene, the animation for any safety node are limited in the following way:

<div class="header" id="bkmrk-safety-animations-do"><div class="header"><div class="headertitle"><div class="title"><div class="contents"><div class="contents"><div class="textblock">- Safety Animations do not support Bezier &amp; Spline interpolation;
- Ease interpolation does not support other functions except for Power. The only available types of interpolation are "Step", "Linear", and "Ease".

</div></div></div></div></div></div></div>When a safety asset library is generated, warnings are written in the Output panel even though the generation is not restricted (Polarion CGI1-18375). For instance, some issue warnings for content (e.g. bmp) used in both Safety and Convenience asset will be written in the Output.

<div class="header" id="bkmrk-see-also%3A-safety-sup"><div class="header"><div class="headertitle"><div class="title"><div class="contents"><div class="textblock"><dl class="see"><dt>**See also:**</dt><dd>- Safety Support in SceneComposer User Manual

</dd></dl>---

<dl class="see"></dl></div></div></div></div></div></div><div class="header" id="bkmrk-"><div class="headertitle"><div class="title"><div class="contents"><div class="textblock"><dl class="see"></dl>  
</div></div>  
</div></div></div>