예제 #1
0
        public Blur1DStageModel(IFrameworkMessenger frameworkMessenger,
                                IStartupPropertiesCache startUpPropertiesCache,
                                ISystemComponents systemComponents,
                                IGpuSurfaceManager surfaceManager,
                                IGaussianBlurWeightsAndOffsetsCache gaussianWeightsAndOffsetsCache,
                                uint sampleSurfaceWidth,
                                uint sampleSurfaceHeight)
        {
            _frameworkMessenger             = frameworkMessenger;
            _startUpPropertiesCache         = startUpPropertiesCache;
            _systemComponents               = systemComponents;
            _surfaceManager                 = surfaceManager;
            _gaussianWeightsAndOffsetsCache = gaussianWeightsAndOffsetsCache;
            _sampleSurfaceWidth             = sampleSurfaceWidth;
            _sampleSurfaceHeight            = sampleSurfaceHeight;

            _unitTexelShiftSize = new Vector2(1.0f / (1.0f * _sampleSurfaceWidth), 1.0f / (1.0f * _sampleSurfaceHeight));

            CreateSurfaces();

            _current = new Blur1DEffectConfiguration()
            {
                MixAmount           = 0.0f,
                NumberOfBlurSamples = 4,
                BlurDirection       = Vector2.UnitX,
                ReSamplerType       = ResizeSamplerType.NearestNeighbour
            };

            _isTransitioning = false;

            CalculateTexelShift();
        }
예제 #2
0
파일: Stages.cs 프로젝트: AlzPatz/yak2d
        public void SetBlur1DConfig(IBlur1DStage effect, Blur1DEffectConfiguration config, float transitionSeconds)
        {
            if (effect == null)
            {
                throw new Yak2DException("Unable to set blur1d effect as stage passed is null");
            }

            SetBlur1DConfig(effect.Id, config, transitionSeconds);
        }
예제 #3
0
파일: Stages.cs 프로젝트: AlzPatz/yak2d
        public void SetBlur1DConfig(ulong effect, Blur1DEffectConfiguration config, float transitionSeconds)
        {
            config.MixAmount = Utility.Clamper.Clamp(config.MixAmount, 0.0f, float.MaxValue); //i think move these checks deeper and closer to where get used..

            config.NumberOfBlurSamples = Utility.Clamper.Clamp(config.NumberOfBlurSamples, 0, MAX_BLUR_SAMPLE_STEPS_FROM_CENTRE);

            transitionSeconds = Utility.Clamper.Clamp(transitionSeconds, 0.0f, float.MaxValue);

            CacheRenderStageModelInVisitor(effect);
            _renderStageVisitor.CachedBlur1dEffectModel?.SetEffectTransition(ref config, ref transitionSeconds);
        }
예제 #4
0
        public void SetEffectTransition(ref Blur1DEffectConfiguration config, ref float transitionSeconds)
        {
            transitionSeconds = Utility.Clamper.Clamp(transitionSeconds, 0.0f, float.MaxValue); //Might be duplicated clamp for this value

            if (transitionSeconds == 0.0f)
            {
                _current         = config;
                _isTransitioning = false;
                CalculateTexelShift();
                return;
            }

            _previous              = _current;
            _target                = config;
            _transitionTotalTime   = transitionSeconds;
            _transitionCurrentTime = 0.0f;
            _isTransitioning       = true;
        }