diff options
Diffstat (limited to 'gpu/command_buffer/service/framebuffer_manager.cc')
-rw-r--r-- | gpu/command_buffer/service/framebuffer_manager.cc | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc index 2460a1e..b78a5dc 100644 --- a/gpu/command_buffer/service/framebuffer_manager.cc +++ b/gpu/command_buffer/service/framebuffer_manager.cc @@ -87,6 +87,8 @@ class RenderbufferAttachment 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 @@ class TextureAttachment void DetachFromFramebuffer(Framebuffer* framebuffer) const override { texture_ref_->texture()->DetachFromFramebuffer(); + framebuffer->OnTextureRefDetached(texture_ref_.get()); } bool ValidForAttachmentType(GLenum attachment_type, @@ -211,6 +214,14 @@ class TextureAttachment 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_; } @@ -227,6 +238,10 @@ class TextureAttachment DISALLOW_COPY_AND_ASSIGN(TextureAttachment); }; +FramebufferManager::TextureDetachObserver::TextureDetachObserver() {} + +FramebufferManager::TextureDetachObserver::~TextureDetachObserver() {} + FramebufferManager::FramebufferManager( uint32 max_draw_buffers, uint32 max_color_attachments, @@ -698,6 +713,28 @@ const Framebuffer::Attachment* Framebuffer::GetReadBufferAttachment() const { 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 @@ bool FramebufferManager::IsComplete( 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 |