public override void Do(PostProcessingRenderObject ro) { ro.ProcessedViewport = Viewport.Default; ro.TextureSize = ro.Size; ro.CurrentBufferSize = (Vector2)ro.SourceTextureBuffer.Size; ro.ViewportSize = (Size)(ro.TextureSize * ro.SourceTextureScaling); ro.ProcessedTexture = ro.SourceTextureBuffer.Texture; ro.ProcessedUV1 = (Vector2)ro.ViewportSize / ro.CurrentBufferSize; if (!ro.SourceTextureBuffer.IsDirty) { return; } ro.PrepareOffscreenRendering(ro.Size); ro.SourceTextureBuffer.Texture.SetAsRenderTarget(); try { Renderer.Viewport = new Viewport(0, 0, ro.ViewportSize.Width, ro.ViewportSize.Height); Renderer.Clear(ro.TextureClearingColor); Renderer.Transform2 = ro.LocalToWorldTransform.CalcInversed(); ro.Objects.Render(); } finally { ro.SourceTextureBuffer.Texture.RestoreRenderTarget(); ro.FinalizeOffscreenRendering(); } ro.SourceTextureBuffer.IsDirty = false; ro.MarkBuffersAsDirty = true; }
public override void Do(PostProcessingRenderObject ro) { ro.FinalizeOffscreenRendering(); ro.VignetteMaterial.Radius = ro.VignetteRadius; ro.VignetteMaterial.Softness = ro.VignetteSoftness; ro.VignetteMaterial.UV1 = Vector2.One / (ro.ProcessedUV1 * ro.VignetteScale); ro.VignetteMaterial.UVOffset = ro.VignettePivot / ro.VignetteScale; ro.VignetteMaterial.Color = ro.VignetteColor; ro.RenderTexture(ro.TransparentTexture, ro.VignetteMaterial); }