From 725a8896ceee6d6941a1130a60e869aa4454fecf Mon Sep 17 00:00:00 2001 From: Tleety Date: Fri, 11 Dec 2015 13:51:08 +0100 Subject: [PATCH] PickingPass now publishes an event that others can listen to to get pickingdata. --- include/Engine/Rendering/PickingPass.h | 6 +++++- src/Engine/Rendering/PickingPass.cpp | 15 ++++++++++++++- src/Engine/Rendering/Renderer.cpp | 12 +----------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/include/Engine/Rendering/PickingPass.h b/include/Engine/Rendering/PickingPass.h index 313751d5..78c195a5 100644 --- a/include/Engine/Rendering/PickingPass.h +++ b/include/Engine/Rendering/PickingPass.h @@ -6,11 +6,13 @@ #include "FrameBuffer.h" #include "ShaderProgram.h" #include "Util/UnorderedMapVec2.h" +#include "../Core/EventBroker.h" +#include "EPicking.h" class PickingPass { public: - PickingPass(IRenderer* renderer); + PickingPass(IRenderer* renderer, EventBroker* eb); ~PickingPass(); void InitializeTextures(); void InitializeFrameBuffers(); @@ -30,6 +32,8 @@ public: private: void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const; + EventBroker* m_EventBroker; + const IRenderer* m_Renderer; ShaderProgram m_PickingProgram; diff --git a/src/Engine/Rendering/PickingPass.cpp b/src/Engine/Rendering/PickingPass.cpp index 5b44cbf4..e254f379 100644 --- a/src/Engine/Rendering/PickingPass.cpp +++ b/src/Engine/Rendering/PickingPass.cpp @@ -1,8 +1,10 @@ #include "Rendering/PickingPass.h" -PickingPass::PickingPass(IRenderer* renderer) +PickingPass::PickingPass(IRenderer* renderer, EventBroker* eb) { m_Renderer = renderer; + m_EventBroker = eb; + InitializeTextures(); InitializeFrameBuffers(); InitializeShaderPrograms(); @@ -89,6 +91,17 @@ void PickingPass::Draw(RenderQueueCollection& rq) } m_PickingBuffer.Unbind(); GLERROR("PickingPass Error"); + + //Publish pick event every frame with the pick data that can be picked by the event + Events::Picking pickEvent = Events::Picking( + &m_PickingBuffer, + &m_DepthBuffer, + m_Renderer->Camera()->ProjectionMatrix(), + m_Renderer->Camera()->ViewMatrix(), + m_Renderer->Resolution(), + &m_PickingColorsToEntity); + + m_EventBroker->Publish(pickEvent); } void PickingPass::GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const diff --git a/src/Engine/Rendering/Renderer.cpp b/src/Engine/Rendering/Renderer.cpp index a3331414..b479acaf 100644 --- a/src/Engine/Rendering/Renderer.cpp +++ b/src/Engine/Rendering/Renderer.cpp @@ -263,16 +263,6 @@ void Renderer::DrawScene(RenderQueueCollection& rq) //m_PickingBuffer.Unbind(); //GLERROR("PickingPass Error"); - //Publish pick event every frame with the pick data that can be picked by the event - Events::Picking pickEvent = Events::Picking( - &m_PickingBuffer, - &m_DepthBuffer, - m_Camera->ProjectionMatrix(), - m_Camera->ViewMatrix(), - m_Resolution, - &m_PickingColorsToEntity); - - m_EventBroker->Publish(pickEvent); void Renderer::DrawScreenQuad(GLuint textureToDraw) { @@ -384,7 +374,7 @@ void Renderer::InitializeSSBOs() void Renderer::InitializeRenderPasses() { - m_PickingPass = new PickingPass(this); + m_PickingPass = new PickingPass(this, m_EventBroker); } void Renderer::CalculateFrustum()