PickingPass now publishes an event that others can listen to to get pickingdata.

This commit is contained in:
Tleety
2015-12-11 13:51:08 +01:00
parent 8c563a2d76
commit 725a8896ce
3 changed files with 20 additions and 13 deletions
+5 -1
View File
@@ -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;
+14 -1
View File
@@ -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
+1 -11
View File
@@ -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()