If a larger framebuffer is needed, upgrade it once.

This should prevent issues where it gets larger and smaller like in the
past.
This commit is contained in:
Unknown W. Brackets 2014-04-12 20:46:38 -07:00
parent dde2f3ade6
commit 1f76adb7a3
2 changed files with 16 additions and 2 deletions

View file

@ -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;

View file

@ -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,