Пример #1
0
 public void AddObjectMaterialChange(CyclesObjectShader o)
 {
     if (!_cqObjectsShaderChanges.Contains(o))
     {
         _cqObjectsShaderChanges.Add(o);
     }
 }
Пример #2
0
 public void AddObjectMaterialChange(CyclesObjectShader o)
 {
     if(!_cqObjectsShaderChanges.Contains(o)) _cqObjectsShaderChanges.Add(o);
 }
Пример #3
0
        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);
            }
        }