/// <summary>
///
/// </summary>
/// <param name="ambient"></param>
/// <param name="diffuse"></param>
/// <param name="specular"></param>
/// <param name="emissive"></param>
/// <param name="shininess"></param>
public override void SetSurfaceParams(ColorEx ambient, ColorEx diffuse, ColorEx specular, ColorEx emissive, float shininess, TrackVertexColor tracking)
{
// TODO: Cache color values to prune unneccessary setting
if (cache.materialAmbient.CompareTo(ambient) == 0 &&
cache.materialDiffuse.CompareTo(diffuse) == 0 &&
cache.materialSpecular.CompareTo(specular) == 0 &&
cache.materialEmissive.CompareTo(emissive) == 0 &&
cache.materialShininess == shininess &&
cache.materialTracking == tracking)
return;
cache.materialAmbient = ambient.Clone();
cache.materialDiffuse = diffuse.Clone();
cache.materialSpecular = specular.Clone();
cache.materialEmissive = emissive.Clone();
cache.materialShininess = shininess;
cache.materialTracking = tracking;
// create a new material based on the supplied params
D3D.Material mat = new D3D.Material();
mat.Diffuse = diffuse.ToColor();
mat.Ambient = ambient.ToColor();
mat.Specular = specular.ToColor();
mat.Emissive = emissive.ToColor();
mat.SpecularSharpness = shininess;
// set the current material
device.Material = mat;
if (tracking != TrackVertexColor.None) {
SetRenderState(ref cache.colorVertex, RenderStates.ColorVertex, true);
device.SetRenderState(RenderStates.AmbientMaterialSource, (int)(((tracking & TrackVertexColor.Ambient) != 0) ? D3D.ColorSource.Color1 : D3D.ColorSource.Material));
device.SetRenderState(RenderStates.DiffuseMaterialSource, (int)(((tracking & TrackVertexColor.Diffuse) != 0) ? D3D.ColorSource.Color1 : D3D.ColorSource.Material));
device.SetRenderState(RenderStates.SpecularMaterialSource, (int)(((tracking & TrackVertexColor.Specular) != 0) ? D3D.ColorSource.Color1 : D3D.ColorSource.Material));
device.SetRenderState(RenderStates.EmissiveMaterialSource, (int)(((tracking & TrackVertexColor.Emissive) != 0) ? D3D.ColorSource.Color1 : D3D.ColorSource.Material));
} else
SetRenderState(ref cache.colorVertex, RenderStates.ColorVertex, false);
}