[drape] use overlay tree to clean image rendering

This commit is contained in:
ExMix 2014-04-09 12:57:14 +03:00 committed by Alex Zolotarev
parent 24ff3d5551
commit b8e5f3bded
4 changed files with 19 additions and 0 deletions

View file

@ -56,6 +56,11 @@ GLState::GLState(uint32_t gpuProgramIndex, DepthLayer depthLayer)
{
}
const GLState::DepthLayer &GLState::GetDepthLayer() const
{
return m_depthLayer;
}
void GLState::SetTextureSet(int32_t textureSet)
{
m_mask |= TEXTURE_BIT;

View file

@ -31,6 +31,8 @@ public:
GLState(uint32_t gpuProgramIndex, DepthLayer depthLayer);
DepthLayer const & GetDepthLayer() const;
void SetTextureSet(int32_t textureSet);
int32_t GetTextureSet() const;
bool HasTextureSet() const;

View file

@ -186,6 +186,9 @@ namespace df
GLFunctions::glDepthMask(true);
GLFunctions::glClear();
m_overlayTree.StartOverlayPlacing(m_view);
for_each(m_renderData.begin(), m_renderData.end(), bind(&FrontendRenderer::CollectOverlay, this, _1));
m_overlayTree.EndOverlayPlacing();
for_each(m_renderData.begin(), m_renderData.end(), bind(&FrontendRenderer::RenderPartImpl, this, _1));
#ifdef DRAW_INFO
@ -216,6 +219,12 @@ namespace df
m_generalUniforms.SetMatrix4x4Value("modelView", mv.m_data);
}
void FrontendRenderer::CollectOverlay(pair<const GLState, MasterPointer<RenderBucket> > & node)
{
if (node.first.GetDepthLayer() == GLState::OverlayLayer)
node.second->CollectOverlayHandles(MakeStackRefPointer(&m_overlayTree));
}
void FrontendRenderer::RenderPartImpl(pair<const GLState, MasterPointer<RenderBucket> > & node)
{
RefPointer<GpuProgram> program = m_gpuProgramManager->GetProgram(node.first.GetProgramIndex());

View file

@ -19,6 +19,7 @@
#include "../drape/gpu_program_manager.hpp"
#include "../drape/oglcontextfactory.hpp"
#include "../drape/texture_set_controller.hpp"
#include "../drape/overlay_tree.hpp"
#include "../drape/uniform_values_storage.hpp"
@ -62,6 +63,7 @@ namespace df
void RefreshProjection();
void RefreshModelView();
void CollectOverlay(pair<const GLState, MasterPointer<RenderBucket> > & node);
void RenderPartImpl(pair<const GLState, MasterPointer<RenderBucket> > & node);
private:
@ -94,5 +96,6 @@ namespace df
UniformValuesStorage m_generalUniforms;
Viewport m_viewport;
ScreenBase m_view;
OverlayTree m_overlayTree;
};
}