summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
diff options
context:
space:
mode:
authorJules Blok <jules.blok@gmail.com>2014-12-20 16:48:57 +0100
committerJules Blok <jules.blok@gmail.com>2014-12-24 17:22:22 +0100
commit12412ac5b70266176982ae74a2bd4a8ba333f8f9 (patch)
tree59dfbbd9ffd4ead89bdc16c4796a2d75aaabb1f0 /Source/Core/VideoBackends/OGL/FramebufferManager.cpp
parent5526b3932018cfd9245fe76848861b8a0ceae3bf (diff)
FramebufferManager: Copy all EFB layers to the XFB framebuffer.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/FramebufferManager.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/FramebufferManager.cpp21
1 files changed, 12 insertions, 9 deletions
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);