From e9ad3a6eba1bab3f1b2cbb18aae952074599679a Mon Sep 17 00:00:00 2001 From: Bastien Brunnenstein Date: Thu, 13 Jun 2019 23:51:22 +0200 Subject: [PATCH] Use SRGB texture format on backbuffer when MSAA is enabled --- src/renderer_d3d11.cpp | 5 ++++- src/renderer_d3d12.cpp | 5 ++++- src/renderer_gl.cpp | 7 ++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index c0ebc2ea1..0daf936ab 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -1006,7 +1006,10 @@ namespace bgfx { namespace d3d11 bx::memSet(&m_scd, 0, sizeof(m_scd) ); m_scd.width = _init.resolution.width; m_scd.height = _init.resolution.height; - m_scd.format = s_textureFormat[_init.resolution.format].m_fmt; + m_scd.format = (_init.resolution.reset & BGFX_RESET_SRGB_BACKBUFFER) + ? s_textureFormat[_init.resolution.format].m_fmtSrgb + : s_textureFormat[_init.resolution.format].m_fmt + ; updateMsaa(m_scd.format); m_scd.sampleDesc = s_msaa[(_init.resolution.reset&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT]; diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index cff9ef9c6..94c56b932 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -934,7 +934,10 @@ namespace bgfx { namespace d3d12 bx::memSet(&m_scd, 0, sizeof(m_scd) ); m_scd.width = _init.resolution.width; m_scd.height = _init.resolution.height; - m_scd.format = s_textureFormat[_init.resolution.format].m_fmt; + m_scd.format = (_init.resolution.reset & BGFX_RESET_SRGB_BACKBUFFER) + ? s_textureFormat[_init.resolution.format].m_fmtSrgb + : s_textureFormat[_init.resolution.format].m_fmt + ; m_scd.stereo = false; updateMsaa(m_scd.format); diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 32684fb66..0677580e1 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -3277,11 +3277,16 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) ); if (0 == m_msaaBackBufferFbo // iOS && 1 < _msaa) { + GLenum storageFormat = (m_resolution.reset & BGFX_RESET_SRGB_BACKBUFFER) + ? GL_SRGB8_ALPHA8 + : GL_RGBA8 + ; + GL_CHECK(glGenFramebuffers(1, &m_msaaBackBufferFbo) ); GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_msaaBackBufferFbo) ); GL_CHECK(glGenRenderbuffers(BX_COUNTOF(m_msaaBackBufferRbos), m_msaaBackBufferRbos) ); GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_msaaBackBufferRbos[0]) ); - GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER, _msaa, GL_RGBA8, _width, _height) ); + GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER, _msaa, storageFormat, _width, _height) ); GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_msaaBackBufferRbos[1]) ); GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER, _msaa, GL_DEPTH24_STENCIL8, _width, _height) ); GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_msaaBackBufferRbos[0]) );