public DefaultCaptureCopyPostProcessingRenderPass(
     IGraphicsBlit graphicsBlit,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities)
 {
     _graphicsBlit = graphicsBlit;
     _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
 }
Exemple #2
0
 public DefaultCaptureCopyPostProcessingRenderPass(
     IGraphicsBlit graphicsBlit,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities)
 {
     _graphicsBlit = graphicsBlit;
     _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
 }
 public DefaultRenderPipeline(
     IGraphicsBlit graphicsBlit,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities)
 {
     _graphicsBlit = graphicsBlit;
     _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
     _standardRenderPasses = new List<IRenderPass>();
     _postProcessingRenderPasses = new List<IRenderPass>();
     _transientStandardRenderPasses = new List<IRenderPass>();
     _transientPostProcessingRenderPasses = new List<IRenderPass>();
     _renderPass = null;
     _isFirstRenderPass = false;
 }
 public DefaultRenderPipeline(
     IGraphicsBlit graphicsBlit,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities)
 {
     _graphicsBlit = graphicsBlit;
     _renderTargetBackBufferUtilities     = renderTargetBackBufferUtilities;
     _standardRenderPasses                = new List <IRenderPass>();
     _postProcessingRenderPasses          = new List <IRenderPass>();
     _transientStandardRenderPasses       = new List <IRenderPass>();
     _transientPostProcessingRenderPasses = new List <IRenderPass>();
     _renderPass        = null;
     _isFirstRenderPass = false;
 }
 public DefaultLoadedGame(
     IConsoleHandle consoleHandle,
     IProjectManager projectManager,
     IGrpcServer grpcServer,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities,
     ISharedRendererHostFactory sharedRendererHostFactory)
 {
     _consoleHandle      = consoleHandle;
     _projectManager     = projectManager;
     _grpcServer         = grpcServer;
     _sharedRendererHost = sharedRendererHostFactory.CreateSharedRendererHost();
     _sharedRendererHost.TexturesRecreated += OnTexturesRecreated;
     _formatter = new BinaryFormatter();
 }
 public Default3DDeferredRenderPass(
     IHierarchy hierarchy,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities,
     IGraphicsBlit graphicsBlit,
     IAssetManagerProvider assetManagerProvider,
     IRenderBatcher renderBatcher)
 {
     _hierarchy = hierarchy;
     _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
     _graphicsBlit = graphicsBlit;
     _renderBatcher = renderBatcher;
     _gbufferClearEffect =
         assetManagerProvider.GetAssetManager().Get<EffectAsset>("effect.GBufferClear");
     _gbufferCombineEffect =
         assetManagerProvider.GetAssetManager().Get<EffectAsset>("effect.GBufferCombine");
 }
Exemple #7
0
 public Default3DDeferredRenderPass(
     IHierarchy hierarchy,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities,
     IGraphicsBlit graphicsBlit,
     IAssetManagerProvider assetManagerProvider,
     IRenderBatcher renderBatcher)
 {
     _hierarchy = hierarchy;
     _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
     _graphicsBlit       = graphicsBlit;
     _renderBatcher      = renderBatcher;
     _gbufferClearEffect =
         assetManagerProvider.GetAssetManager().Get <EffectAsset>("effect.GBufferClear");
     _gbufferCombineEffect =
         assetManagerProvider.GetAssetManager().Get <EffectAsset>("effect.GBufferCombine");
 }
Exemple #8
0
        public SharedRendererHost(
            IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities)
        {
            _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;

            SynchronisationMemoryMappedFileName = "ProtogameEditor" + Guid.NewGuid().ToString();
            _readerWriterMmap     = MemoryMappedFile.CreateNew(SynchronisationMemoryMappedFileName, 16);
            _readerWriterAccessor = _readerWriterMmap.CreateViewAccessor();

            Size                       = new Point(640, 480);
            _renderTargets             = new RenderTarget2D[RTBufferSize];
            _renderTargetSharedHandles = new IntPtr[RTBufferSize];

            SetReadIndex(0);
            SetWriteIndex(RTBufferSize >= 2 ? 1 : 0);
        }
Exemple #9
0
 public DefaultRenderPipeline(
     IGraphicsBlit graphicsBlit,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities,
     IProfiler profiler,
     [FromGame] IEngineHook[] engineHooks)
 {
     _graphicsBlit = graphicsBlit;
     _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
     _profiler                            = profiler;
     _engineHooks                         = engineHooks;
     _standardRenderPasses                = new List <IRenderPass>();
     _postProcessingRenderPasses          = new List <IRenderPass>();
     _transientStandardRenderPasses       = new List <IRenderPass>();
     _transientPostProcessingRenderPasses = new List <IRenderPass>();
     _renderPass                          = null;
     _isFirstRenderPass                   = false;
 }
 public DefaultRenderPipeline(
     IGraphicsBlit graphicsBlit,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities,
     IProfiler profiler,
     [FromGame] IEngineHook[] engineHooks)
 {
     _graphicsBlit = graphicsBlit;
     _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
     _profiler = profiler;
     _engineHooks = engineHooks;
     _standardRenderPasses = new List<IRenderPass>();
     _postProcessingRenderPasses = new List<IRenderPass>();
     _transientStandardRenderPasses = new List<IRenderPass>();
     _transientPostProcessingRenderPasses = new List<IRenderPass>();
     _renderPass = null;
     _isFirstRenderPass = false;
 }
 public DefaultLoadedGame(
     IProjectManager projectManager,
     ICoroutine coroutine,
     IConsoleHandle consoleHandle,
     IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities)
 {
     _projectManager = projectManager;
     _coroutine      = coroutine;
     _consoleHandle  = consoleHandle;
     _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
     _renderTargetSize          = new Point(640, 480);
     _hasRunGameUpdate          = false;
     _isReadyForMainThread      = false;
     _mainThreadTasks           = new List <Action>();
     _renderTargets             = new RenderTarget2D[RenderTargetBufferConfiguration.RTBufferSize];
     _renderTargetSharedHandles = new IntPtr[RenderTargetBufferConfiguration.RTBufferSize];
     _currentWriteTargetIndex   = RenderTargetBufferConfiguration.RTBufferSize >= 2 ? 1 : 0;
     _currentReadTargetIndex    = 0;
 }
        public Default3DDeferredRenderPass(
            IHierarchy hierarchy,
            IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities,
            IGraphicsBlit graphicsBlit,
            IAssetManager assetManager,
            IRenderBatcher renderBatcher,
            IBackBufferDimensions backBufferDimensions)
        {
            _hierarchy = hierarchy;
            _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
            _graphicsBlit         = graphicsBlit;
            _renderBatcher        = renderBatcher;
            _backBufferDimensions = backBufferDimensions;
            _gbufferClearEffect   =
                assetManager.Get <EffectAsset>("effect.GBufferClear");
            _gbufferCombineEffect =
                assetManager.Get <EffectAsset>("effect.GBufferCombine");

            GBufferBlendState = BlendState.Opaque;
            ClearTarget       = true;
        }
Exemple #13
0
            public RenderPipelineWorld(
                IAssetManager assetManager,
                I2DRenderUtilities renderUtilities,
                IGraphicsFactory graphicsFactory,
                IAssert assert,
                ITestAttachment testAttachment,
                IRenderTargetBackBufferUtilities renderTargetBackBufferUtilities,
                IGraphicsBlit graphicsBlit)
            {
                _renderUtilities                 = renderUtilities;
                _assert                          = assert;
                _testAttachment                  = testAttachment;
                _texture                         = assetManager.Get <TextureAsset>("texture.Player");
                _invertPostProcess               = graphicsFactory.CreateInvertPostProcessingRenderPass();
                _blurPostProcess                 = graphicsFactory.CreateBlurPostProcessingRenderPass();
                _customPostProcess               = graphicsFactory.CreateCustomPostProcessingRenderPass("effect.MakeRed");
                _captureInlinePostProcess        = graphicsFactory.CreateCaptureInlinePostProcessingRenderPass();
                _renderTargetBackBufferUtilities = renderTargetBackBufferUtilities;
                _graphicsBlit                    = graphicsBlit;
                _captureInlinePostProcess.RenderPipelineStateAvailable = (gameContext, renderContext, previousPass, d) =>
                {
                    if (!_isValidRun)
                    {
                        return;
                    }

                    _renderTarget = _renderTargetBackBufferUtilities.UpdateCustomRenderTarget(_renderTarget, renderContext, SurfaceFormat.Color, DepthFormat.None, 1);

                    // Blit to the capture target.
                    _graphicsBlit.Blit(renderContext, d, _renderTarget);

#if MANUAL_TEST
#elif RECORDING
                    using (var writer = new StreamWriter("output" + _frame + ".png"))
                    {
                        _renderTarget.SaveAsPng(writer.BaseStream, Width, Height);
                    }
#else
                    var baseStream =
                        typeof(RenderPipelineWorld).Assembly.GetManifestResourceStream(
                            "Protogame.Tests.Expected.RenderPipeline.output" + _frame + ".png");
                    _assert.NotNull(baseStream);
                    var memoryStream = new MemoryStream();
                    _renderTarget.SaveAsPng(memoryStream, Width, Height);
                    // ReSharper disable once AssignNullToNotNullAttribute
                    var expected = new Bitmap(baseStream);
                    var actual   = new Bitmap(memoryStream);

                    _assert.Equal(expected.Height, actual.Height);
                    _assert.Equal(expected.Width, actual.Width);
                    var totalPixelValues     = 0L;
                    var incorrectPixelValues = 0L;
                    for (var x = 0; x < expected.Width; x++)
                    {
                        for (var y = 0; y < expected.Height; y++)
                        {
                            var expectedPixel = expected.GetPixel(x, y);
                            var actualPixel   = actual.GetPixel(x, y);

                            totalPixelValues += 255 * 4;

                            if (expectedPixel != actualPixel)
                            {
                                var diffA = System.Math.Abs((int)actualPixel.A - (int)expectedPixel.A);
                                var diffR = System.Math.Abs((int)actualPixel.R - (int)expectedPixel.R);
                                var diffG = System.Math.Abs((int)actualPixel.G - (int)expectedPixel.G);
                                var diffB = System.Math.Abs((int)actualPixel.B - (int)expectedPixel.B);

                                incorrectPixelValues += (diffA + diffR + diffG + diffB);
                            }
                        }
                    }

                    var percentage = (100 - ((incorrectPixelValues / (double)totalPixelValues) * 100f));

                    var combination = _combinations[_frame % _combinations.Count];
                    _testAttachment.Attach("name-" + combination.Id, combination.Name);
                    _testAttachment.Attach("expected-" + combination.Id, baseStream);
                    _testAttachment.Attach("actual-" + combination.Id, memoryStream);
                    _testAttachment.Attach("threshold-" + combination.Id, 99.9);
                    _testAttachment.Attach("measured-" + combination.Id, percentage);

                    if (percentage <= 99.9f)
                    {
                        combination.FailureMessage = "The actual rendered image did not match the expected image close enough (99.9%).";
                    }

                    //memoryStream.Dispose();
                    //baseStream.Dispose();
#endif

#if MANUAL_TEST
                    _manualTest++;
                    if (_manualTest % 60 == 0)
                    {
                        _frame++;
                    }
#else
                    _frame++;
#endif
                };

                this.Entities = new List <IEntity>();
            }