Beispiel #1
0
 /// <summary>
 /// Add info to delete (hide) object from cycles
 /// </summary>
 /// <param name="ob"></param>
 public void DeleteObject(CyclesObject ob)
 {
     if (!_cqDeletedObjects.Contains(ob))
     {
         _cqDeletedObjects.Add(ob);
     }
 }
Beispiel #2
0
 /// <summary>
 /// Add an object change.
 /// </summary>
 /// <param name="ob"></param>
 public void AddOrUpdateObject(CyclesObject ob)
 {
     if (!_cqNewUpdatedObjects.Contains(ob))
     {
         _cqNewUpdatedObjects.Add(ob);
     }
 }
Beispiel #3
0
 /// <summary>
 /// Add info to delete (hide) object from cycles
 /// </summary>
 /// <param name="ob"></param>
 public void DeleteObject(CyclesObject ob)
 {
     if(!_cqDeletedObjects.Contains(ob)) _cqDeletedObjects.Add(ob);
 }
Beispiel #4
0
 /// <summary>
 /// Add an object change.
 /// </summary>
 /// <param name="ob"></param>
 public void AddOrUpdateObject(CyclesObject ob)
 {
     if(!_cqNewUpdatedObjects.Contains(ob)) _cqNewUpdatedObjects.Add(ob);
 }
Beispiel #5
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);
            }
        }
Beispiel #6
0
        /// <summary>
        /// Handle light changes
        /// </summary>
        /// <param name="lightChanges"></param>
        protected override void ApplyLightChanges(List<CqLight> lightChanges)
        {
            foreach (var light in lightChanges)
            {
                if (light.Data.IsLinearLight)
                {
                    uint lightmeshinstanceid = light.IdCrc;
                    var ld = light.Data;
                    switch (light.ChangeType)
                    {
                        case CqLight.Event.Deleted:
                            var cob = _objectDatabase.FindObjectRelation(lightmeshinstanceid);
                            var delob = new CyclesObject {cob = cob};
                            _objectDatabase.DeleteObject(delob);
                            _objectDatabase.DeleteMesh(ld.Id);
                            break;
                        default:
                            HandleLinearLightAddOrModify(lightmeshinstanceid, ld);
                            break;
                    }
                }
                else
                {
                // we don't necessarily get view changes prior to light changes, so
                // the old _currentViewInfo could be null - at the end of a Flush
                // it would be thrown away. Hence we now ask the ChangeQueue for the
                // proper view info. It will be given if one constructed the ChangeQueue
                // with a view to force it to be a single-view only ChangeQueue.
                // See #RH-32345 and #RH-32356
                    var v = GetQueueView();
                    var cl = _shaderConverter.ConvertLight(this, light, v, PreProcessGamma);

                    _lightDatabase.AddLight(cl);
                }
            }
        }