From f89cef7a7843075954cbf3f96ef4ef456744bf76 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Fri, 11 Mar 2016 11:23:15 +0100 Subject: [PATCH] Text still disappears if its behind transparent sprites --- include/Engine/Rendering/DrawFinalPass.h | 3 +- src/Engine/Rendering/DrawFinalPass.cpp | 50 +++++++++++++----------- src/Engine/Rendering/Renderer.cpp | 9 +++-- src/Engine/Rendering/TextPass.cpp | 4 +- src/Engine/Rendering/TextPassState.cpp | 11 ++++-- 5 files changed, 44 insertions(+), 33 deletions(-) diff --git a/include/Engine/Rendering/DrawFinalPass.h b/include/Engine/Rendering/DrawFinalPass.h index 26712088..247d0310 100644 --- a/include/Engine/Rendering/DrawFinalPass.h +++ b/include/Engine/Rendering/DrawFinalPass.h @@ -13,6 +13,7 @@ #include "Texture.h" #include "ShadowPass.h" #include "BlurHUD.h" +#include "TextPass.h" class DrawFinalPass { @@ -22,7 +23,7 @@ public: void InitializeTextures(); void InitializeFrameBuffers(); void InitializeShaderPrograms(); - void Draw(RenderScene& scene, BlurHUD* blurHUDPass); + void Draw(RenderScene& scene, BlurHUD* blurHUDPass, TextPass* textPass); void ClearBuffer(); void OnWindowResize(); diff --git a/src/Engine/Rendering/DrawFinalPass.cpp b/src/Engine/Rendering/DrawFinalPass.cpp index d03b0c2b..54800551 100644 --- a/src/Engine/Rendering/DrawFinalPass.cpp +++ b/src/Engine/Rendering/DrawFinalPass.cpp @@ -242,7 +242,7 @@ void DrawFinalPass::InitializeShaderPrograms() } -void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass) +void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass, TextPass* textPass) { GLERROR("Pre"); DrawFinalPassState* stateDethp = new DrawFinalPassState(m_ShieldDepthFrameBuffer.GetHandle()); @@ -282,10 +282,36 @@ void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass) //state->StencilMask(0x00); DrawModelRenderQueues(scene.Jobs.OpaqueObjects, scene); GLERROR("OpaqueObjects"); + delete state; + + DrawFinalPassState* stateSprite = new DrawFinalPassState(m_FinalPassFrameBuffer.GetHandle()); + if (scene.ShouldBlur) { + //Combine nonblur and blur texture + stateSprite->Disable(GL_DEPTH_TEST); + stateSprite->Disable(GL_STENCIL_TEST); + m_CombinedTexture = blurHUDPass->CombineTextures(m_SceneTexture, m_FullBlurredTexture); + + } + //Draw Transparen objects + //state->BlendFunc(GL_ONE, GL_ONE); + //state->StencilFunc(GL_EQUAL, 1, 0xFF); + //DrawModelRenderQueues(scene.Jobs.TransparentObjects, scene); + GLERROR("TransparentObjects"); + //state->BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + stateSprite->Enable(GL_DEPTH_TEST); + //stateSprite->AlphaFunc(GL_GEQUAL, 0.05f); + //stateSprite->Enable(GL_ALPHA_TEST); + DrawSprites(scene.Jobs.SpriteJob, scene); + GLERROR("SpriteJobs"); + + delete stateSprite; + + state = new DrawFinalPassState(m_FinalPassFrameBuffer.GetHandle()); //state->Disable(GL_STENCIL_TEST); //Draw Transparen Shielded objects state->BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + textPass->Draw(scene, m_FinalPassFrameBuffer); DrawModelRenderQueuesWithShieldCheck(scene.Jobs.TransparentObjects, scene); //might need changing GLERROR("Shielded Transparent objects"); @@ -296,27 +322,7 @@ void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass) m_FullBlurredTexture = blurHUDPass->Draw(m_SceneTexture, scene); } - DrawFinalPassState* stateSprite = new DrawFinalPassState(m_FinalPassFrameBuffer.GetHandle()); - if(scene.ShouldBlur) { - //Combine nonblur and blur texture - stateSprite->Disable(GL_DEPTH_TEST); - stateSprite->Disable(GL_STENCIL_TEST); - m_CombinedTexture = blurHUDPass->CombineTextures(m_SceneTexture, m_FullBlurredTexture); - - } - //Draw Transparen objects - //state->BlendFunc(GL_ONE, GL_ONE); - //state->StencilFunc(GL_EQUAL, 1, 0xFF); - //DrawModelRenderQueues(scene.Jobs.TransparentObjects, scene); - GLERROR("TransparentObjects"); - //state->BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - stateSprite->Enable(GL_DEPTH_TEST); - //stateSprite->AlphaFunc(GL_GEQUAL, 0.05f); - //stateSprite->Enable(GL_ALPHA_TEST); - DrawSprites(scene.Jobs.SpriteJob, scene); - GLERROR("SpriteJobs"); - - delete stateSprite; + GLERROR("END"); } diff --git a/src/Engine/Rendering/Renderer.cpp b/src/Engine/Rendering/Renderer.cpp index eecb5a7a..4d01abb8 100644 --- a/src/Engine/Rendering/Renderer.cpp +++ b/src/Engine/Rendering/Renderer.cpp @@ -210,14 +210,15 @@ void Renderer::Draw(RenderFrame& frame) PerformanceTimer::StartTimerAndStopPrevious("Renderer-Light Culling"); m_LightCullingPass->CullLights(*scene); GLERROR("LightCulling"); + PerformanceTimer::StartTimerAndStopPrevious("Renderer-Draw Text"); + //m_TextPass->Draw(*scene, *m_DrawFinalPass->FinalPassFrameBuffer()); + GLERROR("Draw Text"); PerformanceTimer::StartTimerAndStopPrevious("Renderer-Draw Geometry+Light"); - m_DrawFinalPass->Draw(*scene, m_BlurHUDPass); + m_DrawFinalPass->Draw(*scene, m_BlurHUDPass, m_TextPass); GLERROR("Draw Geometry+Light"); //m_DrawScenePass->Draw(*scene); - PerformanceTimer::StartTimerAndStopPrevious("Renderer-Draw Text"); - m_TextPass->Draw(*scene, *m_DrawFinalPass->FinalPassFrameBuffer()); - GLERROR("Draw Text"); + PerformanceTimer::StopTimer("Renderer-Draw Text"); } diff --git a/src/Engine/Rendering/TextPass.cpp b/src/Engine/Rendering/TextPass.cpp index 9583fcfd..f5b370c7 100644 --- a/src/Engine/Rendering/TextPass.cpp +++ b/src/Engine/Rendering/TextPass.cpp @@ -34,7 +34,7 @@ void TextPass::Update() void TextPass::Draw(RenderScene& scene, FrameBuffer& frameBuffer) { GLERROR("Derp1"); - TextPassState* state = new TextPassState(frameBuffer.GetHandle()); + //TextPassState* state = new TextPassState(frameBuffer.GetHandle()); for (auto &job : scene.Jobs.Text) { auto textJob = std::dynamic_pointer_cast(job); if (textJob) { @@ -43,7 +43,7 @@ void TextPass::Draw(RenderScene& scene, FrameBuffer& frameBuffer) } } GLERROR("Derp2"); - delete state; + // delete state; } void TextPass::renderText(std::string text, Font* font, TextJob::AlignmentEnum alignment, glm::vec4 color, glm::mat4 modelMatrix, glm::mat4 projectionMatrix, glm::mat4 viewMatrix) diff --git a/src/Engine/Rendering/TextPassState.cpp b/src/Engine/Rendering/TextPassState.cpp index d285a1f0..17e7b266 100644 --- a/src/Engine/Rendering/TextPassState.cpp +++ b/src/Engine/Rendering/TextPassState.cpp @@ -4,10 +4,13 @@ TextPassState::TextPassState(GLuint frameBuffer) { BindFramebuffer(frameBuffer); - glEnable(GL_BLEND); - glDisable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + Enable(GL_BLEND); + Disable(GL_CULL_FACE); + Enable(GL_DEPTH_TEST); + BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + Enable(GL_ALPHA_TEST); + AlphaFunc(GL_GEQUAL, 0.05f); + } TextPassState::~TextPassState()