예제 #1
0
        public PostEffectManager(Common.IO.FileSystem fileSystem, Common.ResourceManager resourceManager, Backend backend, int width, int height)
        {
            if (fileSystem == null)
                throw new ArgumentNullException("fileSystem");
            if (resourceManager == null)
                throw new ArgumentNullException("resourceManager");
            if (backend == null)
                throw new ArgumentNullException("backend");

            ResourceManager = resourceManager;
            Backend = backend;

            RenderTargetManager = new Post.RenderTargetManager(Backend);

            TemporaryRenderTargets[0] = Backend.CreateRenderTarget("post_0", new Definition(width, height, false, new List<Definition.Attachment>()
            {
                new Definition.Attachment(Definition.AttachmentPoint.Color, Renderer.PixelFormat.Rgba, Renderer.PixelInternalFormat.Rgba16f, Renderer.PixelType.Float, 0)
            }));

            TemporaryRenderTargets[1] = Backend.CreateRenderTarget("post_1", new Definition(width, height, false, new List<Definition.Attachment>()
            {
                new Definition.Attachment(Definition.AttachmentPoint.Color, Renderer.PixelFormat.Rgba, Renderer.PixelInternalFormat.Rgba16f, Renderer.PixelType.Float, 0)
            }));

            QuadMesh = Backend.CreateBatchBuffer();
            QuadMesh.Begin();
            QuadMesh.AddQuad(new Vector2(-1, -1), new Vector2(2, 2), Vector2.Zero, new Vector2(1, 1));
            QuadMesh.End();

            Sprite = Backend.CreateSpriteBatch();

            // Setup effects
            ScreenSpaceReflections = new Effects.ScreenSpaceReflections(Backend, ResourceManager, QuadMesh);
            AdaptLuminance = new Effects.AdaptLuminance(Backend, ResourceManager, QuadMesh);
            Bloom = new Effects.Bloom(Backend, ResourceManager, QuadMesh);
            LensFlares = new Effects.LensFlares(Backend, ResourceManager, QuadMesh);
            Tonemap = new Effects.Tonemap(Backend, ResourceManager, QuadMesh);
            Gamma = new Effects.Gamma(Backend, ResourceManager, QuadMesh);
            FXAA = new Effects.FXAA(Backend, ResourceManager, QuadMesh);
            SMAA = new Effects.SMAA(Backend, fileSystem, ResourceManager, QuadMesh);

            // Default settings
            HDRSettings.KeyValue = 0.115f;
            HDRSettings.AdaptationRate = 0.5f;
            HDRSettings.BlurSigma = 3.0f;
            HDRSettings.BloomThreshold = 9.0f;
            HDRSettings.EnableBloom = true;
            HDRSettings.EnableLensFlares = true;

            ScreenSpaceReflectionsSettings.Enable = false;
        }