public void AddObjectMaterialChange(CyclesObjectShader o) { if (!_cqObjectsShaderChanges.Contains(o)) { _cqObjectsShaderChanges.Add(o); } }
public void AddObjectMaterialChange(CyclesObjectShader o) { if(!_cqObjectsShaderChanges.Contains(o)) _cqObjectsShaderChanges.Add(o); }
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); } }