Пример #1
0
        void OnEnable()
        {
            m_Bundles       = new Dictionary <Type, PostProcessBundle>();
            m_SortedBundles = new Dictionary <PostProcessEvent, List <PostProcessBundle> >(new PostProcessEventComparer())
            {
                { PostProcessEvent.BeforeTransparent, new List <PostProcessBundle>() },
                { PostProcessEvent.BeforeStack, new List <PostProcessBundle>() },
                { PostProcessEvent.AfterStack, new List <PostProcessBundle>() }
            };

            foreach (var type in VolumeManager.instance.settingsTypes.Keys)
            {
                var settings = (PostProcessEffectSettings)ScriptableObject.CreateInstance(type);
                var bundle   = new PostProcessBundle(settings);
                m_Bundles.Add(type, bundle);

                if (!bundle.attribute.builtinEffect)
                {
                    m_SortedBundles[bundle.attribute.eventType].Add(bundle);
                }
            }

            m_PropertySheetFactory = new PropertySheetFactory();

            m_BlueNoise = new BlueNoise();

            // Scriptable render pipeline handles their own command buffers
            if (RuntimeUtilities.scriptableRenderPipelineActive)
            {
                return;
            }

            m_LegacyCmdBuffer = new CommandBuffer {
                name = "Post-processing"
            };
            m_LegacyCmdBufferOpaque = new CommandBuffer {
                name = "Opaque Only Post-processing"
            };

            m_Camera = GetComponent <Camera>();
            m_Camera.AddCommandBuffer(CameraEvent.BeforeImageEffectsOpaque, m_LegacyCmdBufferOpaque);
            m_Camera.AddCommandBuffer(CameraEvent.BeforeImageEffects, m_LegacyCmdBuffer);

            // Internal context used if no SRP is set
            m_CurrentContext = new PostProcessRenderContext();
        }
Пример #2
0
        public void InitBundles()
        {
            // Create these lists only once, the serialization system will take over after that
            if (m_BeforeTransparentBundles == null)
            {
                m_BeforeTransparentBundles = new List <SerializedBundleRef>();
            }

            if (m_BeforeStackBundles == null)
            {
                m_BeforeStackBundles = new List <SerializedBundleRef>();
            }

            if (m_AfterStackBundles == null)
            {
                m_AfterStackBundles = new List <SerializedBundleRef>();
            }

            // Create a bundle for each effect type
            m_Bundles = new Dictionary <Type, PostProcessBundle>();

            foreach (var type in PostProcessManager.instance.settingsTypes.Keys)
            {
                var settings = (PostProcessEffectSettings)ScriptableObject.CreateInstance(type);
                var bundle   = new PostProcessBundle(settings);
                m_Bundles.Add(type, bundle);
            }

            // Update sorted lists with newly added or removed effects in the assemblies
            UpdateBundleSortList(m_BeforeTransparentBundles, PostProcessEvent.BeforeTransparent);
            UpdateBundleSortList(m_BeforeStackBundles, PostProcessEvent.BeforeStack);
            UpdateBundleSortList(m_AfterStackBundles, PostProcessEvent.AfterStack);

            // Push all sorted lists in a dictionary for easier access
            sortedBundles = new Dictionary <PostProcessEvent, List <SerializedBundleRef> >(new PostProcessEventComparer())
            {
                { PostProcessEvent.BeforeTransparent, m_BeforeTransparentBundles },
                { PostProcessEvent.BeforeStack, m_BeforeStackBundles },
                { PostProcessEvent.AfterStack, m_AfterStackBundles }
            };

            // Done
            haveBundlesBeenInited = true;
        }