예제 #1
0
        /// <summary>
        /// Adds commands for rendering single outline object.
        /// </summary>
        public void RenderSingleObject(Renderer renderer, OutlineMaterialSet materials)
        {
            if (renderer == null)
            {
                throw new ArgumentNullException("renderer");
            }

            if (materials == null)
            {
                throw new ArgumentNullException("materials");
            }

            _commandBuffer.SetRenderTarget(_maskRtId);
            _commandBuffer.ClearRenderTarget(false, true, Color.black);

            if (renderer && renderer.gameObject.activeInHierarchy && renderer.enabled)
            {
                for (var i = 0; i < renderer.sharedMaterials.Length; ++i)
                {
                    _commandBuffer.DrawRenderer(renderer, materials.RenderMaterial, i);
                }
            }

            _commandBuffer.SetGlobalFloatArray(materials.GaussSamplesNameId, materials.GaussSamples);
            _commandBuffer.SetGlobalTexture(_maskRtId, _maskRtId);
            _commandBuffer.Blit(_maskRtId, _hPassRtId, materials.HPassMaterial);
            _commandBuffer.Blit(_hPassRtId, _renderTarget, materials.VPassBlendMaterial);
        }
 public void Dispose()
 {
     if (_materials != null)
     {
         _materials.Dispose();
         _materials = null;
     }
 }
 internal void SetResources(OutlineResources resources)
 {
     if (resources == null)
     {
         if (_materials != null)
         {
             _materials.Dispose();
             _materials = null;
         }
     }
     else if (_materials == null || _materials.OutlineResources != resources)
     {
         _materials = resources.CreateMaterialSet();
         _materials.Reset(this);
         _changed = true;
     }
 }
예제 #4
0
 public void Init()
 {
     _resources   = ScriptableObject.CreateInstance <OutlineResources>();
     _materialSet = _resources.CreateMaterialSet();
     Init(_materialSet);
 }