mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Keep a map of temporary buffers for self renders.
This commit is contained in:
parent
c6dc6b46e5
commit
9cfb8648c0
2 changed files with 18 additions and 15 deletions
|
@ -305,8 +305,7 @@ FramebufferManager::FramebufferManager() :
|
|||
shaderManager_(0),
|
||||
usePostShader_(false),
|
||||
postShaderAtOutputResolution_(false),
|
||||
resized_(false),
|
||||
renderCopy_(0)
|
||||
resized_(false)
|
||||
#ifndef USING_GLES2
|
||||
,
|
||||
pixelBufObj_(0),
|
||||
|
@ -332,8 +331,9 @@ FramebufferManager::~FramebufferManager() {
|
|||
}
|
||||
SetNumExtraFBOs(0);
|
||||
|
||||
if (renderCopy_)
|
||||
fbo_destroy(renderCopy_);
|
||||
for (auto it = renderCopies_.begin(), end = renderCopies_.end(); it != end; ++it) {
|
||||
fbo_destroy(it->second);
|
||||
}
|
||||
|
||||
#ifndef USING_GLES2
|
||||
delete [] pixelBufObj_;
|
||||
|
@ -945,15 +945,20 @@ void FramebufferManager::BindFramebufferColor(VirtualFramebuffer *framebuffer) {
|
|||
#ifdef MAY_HAVE_GLES3
|
||||
|
||||
// TODO: Maybe merge with bvfbs_? Not sure if those could be packing, and they're created at a different size.
|
||||
if (!renderCopy_ || renderCopyWidth_ != framebuffer->renderWidth || renderCopyHeight_ != framebuffer->renderHeight) {
|
||||
if (renderCopy_)
|
||||
fbo_destroy(renderCopy_);
|
||||
renderCopy_ = fbo_create(framebuffer->renderWidth, framebuffer->renderHeight, 1, true, framebuffer->colorDepth);
|
||||
renderCopyWidth_ = framebuffer->renderWidth;
|
||||
renderCopyHeight_ = framebuffer->renderHeight;
|
||||
FBO *renderCopy = NULL;
|
||||
std::pair<int, int> copySize = std::make_pair((int)framebuffer->renderWidth, (int)framebuffer->renderHeight);
|
||||
for (auto it = renderCopies_.begin(), end = renderCopies_.end(); it != end; ++it) {
|
||||
if (it->first == copySize) {
|
||||
renderCopy = it->second;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!renderCopy) {
|
||||
renderCopy = fbo_create(framebuffer->renderWidth, framebuffer->renderHeight, 1, true, framebuffer->colorDepth);
|
||||
renderCopies_[copySize] = renderCopy;
|
||||
}
|
||||
|
||||
fbo_bind_as_render_target(renderCopy_);
|
||||
fbo_bind_as_render_target(renderCopy);
|
||||
glViewport(0, 0, framebuffer->renderWidth, framebuffer->renderHeight);
|
||||
fbo_bind_for_read(framebuffer->fbo);
|
||||
glBlitFramebuffer(0, 0, framebuffer->renderWidth, framebuffer->renderHeight, 0, 0, framebuffer->renderWidth, framebuffer->renderHeight, GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
|
@ -961,7 +966,7 @@ void FramebufferManager::BindFramebufferColor(VirtualFramebuffer *framebuffer) {
|
|||
fbo_bind_as_render_target(currentRenderVfb_->fbo);
|
||||
if (gl_extensions.gpuVendor != GPU_VENDOR_POWERVR)
|
||||
glstate.viewport.restore();
|
||||
fbo_bind_color_as_texture(renderCopy_, 0);
|
||||
fbo_bind_color_as_texture(renderCopy, 0);
|
||||
#endif
|
||||
} else {
|
||||
fbo_bind_color_as_texture(framebuffer->fbo, 0);
|
||||
|
|
|
@ -231,9 +231,7 @@ private:
|
|||
bool useBufferedRendering_;
|
||||
|
||||
std::vector<VirtualFramebuffer *> bvfbs_; // blitting FBOs
|
||||
FBO *renderCopy_;
|
||||
int renderCopyWidth_;
|
||||
int renderCopyHeight_;
|
||||
std::map<std::pair<int, int>, FBO *> renderCopies_;
|
||||
|
||||
std::set<std::pair<u32, u32>> knownFramebufferCopies_;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue