mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-09-06 04:35:29 +02:00
Fix memcpy to framebuffer to not invalidate.
This is much better.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user