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:
parent
171a865b37
commit
a9da3618ba
3 changed files with 22 additions and 1 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue