From 1f76adb7a3f03f01bf038dc22f84a54fcd613f79 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 12 Apr 2014 20:46:38 -0700 Subject: [PATCH] If a larger framebuffer is needed, upgrade it once. This should prevent issues where it gets larger and smaller like in the past. --- GPU/GLES/Framebuffer.cpp | 17 +++++++++++++++-- GPU/GLES/Framebuffer.h | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/GPU/GLES/Framebuffer.cpp b/GPU/GLES/Framebuffer.cpp index 463d3a9669..90265e0807 100644 --- a/GPU/GLES/Framebuffer.cpp +++ b/GPU/GLES/Framebuffer.cpp @@ -708,6 +708,7 @@ void FramebufferManager::DoSetRenderFrameBuffer() { int buffer_width = drawing_width; int buffer_height = drawing_height; + bool embiggened = false; // Find a matching framebuffer VirtualFramebuffer *vfb = 0; @@ -718,8 +719,19 @@ void FramebufferManager::DoSetRenderFrameBuffer() { // Update fb stride in case it changed vfb->fb_stride = fb_stride; if (v->width < drawing_width && v->height < drawing_height) { - v->width = drawing_width; - v->height = drawing_height; + // Embiggen if it gets bigger, but only once. + // This prevents it happening over and over again. + if (!v->embiggened) { + // TODO: Could copy over the data. + embiggened = true; + vfb = NULL; + DestroyFramebuf(v); + vfbs_.erase(vfbs_.begin() + i); + break; + } else { + v->width = drawing_width; + v->height = drawing_height; + } } if (v->format != fmt) { v->width = drawing_width; @@ -755,6 +767,7 @@ void FramebufferManager::DoSetRenderFrameBuffer() { vfb->reallyDirtyAfterDisplay = true; vfb->memoryUpdated = false; vfb->depthUpdated = false; + vfb->embiggened = embiggened; if (g_Config.bTrueColor) { vfb->colorDepth = FBO_8888; diff --git a/GPU/GLES/Framebuffer.h b/GPU/GLES/Framebuffer.h index 2aa9157b9f..ab0a3fa7c9 100644 --- a/GPU/GLES/Framebuffer.h +++ b/GPU/GLES/Framebuffer.h @@ -85,6 +85,7 @@ struct VirtualFramebuffer { bool dirtyAfterDisplay; bool reallyDirtyAfterDisplay; // takes frame skipping into account + bool embiggened; }; void CenterRect(float *x, float *y, float *w, float *h,