Index: gpu/command_buffer/service/framebuffer_manager.cc |
diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc |
index 2460a1eb6226f9098c3588fb5a39cf281b109bfd..b78a5dcb6bc8976fdda9da4eb4c7e02aa6cd0887 100644 |
--- a/gpu/command_buffer/service/framebuffer_manager.cc |
+++ b/gpu/command_buffer/service/framebuffer_manager.cc |
@@ -87,6 +87,8 @@ |
renderbuffer_->AddToSignature(signature); |
} |
+ void OnWillRenderTo() const override {} |
+ void OnDidRenderTo() const override {} |
bool FormsFeedbackLoop(TextureRef* /* texture */, |
GLint /*level */) const override { |
return false; |
@@ -177,6 +179,7 @@ |
void DetachFromFramebuffer(Framebuffer* framebuffer) const override { |
texture_ref_->texture()->DetachFromFramebuffer(); |
+ framebuffer->OnTextureRefDetached(texture_ref_.get()); |
} |
bool ValidForAttachmentType(GLenum attachment_type, |
@@ -211,6 +214,14 @@ |
texture_ref_.get(), target_, level_, signature); |
} |
+ void OnWillRenderTo() const override { |
+ texture_ref_->texture()->OnWillModifyPixels(); |
+ } |
+ |
+ void OnDidRenderTo() const override { |
+ texture_ref_->texture()->OnDidModifyPixels(); |
+ } |
+ |
bool FormsFeedbackLoop(TextureRef* texture, GLint level) const override { |
return texture == texture_ref_.get() && level == level_; |
} |
@@ -226,6 +237,10 @@ |
DISALLOW_COPY_AND_ASSIGN(TextureAttachment); |
}; |
+ |
+FramebufferManager::TextureDetachObserver::TextureDetachObserver() {} |
+ |
+FramebufferManager::TextureDetachObserver::~TextureDetachObserver() {} |
FramebufferManager::FramebufferManager( |
uint32 max_draw_buffers, |
@@ -698,6 +713,28 @@ |
return GetAttachment(read_buffer_); |
} |
+void Framebuffer::OnTextureRefDetached(TextureRef* texture) { |
+ manager_->OnTextureRefDetached(texture); |
+} |
+ |
+void Framebuffer::OnWillRenderTo(GLenum attachment) const { |
+ for (AttachmentMap::const_iterator it = attachments_.begin(); |
+ it != attachments_.end(); ++it) { |
+ if (attachment == 0 || attachment == it->first) { |
+ it->second->OnWillRenderTo(); |
+ } |
+ } |
+} |
+ |
+void Framebuffer::OnDidRenderTo(GLenum attachment) const { |
+ for (AttachmentMap::const_iterator it = attachments_.begin(); |
+ it != attachments_.end(); ++it) { |
+ if (attachment == 0 || attachment == it->first) { |
+ it->second->OnDidRenderTo(); |
+ } |
+ } |
+} |
+ |
bool FramebufferManager::GetClientId( |
GLuint service_id, GLuint* client_id) const { |
// This doesn't need to be fast. It's only used during slow queries. |
@@ -735,5 +772,15 @@ |
framebuffer_state_change_count_; |
} |
+void FramebufferManager::OnTextureRefDetached(TextureRef* texture) { |
+ for (TextureDetachObserverVector::iterator it = |
+ texture_detach_observers_.begin(); |
+ it != texture_detach_observers_.end(); |
+ ++it) { |
+ TextureDetachObserver* observer = *it; |
+ observer->OnTextureRefDetachedFromFramebuffer(texture); |
+ } |
+} |
+ |
} // namespace gles2 |
} // namespace gpu |