Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
index 3651a90c5494e794652439e1b2b18b4e8a79b058..ee7582839011c5b5797487c6075baf3e63d18f71 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
@@ -569,6 +569,9 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient { |
void RestoreAllAttributes() const override; |
QueryManager* GetQueryManager() override { return query_manager_.get(); } |
+ FramebufferManager* GetFramebufferManager() override { |
+ return framebuffer_manager_.get(); |
+ } |
TransformFeedbackManager* GetTransformFeedbackManager() override { |
return transform_feedback_manager_.get(); |
} |
@@ -723,7 +726,7 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient { |
} |
FramebufferManager* framebuffer_manager() { |
- return group_->framebuffer_manager(); |
+ return framebuffer_manager_.get(); |
} |
ProgramManager* program_manager() { |
@@ -2322,6 +2325,8 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient { |
// Whether the client requested an offscreen buffer with an alpha channel. |
bool offscreen_buffer_should_have_alpha_; |
+ std::unique_ptr<FramebufferManager> framebuffer_manager_; |
+ |
std::unique_ptr<QueryManager> query_manager_; |
std::unique_ptr<VertexArrayManager> vertex_array_manager_; |
@@ -3250,6 +3255,11 @@ bool GLES2DecoderImpl::Initialize( |
// vertex_attrib_manager is set to default_vertex_attrib_manager by this call |
DoBindVertexArrayOES(0); |
+ framebuffer_manager_.reset(new FramebufferManager( |
+ group_->max_draw_buffers(), group_->max_color_attachments(), |
+ group_->framebuffer_completeness_cache())); |
+ group_->texture_manager()->AddFramebufferManager(framebuffer_manager_.get()); |
+ |
query_manager_.reset(new QueryManager(this, feature_info_.get())); |
image_manager_.reset(new ImageManager); |
@@ -4856,6 +4866,14 @@ void GLES2DecoderImpl::Destroy(bool have_context) { |
srgb_converter_.reset(); |
clear_framebuffer_blit_.reset(); |
+ if (framebuffer_manager_.get()) { |
+ framebuffer_manager_->Destroy(have_context); |
+ if (group_->texture_manager()) |
+ group_->texture_manager()->RemoveFramebufferManager( |
+ framebuffer_manager_.get()); |
+ framebuffer_manager_.reset(); |
+ } |
+ |
if (query_manager_.get()) { |
query_manager_->Destroy(have_context); |
query_manager_.reset(); |