예제 #1
0
        /// <summary>
        /// Returns the mesh managers suitable for a shadow.
        /// </summary>
        /// <param name="shadow">
        /// The shadow to get mesh manager for.
        /// </param>
        /// <returns>
        /// The <see cref="ShadowMeshManager"/>.
        /// </returns>
        private ShadowMeshManager GetMeshManager(SwiftShadow shadow)
        {
            ShadowMeshManager meshManager;

            if (_meshManagers.TryGetValue(shadow.GetMeshManagerHashCode(), out meshManager))
            {
                return(meshManager);
            }

            if (shadow.Material == null)
            {
                throw new ArgumentNullException("shadow.material");
            }

            if (_meshManagersNew.TryGetValue(shadow.GetMeshManagerHashCode(), out meshManager))
            {
                return(meshManager);
            }

            meshManager = new ShadowMeshManager(shadow.Material, shadow.Layer, shadow.IsStatic);
            if (_isRecalculatingMesh)
            {
                _meshManagersNew.Add(meshManager.GetInstanceHashCode(), meshManager);
            }
            else
            {
                _meshManagers.Add(meshManager.GetInstanceHashCode(), meshManager);
            }

            return(meshManager);
        }
예제 #2
0
        /// <summary>
        /// Unregisters the shadow.
        /// </summary>
        /// <param name="shadow">
        /// The shadow to unregister.
        /// </param>
        public void UnregisterShadow(SwiftShadow shadow)
        {
            ShadowMeshManager meshManager;
            int shadowHash = shadow.GetMeshManagerHashCode();

            if (_meshManagers.TryGetValue(shadowHash, out meshManager))
            {
                meshManager.UnregisterShadow(shadow);
            }
        }