From 12412ac5b70266176982ae74a2bd4a8ba333f8f9 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Sat, 20 Dec 2014 16:48:57 +0100 Subject: FramebufferManager: Copy all EFB layers to the XFB framebuffer. --- .../Core/VideoBackends/OGL/FramebufferManager.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/FramebufferManager.cpp') diff --git a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp index 731cf389d2..cd37e228a4 100644 --- a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp @@ -509,17 +509,20 @@ void XFBSource::CopyEFB(float Gamma) g_renderer->ResetAPIState(); // Copy EFB data to XFB and restore render target again - glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferManager::GetEFBFramebuffer()); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferManager::GetXFBFramebuffer()); - // Bind texture. - FramebufferManager::FramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_ARRAY, texture, 0); - - glBlitFramebuffer( - 0, 0, texWidth, texHeight, - 0, 0, texWidth, texHeight, - GL_COLOR_BUFFER_BIT, GL_NEAREST - ); + for (int i = 0; i < m_layers; i++) + { + // Bind EFB and texture layer + glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferManager::GetEFBFramebuffer(i)); + glFramebufferTextureLayer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture, 0, i); + + glBlitFramebuffer( + 0, 0, texWidth, texHeight, + 0, 0, texWidth, texHeight, + GL_COLOR_BUFFER_BIT, GL_NEAREST + ); + } // Return to EFB. FramebufferManager::SetFramebuffer(0); -- cgit v1.2.3 From b109b31f6146acd84a4ab702e79e2b99c02b7a9c Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Sat, 20 Dec 2014 17:24:35 +0100 Subject: FramebufferManagerBase: Only allocate one layer for Real XFB. --- Source/Core/VideoBackends/OGL/FramebufferManager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/FramebufferManager.cpp') diff --git a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp index cd37e228a4..2bf01e8085 100644 --- a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp @@ -531,7 +531,7 @@ void XFBSource::CopyEFB(float Gamma) } -XFBSourceBase* FramebufferManager::CreateXFBSource(unsigned int target_width, unsigned int target_height) +XFBSourceBase* FramebufferManager::CreateXFBSource(unsigned int target_width, unsigned int target_height, unsigned int layers) { GLuint texture; @@ -540,9 +540,9 @@ XFBSourceBase* FramebufferManager::CreateXFBSource(unsigned int target_width, un glActiveTexture(GL_TEXTURE0 + 9); glBindTexture(GL_TEXTURE_2D_ARRAY, texture); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, 0); - glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, target_width, target_height, m_EFBLayers, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); + glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, target_width, target_height, layers, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - return new XFBSource(texture, m_EFBLayers); + return new XFBSource(texture, layers); } void FramebufferManager::GetTargetSize(unsigned int *width, unsigned int *height, const EFBRectangle& sourceRc) -- cgit v1.2.3 From 46bb4fd364ccd5e13c2cb13f1d8356526948337e Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Thu, 25 Dec 2014 00:58:16 +0100 Subject: FramebufferManagerBase: Remove obsolete parameters. --- Source/Core/VideoBackends/OGL/FramebufferManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/OGL/FramebufferManager.cpp') diff --git a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp index 2bf01e8085..9a238fc23f 100644 --- a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp @@ -545,7 +545,7 @@ XFBSourceBase* FramebufferManager::CreateXFBSource(unsigned int target_width, un return new XFBSource(texture, layers); } -void FramebufferManager::GetTargetSize(unsigned int *width, unsigned int *height, const EFBRectangle& sourceRc) +void FramebufferManager::GetTargetSize(unsigned int *width, unsigned int *height) { *width = m_targetWidth; *height = m_targetHeight; -- cgit v1.2.3