From 5c6dbb8a318012913ee06ca5dbed4ef1cf2da8be Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 14 Dec 2013 04:14:59 +0800 Subject: [PATCH] Restore viewport when switching render targets --- GPU/GLES/Framebuffer.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/GPU/GLES/Framebuffer.cpp b/GPU/GLES/Framebuffer.cpp index fca5872f04..40826593f0 100644 --- a/GPU/GLES/Framebuffer.cpp +++ b/GPU/GLES/Framebuffer.cpp @@ -751,6 +751,7 @@ void FramebufferManager::SetRenderFrameBuffer() { vfb->fbo = fbo_create(vfb->renderWidth, vfb->renderHeight, 1, true, vfb->colorDepth); if (vfb->fbo) { fbo_bind_as_render_target(vfb->fbo); + glstate.viewport.restore(); } else { ERROR_LOG(SCEGE, "Error creating FBO! %i x %i", vfb->renderWidth, vfb->renderHeight); } @@ -946,6 +947,7 @@ void FramebufferManager::CopyDisplayToOutput() { } else if (usePostShader_ && extraFBOs_.size() == 1 && !postShaderAtOutputResolution_) { // An additional pass, post-processing shader to the extra FBO. fbo_bind_as_render_target(extraFBOs_[0]); + glstate.viewport.restore(); int fbo_w, fbo_h; fbo_get_dimensions(extraFBOs_[0], &fbo_w, &fbo_h); glstate.viewport.set(0, 0, fbo_w, fbo_h); @@ -1045,6 +1047,7 @@ void FramebufferManager::ReadFramebufferToMemory(VirtualFramebuffer *vfb, bool s nvfb->last_frame_render = gpuStats.numFlips; bvfbs_.push_back(nvfb); fbo_bind_as_render_target(nvfb->fbo); + glstate.viewport.restore(); ClearBuffer(); glEnable(GL_DITHER); } else { @@ -1056,6 +1059,7 @@ void FramebufferManager::ReadFramebufferToMemory(VirtualFramebuffer *vfb, bool s #ifdef USING_GLES2 if (nvfb->fbo) { fbo_bind_as_render_target(nvfb->fbo); + glstate.viewport.restore(); } // Some tiled mobile GPUs benefit IMMENSELY from clearing an FBO before rendering @@ -1088,6 +1092,7 @@ void FramebufferManager::ReadFramebufferToMemory(VirtualFramebuffer *vfb, bool s void FramebufferManager::BlitFramebuffer_(VirtualFramebuffer *src, VirtualFramebuffer *dst, bool flip, float upscale, float vscale) { if (dst->fbo) { fbo_bind_as_render_target(dst->fbo); + glstate.viewport.restore(); } else { ERROR_LOG_REPORT_ONCE(dstfbozero, SCEGE, "BlitFramebuffer_: dst->fbo == 0"); fbo_unbind(); @@ -1530,6 +1535,7 @@ void FramebufferManager::UpdateFromMemory(u32 addr, int size, bool safe) { DisableState(); glstate.viewport.set(0, 0, vfb->renderWidth, vfb->renderHeight); fbo_bind_as_render_target(vfb->fbo); + glstate.viewport.restore(); needUnbind = true; DrawPixels(Memory::GetPointer(addr | 0x04000000), vfb->format, vfb->fb_stride); } else {