public void Render(DX11RenderContext context) { Device device = context.Device; //Just in case if (!this.updateddevices.Contains(context)) { this.Update(context); } if (this.rendereddevices.Contains(context)) { return; } if (this.FInEnabled[0]) { if (this.BeginQuery != null) { this.BeginQuery(context); } DX11RenderTextureArray target = this.FOutTexture[0][context]; DX11DepthTextureArray depth = this.FOutDepthTexture[0][context]; if (this.FInClear[0]) { context.CurrentDeviceContext.ClearRenderTargetView(target.RTV, this.FInBgColor[0]); if (this.FInDepthBuffer[0]) { context.CurrentDeviceContext.ClearDepthStencilView(depth.DSV, DepthStencilClearFlags.Depth, 1.0f, 0); } } if (this.FInLayer.IsConnected) { int slicecount = target.ElemCnt; if (this.FInBindTarget[0]) { if (this.FInDepthBuffer[0]) { context.RenderTargetStack.Push(depth, false, target); } else { context.RenderTargetStack.Push(target); } slicecount = 1; } for (int i = 0; i < slicecount; i++) { settings.ViewportIndex = i; settings.ViewportCount = target.ElemCnt; settings.ApplyTransforms(this.FInView[i], this.FInProjection[i], this.FInAspect[i], this.FInCrop[i]); settings.RenderWidth = target.Width; settings.RenderHeight = target.Height; settings.RenderDepth = target.ElemCnt; settings.BackBuffer = target; settings.CustomSemantics.Clear(); settings.ResourceSemantics.Clear(); if (this.FInBindTarget[0] == false) { if (this.FInDepthBuffer[0]) { context.RenderTargetStack.Push(depth.SliceDSV[i], false, target.SliceRTV[i]); } else { context.RenderTargetStack.Push(target.SliceRTV[i]); } } this.FInLayer.RenderAll(context, settings); if (this.FInBindTarget[0] == false) { context.RenderTargetStack.Pop(); } } if (this.FInBindTarget[0]) { context.RenderTargetStack.Pop(); } if (this.FInMips[0]) { context.CurrentDeviceContext.GenerateMips(this.FOutTexture[0][context].SRV); } } if (this.EndQuery != null) { this.EndQuery(context); } this.rendereddevices.Add(context); } }
public void Render(DX11RenderContext context) { Device device = context.Device; //Just in case if (!this.updateddevices.Contains(context)) { this.Update(null, context); } if (this.rendereddevices.Contains(context)) { return; } if (this.FInEnabled[0]) { if (this.BeginQuery != null) { this.BeginQuery(context); } DX11RenderTextureArray target = this.FOutTexture[0][context]; DX11DepthTextureArray depth = this.FOutDepthTexture[0][context]; if (this.FInClear[0]) { context.CurrentDeviceContext.ClearRenderTargetView(target.RTV, this.FInBgColor[0]); if (this.FInDepthBuffer[0]) { context.CurrentDeviceContext.ClearDepthStencilView(depth.DSV, DepthStencilClearFlags.Depth, 1.0f, 0); } } if (this.FInLayer.PluginIO.IsConnected) { for (int i = 0; i < target.ElemCnt; i++) { settings.ViewportIndex = i; settings.ViewportCount = target.ElemCnt; settings.View = this.FInView[i]; Matrix proj = this.FInProjection[i]; Matrix aspect = Matrix.Invert(this.FInAspect[i]); Matrix crop = Matrix.Invert(this.FInCrop[i]); settings.Projection = proj * aspect * crop; settings.ViewProjection = settings.View * settings.Projection; settings.RenderWidth = target.Width; settings.RenderHeight = target.Height; settings.RenderDepth = target.ElemCnt; settings.BackBuffer = null; settings.CustomSemantics.Clear(); settings.ResourceSemantics.Clear(); if (this.FInDepthBuffer[0]) { context.RenderTargetStack.Push(depth.SliceDSV[i], false, target.SliceRTV[i]); } else { context.RenderTargetStack.Push(target.SliceRTV[i]); } for (int j = 0; j < this.FInLayer.SliceCount; j++) { try { this.FInLayer[j][context].Render(this.FInLayer.PluginIO, context, settings); } catch (Exception ex) { Console.WriteLine(ex.Message); } } context.RenderTargetStack.Pop(); } } if (this.EndQuery != null) { this.EndQuery(context); } this.rendereddevices.Add(context); } }