/// <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(); }
/// <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; }
/// <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); }
/// <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; }
/// <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; }
/// <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; }
/// <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); }
/// <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(); }
/// <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); }
/// <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(); }
/// <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") { }
/// <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; }
/// <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) { }
/// <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)) { }