protected override void ApplyMeshInstanceChanges(List<uint> deleted, List<MeshInstance> addedOrChanged)
{
// helper list to ensure we don't add same material multiple times.
var addedmats = new List<uint>();
foreach (var d in deleted)
{
var cob = _objectDatabase.FindObjectRelation(d);
var delob = new CyclesObject {cob = cob};
_objectDatabase.DeleteObject(delob);
//System.Diagnostics.Debug.WriteLine("Deleted MI {0}", d);
}
foreach (var a in addedOrChanged)
{
var matid = a.MaterialId;
var mat = a.RenderMaterial;
if (!addedmats.Contains(matid))
{
HandleRenderMaterial(mat);
addedmats.Add(matid);
}
var meshid = new Tuple<Guid, int>(a.MeshId, a.MeshIndex);
//System.Diagnostics.Debug.WriteLine("Added MI {0}", a.InstanceId);
var ob = new CyclesObject {obid = a.InstanceId, meshid = meshid, Transform = CclXformFromRhinoXform(a.Transform), matid = a.MaterialId};
var shaderchange = new CyclesObjectShader(a.InstanceId)
{
OldShaderHash = uint.MaxValue,
NewShaderHash = a.MaterialId
};
_shaderDatabase.AddObjectMaterialChange(shaderchange);
_objectShaderDatabase.RecordRenderHashRelation(a.MaterialId, meshid, a.InstanceId);
_objectDatabase.RecordObjectIdMeshIdRelation(a.InstanceId, meshid);
_objectDatabase.AddOrUpdateObject(ob);
}
}