Upload the color/stencil buffers on FBO creation.

Fixes pausing or loading a savestate in Star Ocean (previously your
character became invisible until the screen panned.)
This commit is contained in:
Unknown W. Brackets 2014-06-17 23:55:09 -07:00
parent 171a865b37
commit a9da3618ba
3 changed files with 22 additions and 1 deletions

View file

@ -186,6 +186,17 @@ void FramebufferManager::ClearBuffer() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
}
void FramebufferManager::ClearDepthBuffer() {
glstate.scissorTest.disable();
glstate.depthWrite.set(GL_TRUE);
#ifdef USING_GLES2
glClearDepthf(1.0f);
#else
glClearDepth(1.0);
#endif
glClear(GL_DEPTH_BUFFER_BIT);
}
void FramebufferManager::DisableState() {
glstate.blend.disable();
glstate.cullFace.disable();
@ -960,7 +971,6 @@ void FramebufferManager::DoSetRenderFrameBuffer() {
}
INFO_LOG(SCEGE, "Creating FBO for %08x : %i x %i x %i", vfb->fb_address, vfb->width, vfb->height, vfb->format);
ClearBuffer();
textureCache_->NotifyFramebuffer(vfb->fb_address, vfb, NOTIFY_FB_CREATED);
@ -976,6 +986,15 @@ void FramebufferManager::DoSetRenderFrameBuffer() {
framebufRangeEnd_ = fb_address_mem + byteSize;
}
if (useBufferedRendering_ && !updateVRAM_) {
gpu->PerformMemoryUpload(fb_address_mem, byteSize);
gpu->PerformStencilUpload(fb_address_mem, byteSize);
// TODO: Is it worth trying to upload the depth buffer?
ClearDepthBuffer();
} else {
ClearBuffer();
}
// Let's check for depth buffer overlap. Might be interesting.
bool sharingReported = false;
for (size_t i = 0, end = vfbs_.size(); i < end; ++i) {