# Candera Engine 3D

#### Changed Light Specular Color to White

Changed default specular light color to White due to feedback from designers. [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...") default specular color is black anyway, so no specular highlight will occur by default. But if user (designer, technical artist) changes material specular color, an immediate change of appearance will be visible.

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

</div></div></div>#### Reduction of glGetUniform calls on Shader Upload

By improving handling of [Shader](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_shader.html "The class Shader is an Appearance component representing a graphical processing unit (GPU) program...") Uniforms, the number of calls to glGetUniform during shader uploading was significantly reduced.

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

</div></div></div>#### Introduction of LoadingHint for DeviceObject.

Version 3.3.0 introduces a LoadingHint for the [DeviceObject](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_device_object.html "DeviceObject is the pure abstract base class for all objects which are able to upload or unload itsel..."). Loading hints can e.g. trigger warnings when uploading while rendering, or force unloading from all contexts.

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

</div></div></div>#### New methods for NodeListener

New methods have been added to [NodeListener](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_node_listener.html "A NodeListener defines hooks that are called when certain Node functions are triggered, e.g. when a Node's transformation changes. In order to register a NodeListener to a Node simply derive from NodeListener and override pure virtual functions with custom code.") class. These are:

<div class="contents" id="bkmrk-candera%3A%3Anodelistene"><div class="contents"><div class="textblock">- [Candera::NodeListener::OnNodeAdded](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_node_listener.html#a4d01c50508f145a5d57fe736621756a1): this is invoked whenever a parent is set for the node;
- [Candera::NodeListener::OnChildAdded](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_node_listener.html#a295d6454aefa42188ebc02fc9e50f3d7): this is invoked whenever a child node is added to the node;
- [Candera::NodeListener::OnChildRemoved](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_node_listener.html#a1114fc91be13375eb9c699adabb0c735): this is invoked whenever a child of the node is removed.

---

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