# 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>---