public void Render(CommandList cl, IMixStageModel stage, GpuSurface mix, GpuSurface t0, GpuSurface t1, GpuSurface t2, GpuSurface t3, GpuSurface target) { if (cl == null || stage == null || target == null) { _frameworkMessenger.Report("Warning: you are feeding the Mix Stage Renderer null inputs (for those that shouldn't be), aborting"); return; } var factors = new MixStageFactors { MixAmounts = stage.MixAmount }; cl.UpdateBuffer(_mixFactorsBuffer, 0, ref factors); cl.SetFramebuffer(target.Framebuffer); _viewportManager.ConfigureViewportForActiveFramebuffer(cl); cl.SetVertexBuffer(0, _ndcQuadVertexBuffer.Buffer); cl.SetPipeline(_pipeline); cl.SetGraphicsResourceSet(0, _mixFactorsResource); cl.SetGraphicsResourceSet(1, mix == null ? _gpuSurfaceManager.SingleWhitePixel.ResourceSet_TexWrap : mix.ResourceSet_TexWrap); cl.SetGraphicsResourceSet(2, t0 == null ? _whiteTextures[0].ResourceSet_TexWrap : t0.ResourceSet_TexWrap); cl.SetGraphicsResourceSet(3, t1 == null ? _whiteTextures[1].ResourceSet_TexWrap : t1.ResourceSet_TexWrap); cl.SetGraphicsResourceSet(4, t2 == null ? _whiteTextures[2].ResourceSet_TexWrap : t2.ResourceSet_TexWrap); cl.SetGraphicsResourceSet(5, t3 == null ? _whiteTextures[3].ResourceSet_TexWrap : t3.ResourceSet_TexWrap); cl.Draw(6); }
public void DispatchToRenderStage(IMixStageModel stage, CommandList cl, RenderCommandQueueItem command) { var surface = _surfaceManager.RetrieveSurface(command.Surface, new GpuSurfaceType[] { GpuSurfaceType.Texture, GpuSurfaceType.Internal }); var t0 = command.Camera == 0UL ? null : _surfaceManager.RetrieveSurface(command.Camera, new GpuSurfaceType[] { GpuSurfaceType.SwapChainOutput, GpuSurfaceType.Internal }); var t1 = command.Texture0 == 0UL ? null : _surfaceManager.RetrieveSurface(command.Texture0, new GpuSurfaceType[] { GpuSurfaceType.SwapChainOutput, GpuSurfaceType.Internal }); var t2 = command.Texture1 == 0UL ? null : _surfaceManager.RetrieveSurface(command.Texture1, new GpuSurfaceType[] { GpuSurfaceType.SwapChainOutput, GpuSurfaceType.Internal }); var t3 = command.SpareId0 == 0UL ? null : _surfaceManager.RetrieveSurface(command.SpareId0, new GpuSurfaceType[] { GpuSurfaceType.SwapChainOutput, GpuSurfaceType.Internal }); var mix = command.SpareId1 == 0UL ? null : _surfaceManager.RetrieveSurface(command.SpareId1, new GpuSurfaceType[] { GpuSurfaceType.SwapChainOutput, GpuSurfaceType.Internal }); _mixRenderer.Render(cl, stage, mix, t0, t1, t2, t3, surface); }
public void CacheStageModel(IMixStageModel model) => CachedMixStageModel = model;