Ejemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageReadback{T}"/> class.
 /// </summary>
 /// <param name="context">The context.</param>
 public ImageReadback(ImageEffectContext context) : base(context)
 {
     stagingUsed     = new List <bool>();
     stagingTargets  = new List <Texture>();
     FrameDelayCount = 16;
     clock           = new Stopwatch();
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="LuminanceEffect" /> class.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="luminanceFormat">The luminance format.</param>
        /// <param name="luminanceLogEffect">The luminance log effect.</param>
        /// <exception cref="System.ArgumentNullException">lunkinanceLogShader</exception>
        public LuminanceEffect(ImageEffectContext context, PixelFormat luminanceFormat = PixelFormat.R16_Float, ImageEffectShader luminanceLogEffect = null) : base(context)
        {
            // Check luminance format
            if (luminanceFormat.IsCompressed() || luminanceFormat.IsPacked() || luminanceFormat.IsTypeless() || luminanceFormat == PixelFormat.None)
            {
                throw new ArgumentOutOfRangeException("luminanceFormat", "Unsupported format [{0}] (must be not none, compressed, packed or typeless)".ToFormat(luminanceFormat));
            }
            this.luminanceFormat = luminanceFormat;

            // Use or create a default luminance log effect
            this.luminanceLogEffect = luminanceLogEffect ?? new LuminanceLogEffect(context).DisposeBy(this);

            // Create 1x1 texture
            luminance1x1 = Texture.New2D(GraphicsDevice, 1, 1, 1, luminanceFormat, TextureFlags.ShaderResource | TextureFlags.RenderTarget).DisposeBy(this);

            // Use a multiscaler
            multiScaler = new ImageMultiScaler(context).DisposeBy(this);

            // Readback is always going to be done on the 1x1 texture
            readback = new ImageReadback <Half>(context).DisposeBy(this);
            readback.SetInput(luminance1x1);

            // Blur used before upscaling
            blur        = new GaussianBlur(context).DisposeBy(this);
            blur.Radius = 4;

            DownscaleCount = 6;
            UpscaleCount   = 4;

            EnableAverageLuminanceReadback = true;
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageEffectBundle"/> class.
 /// </summary>
 /// <param name="context">The context.</param>
 public ImageEffectBundle(ImageEffectContext context)
     : base(context)
 {
     luminanceEffect     = new LuminanceEffect(Context);
     brightFilter        = new BrightFilter(Context);
     bloom               = new Bloom(Context);
     colorTransformGroup = new ColorTransformGroup(Context);
     toneMap             = new ToneMap();
     colorTransformGroup.Transforms.Add(toneMap);
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Bloom"/> class.
        /// </summary>
        /// <param name="context">The context.</param>
        public Bloom(ImageEffectContext context)
            : base(context)
        {
            blurCombine = new ColorCombiner(Context);
            multiScaler = new ImageMultiScaler(Context);
            blur        = new GaussianBlur(context);

            Radius    = 3;
            Amount    = 1.0f;
            DownScale = 3;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GaussianBlur"/> class.
        /// </summary>
        /// <param name="context">The context.</param>
        public GaussianBlur(ImageEffectContext context)
            : base(context)
        {
            // Use shared SharedParameters for blurH and blurV
            blurH = new ImageEffectShader(context, "GaussianBlurEffect", Parameters).DisposeBy(this);
            // Setup specific Horizontal parameter for blurH
            blurH.Parameters.Set(GaussianBlurKeys.VerticalBlur, false);

            blurV = new ImageEffectShader(context, "GaussianBlurEffect", Parameters).DisposeBy(this);
            // Setup specific Vertical parameter for blurV
            blurV.Parameters.Set(GaussianBlurKeys.VerticalBlur, true);

            Radius     = 4;
            SigmaRatio = 2.0f;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ImageEffectBase" /> class.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="name">The name.</param>
        /// <exception cref="System.ArgumentNullException">context</exception>
        protected ImageEffectBase(ImageEffectContext context, string name = null) : base(name)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            Context              = context;
            GraphicsDevice       = Context.GraphicsDevice;
            Assets               = context.Services.GetSafeServiceAs <AssetManager>();
            Name                 = name ?? GetType().Name;
            Enabled              = true;
            inputTextures        = new Texture[128];
            maxInputTextureIndex = -1;
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ImageEffectShader"/> class.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="effectName">Name of the shader.</param>
        public ImageEffectShader(ImageEffectContext context, string effectName)
            : base(context, effectName)
        {
            if (effectName == null)
            {
                throw new ArgumentNullException("effectName");
            }

            // Setup this instance parameters
            parameters = new ParameterCollection();
            // As this is used by PostEffectBase, we just setup it here by default
            parameters.Set(TexturingKeys.Sampler, GraphicsDevice.SamplerStates.LinearClamp);

            // Setup the effect compiler
            effectInstance = new InternalEffectInstance(parameters);
            effectCompiler = new DynamicEffectCompiler(context.Services, effectName);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ImageEffect" /> class.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="name">The name.</param>
        /// <exception cref="System.ArgumentNullException">context</exception>
        protected ImageEffect(ImageEffectContext context, string name = null) : base(name)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            Context                = context;
            GraphicsDevice         = Context.GraphicsDevice;
            Assets                 = context.Services.GetSafeServiceAs <AssetManager>();
            Enabled                = true;
            inputTextures          = new Texture[128];
            scopedRenderTargets    = new List <Texture>();
            maxInputTextureIndex   = -1;
            EnableSetRenderTargets = true;
            Parameters             = new ParameterCollection();
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ColorTransformGroup"/> class.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="colorTransformGroupEffect">The color transform group effect.</param>
        public ColorTransformGroup(ImageEffectContext context, string colorTransformGroupEffect = "ColorTransformGroupEffect")
            : base(context, colorTransformGroupEffect)
        {
            compositeKeys     = new Dictionary <ParameterCompositeKey, ParameterKey>();
            transforms        = new ColorTransformCollection();
            enabledTransforms = new List <ColorTransform>();
            collectTransforms = new List <ColorTransform>();

            transformsParameters = new ParameterCollection();

            gammaTransform = new GammaTransform();

            transformGroupEffect = new ImageEffectShader(context, colorTransformGroupEffect, Parameters);

            // we are adding parameter collections after as transform parameters should override previous parameters
            transformGroupEffect.ParameterCollections.Add(transformsParameters);

            this.context = new ColorTransformContext(this);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ImageEffectShader" /> class.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="effectName">Name of the shader.</param>
        /// <param name="sharedParameterCollections">The shared parameters.</param>
        /// <exception cref="System.ArgumentNullException">effectName</exception>
        public ImageEffectShader(ImageEffectContext context, string effectName, params ParameterCollection[] sharedParameterCollections)
            : base(context)
        {
            if (effectName == null)
            {
                throw new ArgumentNullException("effectName");
            }

            parameterCollections = new List <ParameterCollection> {
                context.Parameters
            };
            if (sharedParameterCollections != null)
            {
                parameterCollections.AddRange(sharedParameterCollections);
            }
            parameterCollections.Add(Parameters);

            // Setup the effect compiler
            effectInstance = new DefaultEffectInstance(parameterCollections);
            effectCompiler = new DynamicEffectCompiler(context.Services, effectName);

            SetDefaultParameters();
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageScaler"/> class.
 /// </summary>
 /// <param name="context">The context.</param>
 public ImageScaler(ImageEffectContext context) : base(context, "ImageScalerEffect")
 {
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageMultiScaler"/> class.
 /// </summary>
 /// <param name="context">The context.</param>
 public ImageMultiScaler(ImageEffectContext context)
     : base(context)
 {
     // We are not using the default output for render targets, so don't setup them
     EnableSetRenderTargets = false;
 }
Ejemplo n.º 13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageEffectShader" /> class.
 /// </summary>
 /// <param name="context">The context.</param>
 /// <param name="effectName">Name of the shader.</param>
 /// <exception cref="System.ArgumentNullException">effectName</exception>
 public ImageEffectShader(ImageEffectContext context, string effectName)
     : this(context, effectName, (ParameterCollection[])null)
 {
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageEffectBundle"/> class.
 /// </summary>
 /// <param name="services">The services.</param>
 public ImageEffectBundle(IServiceRegistry services)
     : this(ImageEffectContext.GetShared(services))
 {
 }