| 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
|
|
|