diff --git a/SMCode/SM.Base/PostEffects/BloomEffect.cs b/SMCode/SM.Base/PostEffects/BloomEffect.cs index be90afd..42eeed5 100644 --- a/SMCode/SM.Base/PostEffects/BloomEffect.cs +++ b/SMCode/SM.Base/PostEffects/BloomEffect.cs @@ -133,7 +133,7 @@ namespace SM.Base.PostEffects /// protected override void InitProcess() { - _source = Pipeline.MainFramebuffer; + _source ??= Pipeline.MainFramebuffer; _source.ColorAttachments["color"].PixelInformation = PixelInformation.RGBA_HDR; diff --git a/SMCode/SM.Base/PostEffects/PostProcessUtility.cs b/SMCode/SM.Base/PostEffects/PostProcessUtility.cs index e8c7b31..55bef36 100644 --- a/SMCode/SM.Base/PostEffects/PostProcessUtility.cs +++ b/SMCode/SM.Base/PostEffects/PostProcessUtility.cs @@ -28,6 +28,7 @@ namespace SM.Base.PostEffects /// /// This resolves a multisampled framebuffer to a non-multisampled renderbuffer. + /// This removes the depth buffer. /// /// /// @@ -36,7 +37,7 @@ namespace SM.Base.PostEffects multisampledBuffers.Activate(FramebufferTarget.ReadFramebuffer); target.Activate(FramebufferTarget.DrawFramebuffer); GL.BlitFramebuffer(0, 0, (int) multisampledBuffers.Size.X, (int) multisampledBuffers.Size.Y, 0, 0, - (int) target.Size.X, (int) target.Size.Y, ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit, + (int) target.Size.X, (int) target.Size.Y, ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Nearest); target.Activate(); diff --git a/SMCode/SM.OGL/Framebuffer/Framebuffer.cs b/SMCode/SM.OGL/Framebuffer/Framebuffer.cs index c5d40a1..8ffc5f1 100644 --- a/SMCode/SM.OGL/Framebuffer/Framebuffer.cs +++ b/SMCode/SM.OGL/Framebuffer/Framebuffer.cs @@ -55,6 +55,8 @@ namespace SM.OGL.Framebuffer /// public Dictionary RenderbufferAttachments { get; } = new Dictionary(); + public ColorAttachment this[string colorName] => ColorAttachments[colorName]; + /// /// Creates a buffer without any options. /// diff --git a/SM_TEST/Program.cs b/SM_TEST/Program.cs index 3e49a51..e0e3412 100644 --- a/SM_TEST/Program.cs +++ b/SM_TEST/Program.cs @@ -27,6 +27,14 @@ namespace SM_TEST window.SetScene(scene = new Scene()); scene.Objects.Add(new DrawObject2D()); + scene.Objects.Add(new DrawObject2D() + { + Transform = + { + Position = new SM.Base.Types.CVector2(20,20), + ZIndex = new SM.Base.Types.CVector1(1) + } + }); window.UpdateFrame += WindowOnUpdateFrame; window.Run(); diff --git a/SM_TEST/TestRenderPipeline.cs b/SM_TEST/TestRenderPipeline.cs index cde2f5b..8d540b7 100644 --- a/SM_TEST/TestRenderPipeline.cs +++ b/SM_TEST/TestRenderPipeline.cs @@ -14,14 +14,13 @@ namespace SM_TEST public override void Initialization() { - MainFramebuffer = CreateWindowFramebuffer(0); + MainFramebuffer = CreateWindowFramebuffer(16, PixelInformation.RGBA_HDR); - _postBuffer = CreateWindowFramebuffer(0); + _postBuffer = CreateWindowFramebuffer(0, depth: false); Framebuffers.Add(_postBuffer); - _bloom = new BloomEffect(MainFramebuffer, hdr: true, .5f) + _bloom = new BloomEffect(_postBuffer, hdr: true, .5f) { - Threshold = .5f, - Radius = 5 + Threshold = .5f }; @@ -36,10 +35,12 @@ namespace SM_TEST context.Scene.DrawMainObjects(context); context.Scene.DrawHUD(context); - - Framebuffer.Screen.Activate(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); + PostProcessUtility.ResolveMultisampledBuffers(MainFramebuffer, _postBuffer); _bloom.Draw(context); + Framebuffer.Screen.Activate(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); + + PostProcessUtility.FinalizeHDR(_postBuffer["color"], 1); context.Scene.DrawDebug(context); }