private void UseEffect(Action <EffectSpecialPaintShop> fn, TargetResourceTexture tex) { if (_paintShopEffect == null) { _paintShopEffect = DeviceContextHolder.GetEffect <EffectSpecialPaintShop>(); var s = Stopwatch.StartNew(); _paintShopEffect.FxNoiseMap.SetResource(DeviceContextHolder.GetRandomTexture(OptionPaintShopRandomSize, OptionPaintShopRandomSize)); AcToolsLogging.Write($"Random texture: {s.Elapsed.TotalMilliseconds:F1} ms"); } using (DeviceContextHolder.SaveRenderTargetAndViewport()) { DeviceContextHolder.PrepareQuad(_paintShopEffect.LayoutPT); DeviceContext.Rasterizer.SetViewports(tex.Viewport); DeviceContext.OutputMerger.SetTargets(tex.TargetView); DeviceContext.ClearRenderTargetView(tex.TargetView, new Color4(0f, 0f, 0f, 0f)); DeviceContext.OutputMerger.BlendState = null; DeviceContext.OutputMerger.DepthStencilState = null; DeviceContext.Rasterizer.State = null; _paintShopEffect.FxNoiseMultipler.Set((float)Math.Max(tex.Width, tex.Height) / OptionPaintShopRandomSize); _paintShopEffect.FxSize.Set(new Vector4(tex.Width, tex.Height, 1f / tex.Width, 1f / tex.Height)); fn?.Invoke(_paintShopEffect); } }
public bool DrawScene(DeviceContextHolder holder, IReflectionDraw draw, int facesPerFrame) { if (facesPerFrame == 0 || _dirty.All(x => !x)) { return(true); } using (holder.SaveRenderTargetAndViewport()) { holder.DeviceContext.Rasterizer.SetViewports(_viewport); var offset = _previouslyUpdated + 1; for (var k = 0; k < 6; k++) { var i = (k + offset) % 6; if (_dirty[i] && --facesPerFrame >= 0) { _dirty[i] = false; holder.DeviceContext.ClearRenderTargetView(_targetView[i], BackgroundColor); holder.DeviceContext.ClearDepthStencilView(_depthTargetView, DepthStencilClearFlags.Depth, 1.0f, 0); holder.DeviceContext.OutputMerger.SetTargets(_depthTargetView, _targetView[i]); draw.DrawSceneForReflection(holder, _cameras[i]); _previouslyUpdated = i; } } holder.DeviceContext.GenerateMips(_view); } return(facesPerFrame >= 0); }
public void DrawScene(DeviceContextHolder holder, [NotNull] IShadowsDraw draw) { using (holder.SaveRenderTargetAndViewport()) { holder.DeviceContext.Rasterizer.SetViewports(_viewport); holder.DeviceContext.Rasterizer.State = _rasterizerState; holder.DeviceContext.OutputMerger.DepthStencilState = _depthStencilState; holder.DeviceContext.OutputMerger.BlendState = null; UpdateBuffers(holder, draw); holder.DeviceContext.Rasterizer.State = null; holder.DeviceContext.OutputMerger.DepthStencilState = null; } }
public void DrawScene(DeviceContextHolder holder, IReflectionDraw draw) { holder.SaveRenderTargetAndViewport(); holder.DeviceContext.Rasterizer.SetViewports(_viewport); for (var i = 0; i < 6; i++) { holder.DeviceContext.ClearRenderTargetView(_targetView[i], BackgroundColor); holder.DeviceContext.ClearDepthStencilView(_depthTargetView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); holder.DeviceContext.OutputMerger.SetTargets(_depthTargetView, _targetView[i]); draw.DrawSceneForReflection(holder, _cameras[i]); } holder.DeviceContext.GenerateMips(_view); holder.RestoreRenderTargetAndViewport(); }
public void Clear(DeviceContextHolder holder) { holder.SaveRenderTargetAndViewport(); holder.DeviceContext.Rasterizer.SetViewports(_viewport); holder.DeviceContext.OutputMerger.DepthStencilState = null; holder.DeviceContext.OutputMerger.BlendState = null; holder.DeviceContext.Rasterizer.State = _rasterizerState; foreach (var split in Splits) { holder.DeviceContext.OutputMerger.SetTargets(split.Buffer.DepthView); holder.DeviceContext.ClearDepthStencilView(split.Buffer.DepthView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1f, 0); } holder.DeviceContext.Rasterizer.State = null; holder.DeviceContext.OutputMerger.DepthStencilState = null; holder.RestoreRenderTargetAndViewport(); }
public void Draw(DeviceContextHolder holder, ShaderResourceView view, TargetResourceTexture temporary) { // preparation var saved = holder.SaveRenderTargetAndViewport(); holder.QuadBuffers.Prepare(holder.DeviceContext, _effect.LayoutPT); // update those small texture UpdateNewAverateColor(holder, view); UpdateAdaptation(holder); // restore viewport saved.Dispose(); holder.DeviceContext.OutputMerger.SetTargets(temporary.TargetView); holder.DeviceContext.ClearRenderTargetView(temporary.TargetView, BaseRenderer.ColorTransparent); _effect.FxInputMap.SetResource(view); _effect.FxBrightnessMap.SetResource(GetAdaptationTexture().View); _effect.TechTonemap.DrawAllPasses(holder.DeviceContext, 6); // update bloom texture (bright areas) UpdateBloom(holder, temporary.View); if (BloomDebug) { // restore viewport saved.Dispose(); _effect.FxInputMap.SetResource(_bloomTexture.View); _effect.TechCopy.DrawAllPasses(holder.DeviceContext, 6); return; } // restore viewport saved.Dispose(); _effect.FxInputMap.SetResource(temporary.View); _effect.FxBloomMap.SetResource(_bloomTexture.View); _effect.TechCombine.DrawAllPasses(holder.DeviceContext, 6); }
public void DrawScene(DeviceContextHolder holder, IShadowsDraw draw) { holder.SaveRenderTargetAndViewport(); holder.DeviceContext.Rasterizer.SetViewports(_viewport); holder.DeviceContext.OutputMerger.DepthStencilState = null; holder.DeviceContext.OutputMerger.BlendState = null; holder.DeviceContext.Rasterizer.State = _rasterizerState; foreach (var split in Splits) { holder.DeviceContext.OutputMerger.SetTargets(split.Buffer.DepthView); holder.DeviceContext.ClearDepthStencilView(split.Buffer.DepthView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1f, 0); draw.DrawSceneForShadows(holder, split.Camera); holder.DeviceContext.GenerateMips(split.Buffer.View); } holder.DeviceContext.Rasterizer.State = null; holder.DeviceContext.OutputMerger.DepthStencilState = null; holder.RestoreRenderTargetAndViewport(); }
public void DrawScene(DeviceContextHolder holder, IReflectionDraw draw) { holder.SaveRenderTargetAndViewport(); holder.DeviceContext.Rasterizer.SetViewports(_viewport); for (var i = 0; i < 6; i++) { holder.DeviceContext.ClearRenderTargetView(_targetView[i], new Color4(0)); holder.DeviceContext.ClearDepthStencilView(_depthTargetView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); holder.DeviceContext.OutputMerger.SetTargets(_depthTargetView, _targetView[i]); draw.DrawSceneForReflection(holder, _cameras[i]); } holder.DeviceContext.GenerateMips(_view); holder.RestoreRenderTargetAndViewport(); }
public void Draw(DeviceContextHolder holder, ShaderResourceView view, TargetResourceTexture temporary) { // preparation holder.SaveRenderTargetAndViewport(); holder.QuadBuffers.Prepare(holder.DeviceContext, _effect.LayoutPT); // update those small texture UpdateNewAverateColor(holder, view); UpdateAdaptation(holder); holder.RestoreRenderTargetAndViewport(); holder.DeviceContext.OutputMerger.SetTargets(temporary.TargetView); holder.DeviceContext.ClearRenderTargetView(temporary.TargetView, BaseRenderer.ColorTransparent); _effect.FxInputMap.SetResource(view); _effect.FxBrightnessMap.SetResource(GetAdaptationTexture().View); _effect.TechTonemap.DrawAllPasses(holder.DeviceContext, 6); // update bloom texture (bright areas) UpdateBloom(holder, temporary.View); if (BloomDebug) { holder.RestoreRenderTargetAndViewport(); _effect.FxInputMap.SetResource(_bloomTexture.View); _effect.TechCopy.DrawAllPasses(holder.DeviceContext, 6); return; } // reset viewport holder.RestoreRenderTargetAndViewport(); _effect.FxInputMap.SetResource(temporary.View); _effect.FxBloomMap.SetResource(_bloomTexture.View); _effect.TechCombine.DrawAllPasses(holder.DeviceContext, 6); }