Fix memcpy to framebuffer to not invalidate.

This is much better.
This commit is contained in:
Unknown W. Brackets
2013-06-10 00:11:36 -07:00
parent d8618e5028
commit 73ab4d1422
+18 -8
View File
@@ -675,24 +675,34 @@ void FramebufferManager::UpdateFromMemory(u32 addr, int size) {
fbo_unbind();
currentRenderVfb_ = 0;
bool needUnbind = false;
for (auto iter = vfbs_.begin(); iter != vfbs_.end(); ) {
VirtualFramebuffer *vfb = *iter;
if (MaskedEqual(vfb->fb_address, addr)) {
// TODO: This without the fbo_unbind() above would be better than destroying the FBO.
// However, it doesn't seem to work for Star Ocean, at least
//DrawPixels(Memory::GetPointer(addr), vfb->format, vfb->fb_stride);
textureCache_->NotifyFramebufferDestroyed(vfb->fb_address, vfb);
INFO_LOG(HLE, "Invalidating FBO for %08x (%i x %i x %i)", vfb->fb_address, vfb->width, vfb->height, vfb->format)
if (vfb->fbo) {
fbo_destroy(vfb->fbo);
vfb->fbo = 0;
if (g_Config.bBufferedRendering) {
fbo_bind_as_render_target(vfb->fbo);
needUnbind = true;
DrawPixels(Memory::GetPointer(addr), vfb->format, vfb->fb_stride);
++iter;
} else {
textureCache_->NotifyFramebufferDestroyed(vfb->fb_address, vfb);
INFO_LOG(HLE, "Invalidating FBO for %08x (%i x %i x %i)", vfb->fb_address, vfb->width, vfb->height, vfb->format)
if (vfb->fbo) {
fbo_destroy(vfb->fbo);
vfb->fbo = 0;
}
delete vfb;
vfbs_.erase(iter++);
}
delete vfb;
vfbs_.erase(iter++);
}
else
++iter;
}
if (needUnbind)
fbo_unbind();
}
}