return GL_RGBA8 as main format for RenderBuffer

This commit is contained in:
ExMix 2013-11-10 11:53:34 +03:00 committed by Alex Zolotarev
parent 0169eec293
commit d38c009b01
7 changed files with 24 additions and 35 deletions

View file

@ -11,40 +11,22 @@ namespace graphics
{
namespace gl
{
RenderBuffer::RenderBuffer(size_t width, size_t height)
: m_id(0), m_isDepthBuffer(true), m_width(width), m_height(height)
RenderBuffer::RenderBuffer(size_t width, size_t height, bool isDepthBuffer, bool isRgba4)
: m_id(0), m_isDepthBuffer(isDepthBuffer), 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));
}
GLenum target = GL_RENDERBUFFER_MWM;
GLenum internalFormat = m_isDepthBuffer ? GL_DEPTH_COMPONENT16_MWM : GL_RGBA8_MWM;
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)
{
case graphics::Data4Bpp:
if (m_isDepthBuffer == false && isRgba4 == true)
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,
if (m_isDepthBuffer == false)
LOG(LINFO, ("Color buffer format : ", internalFormat));
OGLCHECK(glRenderbufferStorageFn(target,
internalFormat,
m_width,
m_height));

View file

@ -21,9 +21,7 @@ namespace graphics
public:
// Create depth buffer
RenderBuffer(size_t width, size_t height);
// Create color bufer
RenderBuffer(size_t width, size_t height, graphics::DataFormat format);
RenderBuffer(size_t width, size_t height, bool isDepthBuffer = false, bool isRgba4 = false);
~RenderBuffer();
unsigned int id() const;

View file

@ -248,6 +248,13 @@ namespace
if (isGPU("Imagination Technologies", "PowerVR MBX", false))
m_texRtFormat = graphics::Data8Bpp;
m_rgba4RenderBuffer = false;
#ifdef OMIM_OS_ANDROID
if (isGPU("NVIDIA Corporation", "NVIDIA Tegra", false))
m_rgba4RenderBuffer = true;
#endif
LOG(LINFO, ("using GL_RGBA4 for color buffer : ", m_rgba4RenderBuffer));
LOG(LINFO, ("selected", graphics::formatName(m_texRtFormat), "format for tile textures"));
}

View file

@ -199,6 +199,8 @@ namespace graphics
unsigned m_renderThreadsCount;
unsigned m_threadSlotsCount;
bool m_rgba4RenderBuffer;
Params();
void distributeFreeMemory(int freeVideoMemory);

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)));
screen->setDepthBuffer(make_shared_ptr(new graphics::gl::RenderBuffer(width, height, true)));
GetFramework().OnSize(width, height);

View file

@ -92,9 +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,
m_resourceManager->params().m_texRtFormat));
m_threadData[i].m_depthBuffer = make_shared_ptr(new graphics::gl::RenderBuffer(tileSz.first, tileSz.second));
m_threadData[i].m_colorBuffer = make_shared_ptr(new graphics::gl::RenderBuffer(tileSz.first, tileSz.second, false,
m_resourceManager->params().m_rgba4RenderBuffer));
m_threadData[i].m_depthBuffer = make_shared_ptr(new graphics::gl::RenderBuffer(tileSz.first, tileSz.second, true));
}
m_queue.AddInitCommand(bind(&TileRenderer::InitializeThreadGL, this, _1));

View file

@ -234,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)));
m_offscreenDrawer->screen()->setRenderTarget(make_shared_ptr(new gl::RenderBuffer(w, h, m_resourceManager->params().m_texRtFormat)));
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)));
}
void YopmeRP::SetDrawingApiPin(bool isNeed, m2::PointD const & point)