create color buffer with same pixel format as a render target textures

This commit is contained in:
ExMix 2013-10-31 14:05:43 +03:00 committed by Alex Zolotarev
parent 88088d3c09
commit 08fbee3d41
5 changed files with 46 additions and 20 deletions

View file

@ -3,6 +3,7 @@
#include "utils.hpp"
#include "../../base/logging.hpp"
#include "../../base/assert.hpp"
#include "../../std/list.hpp"
@ -10,22 +11,43 @@ namespace graphics
{
namespace gl
{
RenderBuffer::RenderBuffer(size_t width, size_t height, bool isDepthBuffer)
: m_id(0), m_isDepthBuffer(isDepthBuffer), m_width(width), m_height(height)
RenderBuffer::RenderBuffer(size_t width, size_t height)
: m_id(0), m_isDepthBuffer(true), m_width(width), m_height(height)
{
OGLCHECK(glGenRenderbuffersFn(1, &m_id));
makeCurrent();
OGLCHECK(glRenderbufferStorageFn(GL_RENDERBUFFER_MWM,
GL_DEPTH_COMPONENT16_MWM,
m_width,
m_height));
}
RenderBuffer::RenderBuffer(size_t width, size_t height, graphics::DataFormat format)
: m_id(0), m_isDepthBuffer(false), m_width(width), m_height(height)
{
OGLCHECK(glGenRenderbuffersFn(1, &m_id));
makeCurrent();
GLenum internalFormat;
switch(format)
{
OGLCHECK(glGenRenderbuffersFn(1, &m_id));
makeCurrent();
GLenum target = GL_RENDERBUFFER_MWM;
GLenum internalFormat = m_isDepthBuffer ? GL_DEPTH_COMPONENT16_MWM : GL_RGBA8_MWM;
OGLCHECK(glRenderbufferStorageFn(target,
internalFormat,
m_width,
m_height));
case graphics::Data4Bpp:
internalFormat = GL_RGBA4_MWM;
break;
case graphics::Data8Bpp:
internalFormat = GL_RGBA8_MWM;
break;
default:
ASSERT(false, ("Incorrect color buffer format"));
}
OGLCHECK(glRenderbufferStorageFn(GL_RENDERBUFFER_MWM,
internalFormat,
m_width,
m_height));
}
RenderBuffer::~RenderBuffer()

View file

@ -2,6 +2,7 @@
#include "../../std/shared_ptr.hpp"
#include "../render_target.hpp"
#include "../data_formats.hpp"
namespace graphics
{
@ -19,7 +20,10 @@ namespace graphics
public:
RenderBuffer(size_t width, size_t height, bool isDepthBuffer = false);
// Create depth buffer
RenderBuffer(size_t width, size_t height);
// Create color bufer
RenderBuffer(size_t width, size_t height, graphics::DataFormat format);
~RenderBuffer();
unsigned int id() const;

View file

@ -141,7 +141,7 @@
renderBuffer = make_shared_ptr(new iphone::RenderBuffer(renderContext, (CAEAGLLayer*)self.layer));
screen->setRenderTarget(renderBuffer);
screen->setDepthBuffer(make_shared_ptr(new graphics::gl::RenderBuffer(width, height, true)));
screen->setDepthBuffer(make_shared_ptr(new graphics::gl::RenderBuffer(width, height)));
GetFramework().OnSize(width, height);

View file

@ -92,8 +92,9 @@ TileRenderer::TileRenderer(
m_threadData[i].m_drawerParams = params;
m_threadData[i].m_drawer = 0;
m_threadData[i].m_threadSlot = params.m_threadSlot;
m_threadData[i].m_colorBuffer = make_shared_ptr(new graphics::gl::RenderBuffer(tileSz.first, tileSz.second, false));
m_threadData[i].m_depthBuffer = make_shared_ptr(new graphics::gl::RenderBuffer(tileSz.first, tileSz.second, true));
m_threadData[i].m_colorBuffer = make_shared_ptr(new graphics::gl::RenderBuffer(tileSz.first, tileSz.second,
m_resourceManager->params().m_texRtFormat));
m_threadData[i].m_depthBuffer = make_shared_ptr(new graphics::gl::RenderBuffer(tileSz.first, tileSz.second));
}
m_queue.AddInitCommand(bind(&TileRenderer::InitializeThreadGL, this, _1));

View file

@ -129,7 +129,6 @@ YopmeRP::YopmeRP(RenderPolicy::Params const & p)
m_drawer.reset(CreateDrawer(p.m_useDefaultFB, p.m_primaryRC, ESmallStorage, ESmallTexture));
m_offscreenDrawer.reset(CreateDrawer(false, p.m_primaryRC, ELargeStorage, ELargeTexture));
m_offscreenDrawer->screen()->setDepthBuffer(make_shared_ptr(new gl::RenderBuffer(p.m_screenWidth, p.m_screenHeight, true)));
InitCacheScreen();
InitWindowsHandle(p.m_videoTimer, p.m_primaryRC);
@ -235,8 +234,8 @@ void YopmeRP::OnSize(int w, int h)
{
RenderPolicy::OnSize(w, h);
m_offscreenDrawer->onSize(w, h);
m_offscreenDrawer->screen()->setDepthBuffer(make_shared_ptr(new gl::RenderBuffer(w, h, true)));
m_offscreenDrawer->screen()->setRenderTarget(make_shared_ptr(new gl::RenderBuffer(w, h, false)));
m_offscreenDrawer->screen()->setDepthBuffer(make_shared_ptr(new gl::RenderBuffer(w, h)));
m_offscreenDrawer->screen()->setRenderTarget(make_shared_ptr(new gl::RenderBuffer(w, h, m_resourceManager->params().m_texRtFormat)));
}
void YopmeRP::SetDrawingApiPin(bool isNeed, m2::PointD const & point)