diff options
| author | Markus Wick <markus+github@selfnet.de> | 2014-12-26 13:25:33 +0100 |
|---|---|---|
| committer | Markus Wick <markus+github@selfnet.de> | 2014-12-26 13:25:33 +0100 |
| commit | a86865d1c42baced251204f1474bed65727637bc (patch) | |
| tree | 7be2bb799f930fd150488232ae16a4a54f99318c /Source/Core/VideoBackends/OGL/Render.cpp | |
| parent | f71c4b5768579aff6986543c10ed8b24169e2589 (diff) | |
| parent | 833513f38413dc0f6af47067b223125c3de3eeaf (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.cpp | 33 |
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); |
