summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/Render.cpp
diff options
context:
space:
mode:
authorMarkus Wick <markus+github@selfnet.de>2014-12-26 13:25:33 +0100
committerMarkus Wick <markus+github@selfnet.de>2014-12-26 13:25:33 +0100
commita86865d1c42baced251204f1474bed65727637bc (patch)
tree7be2bb799f930fd150488232ae16a4a54f99318c /Source/Core/VideoBackends/OGL/Render.cpp
parentf71c4b5768579aff6986543c10ed8b24169e2589 (diff)
parent833513f38413dc0f6af47067b223125c3de3eeaf (diff)
Merge pull request #1740 from Armada651/stereo-xfb
Support stereoscopy with Virtual XFB
Diffstat (limited to 'Source/Core/VideoBackends/OGL/Render.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/Render.cpp33
1 files changed, 18 insertions, 15 deletions
diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp
index a03f8cd61d..2def435a11 100644
--- a/Source/Core/VideoBackends/OGL/Render.cpp
+++ b/Source/Core/VideoBackends/OGL/Render.cpp
@@ -1270,6 +1270,22 @@ void Renderer::ClearScreen(const EFBRectangle& rc, bool colorEnable, bool alphaE
ClearEFBCache();
}
+void Renderer::BlitScreen(TargetRectangle src, TargetRectangle dst, GLuint src_texture, int src_width, int src_height)
+{
+ if (g_ActiveConfig.iStereoMode == STEREO_SBS || g_ActiveConfig.iStereoMode == STEREO_TAB)
+ {
+ TargetRectangle leftRc, rightRc;
+ ConvertStereoRectangle(dst, leftRc, rightRc);
+
+ m_post_processor->BlitFromTexture(src, leftRc, src_texture, src_width, src_height, 0);
+ m_post_processor->BlitFromTexture(src, rightRc, src_texture, src_width, src_height, 1);
+ }
+ else
+ {
+ m_post_processor->BlitFromTexture(src, dst, src_texture, src_width, src_height);
+ }
+}
+
void Renderer::ReinterpretPixelData(unsigned int convtype)
{
if (convtype == 0 || convtype == 2)
@@ -1473,8 +1489,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co
sourceRc.right -= fbStride - fbWidth;
- // TODO: Virtual XFB stereoscopic 3D support.
- m_post_processor->BlitFromTexture(sourceRc, drawRc, xfbSource->texture, xfbSource->texWidth, xfbSource->texHeight, 1);
+ BlitScreen(sourceRc, drawRc, xfbSource->texture, xfbSource->texWidth, xfbSource->texHeight);
}
}
else
@@ -1483,19 +1498,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co
// for msaa mode, we must resolve the efb content to non-msaa
GLuint tex = FramebufferManager::ResolveAndGetRenderTarget(rc);
-
- if (g_ActiveConfig.iStereoMode == STEREO_SBS || g_ActiveConfig.iStereoMode == STEREO_TAB)
- {
- TargetRectangle leftRc, rightRc;
- ConvertStereoRectangle(flipped_trc, leftRc, rightRc);
-
- m_post_processor->BlitFromTexture(targetRc, leftRc, tex, s_target_width, s_target_height, 0);
- m_post_processor->BlitFromTexture(targetRc, rightRc, tex, s_target_width, s_target_height, 1);
- }
- else
- {
- m_post_processor->BlitFromTexture(targetRc, flipped_trc, tex, s_target_width, s_target_height);
- }
+ BlitScreen(targetRc, flipped_trc, tex, s_target_width, s_target_height);
}
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);