summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
diff options
context:
space:
mode:
authorMichael Maltese <michaeljosephmaltese@gmail.com>2017-03-09 14:55:31 -0800
committerMichael Maltese <michaeljosephmaltese@gmail.com>2017-03-15 17:20:47 -0700
commit56fe938366950062984e11364af5ce1ffe474f27 (patch)
treea26a23b97f62727b617020af633a83b3d0b36618 /Source/Core/VideoBackends/OGL/FramebufferManager.cpp
parent69cedf4144293153d0b40749ae178501db529c89 (diff)
extract OGL::FramebufferManager::BindLayeredTexture
Diffstat (limited to 'Source/Core/VideoBackends/OGL/FramebufferManager.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/FramebufferManager.cpp42
1 files changed, 17 insertions, 25 deletions
diff --git a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
index 144fa20d36..001cbb59fc 100644
--- a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
+++ b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
@@ -88,6 +88,17 @@ GLuint FramebufferManager::CreateTexture(GLenum texture_type, GLenum internal_fo
return texture;
}
+void FramebufferManager::BindLayeredTexture(GLuint texture, const std::vector<GLuint>& framebuffers, GLenum attachment, GLenum texture_type)
+{
+ glBindFramebuffer(GL_FRAMEBUFFER, framebuffers[0]);
+ FramebufferTexture(GL_FRAMEBUFFER, attachment, texture_type, texture, 0);
+ // Bind all the other layers as separate FBOs for blitting.
+ for (unsigned int i = 1; i < m_EFBLayers; i++) {
+ glBindFramebuffer(GL_FRAMEBUFFER, m_resolvedFramebuffer[i]);
+ glFramebufferTextureLayer(GL_FRAMEBUFFER, attachment, texture, 0, i);
+ }
+}
+
FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int msaaSamples)
{
m_xfbFramebuffer = 0;
@@ -145,23 +156,13 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms
// Bind resolved textures to resolved framebuffer.
glGenFramebuffers(m_EFBLayers, m_resolvedFramebuffer.data());
- glBindFramebuffer(GL_FRAMEBUFFER, m_resolvedFramebuffer[0]);
- FramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, resolvedType, m_resolvedColorTexture,
- 0);
- FramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, resolvedType, m_resolvedDepthTexture,
- 0);
-
- // Bind all the other layers as separate FBOs for blitting.
- for (unsigned int i = 1; i < m_EFBLayers; i++)
- {
- glBindFramebuffer(GL_FRAMEBUFFER, m_resolvedFramebuffer[i]);
- glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_resolvedColorTexture, 0, i);
- glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_resolvedDepthTexture, 0, i);
- }
+ BindLayeredTexture(m_resolvedColorTexture, m_resolvedFramebuffer, GL_COLOR_ATTACHMENT0, resolvedType);
+ BindLayeredTexture(m_resolvedDepthTexture, m_resolvedFramebuffer, GL_DEPTH_ATTACHMENT, resolvedType);
}
m_efbColor = CreateTexture(m_textureType, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE);
- m_efbDepth = CreateTexture(m_textureType, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT);
+ m_efbDepth = CreateTexture(m_textureType, GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL,
+ GL_FLOAT_32_UNSIGNED_INT_24_8_REV);
m_efbColorSwap = CreateTexture(m_textureType, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE);
// Create XFB framebuffer; targets will be created elsewhere.
@@ -169,17 +170,8 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms
// Bind target textures to EFB framebuffer.
glGenFramebuffers(m_EFBLayers, m_efbFramebuffer.data());
- glBindFramebuffer(GL_FRAMEBUFFER, m_efbFramebuffer[0]);
- FramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_textureType, m_efbColor, 0);
- FramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_textureType, m_efbDepth, 0);
-
- // Bind all the other layers as separate FBOs for blitting.
- for (unsigned int i = 1; i < m_EFBLayers; i++)
- {
- glBindFramebuffer(GL_FRAMEBUFFER, m_efbFramebuffer[i]);
- glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_efbColor, 0, i);
- glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_efbDepth, 0, i);
- }
+ BindLayeredTexture(m_efbColor, m_efbFramebuffer, GL_COLOR_ATTACHMENT0, m_textureType);
+ BindLayeredTexture(m_efbDepth, m_efbFramebuffer, GL_DEPTH_ATTACHMENT, m_textureType);
// EFB framebuffer is currently bound, make sure to clear it before use.
glViewport(0, 0, m_targetWidth, m_targetHeight);