OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/framebuffer_manager.h" | 5 #include "gpu/command_buffer/service/framebuffer_manager.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
9 #include "gpu/command_buffer/service/framebuffer_completeness_cache.h" | 9 #include "gpu/command_buffer/service/framebuffer_completeness_cache.h" |
10 #include "gpu/command_buffer/service/renderbuffer_manager.h" | 10 #include "gpu/command_buffer/service/renderbuffer_manager.h" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 private: | 100 private: |
101 scoped_refptr<Renderbuffer> renderbuffer_; | 101 scoped_refptr<Renderbuffer> renderbuffer_; |
102 | 102 |
103 DISALLOW_COPY_AND_ASSIGN(RenderbufferAttachment); | 103 DISALLOW_COPY_AND_ASSIGN(RenderbufferAttachment); |
104 }; | 104 }; |
105 | 105 |
106 class TextureAttachment | 106 class TextureAttachment |
107 : public Framebuffer::Attachment { | 107 : public Framebuffer::Attachment { |
108 public: | 108 public: |
109 TextureAttachment( | 109 TextureAttachment( |
110 TextureRef* texture_ref, GLenum target, GLint level, GLsizei samples) | 110 TextureRef* texture_ref, GLenum target, GLint level, |
| 111 GLsizei samples, GLint layer) |
111 : texture_ref_(texture_ref), | 112 : texture_ref_(texture_ref), |
112 target_(target), | 113 target_(target), |
113 level_(level), | 114 level_(level), |
114 samples_(samples) { | 115 samples_(samples), |
| 116 layer_(layer) { |
115 } | 117 } |
116 | 118 |
117 GLsizei width() const override { | 119 GLsizei width() const override { |
118 GLsizei temp_width = 0; | 120 GLsizei temp_width = 0; |
119 GLsizei temp_height = 0; | 121 GLsizei temp_height = 0; |
120 texture_ref_->texture()->GetLevelSize( | 122 texture_ref_->texture()->GetLevelSize( |
121 target_, level_, &temp_width, &temp_height, nullptr); | 123 target_, level_, &temp_width, &temp_height, nullptr); |
122 return temp_width; | 124 return temp_width; |
123 } | 125 } |
124 | 126 |
(...skipping 16 matching lines...) Expand all Loading... |
141 GLenum texture_type() const override { | 143 GLenum texture_type() const override { |
142 GLenum temp_type = 0; | 144 GLenum temp_type = 0; |
143 GLenum temp_internal_format = 0; | 145 GLenum temp_internal_format = 0; |
144 texture_ref_->texture()->GetLevelType( | 146 texture_ref_->texture()->GetLevelType( |
145 target_, level_, &temp_type, &temp_internal_format); | 147 target_, level_, &temp_type, &temp_internal_format); |
146 return temp_type; | 148 return temp_type; |
147 } | 149 } |
148 | 150 |
149 GLsizei samples() const override { return samples_; } | 151 GLsizei samples() const override { return samples_; } |
150 | 152 |
| 153 GLint layer() const { return layer_; } |
| 154 |
151 GLuint object_name() const override { return texture_ref_->client_id(); } | 155 GLuint object_name() const override { return texture_ref_->client_id(); } |
152 | 156 |
153 bool cleared() const override { | 157 bool cleared() const override { |
154 return texture_ref_->texture()->IsLevelCleared(target_, level_); | 158 return texture_ref_->texture()->IsLevelCleared(target_, level_); |
155 } | 159 } |
156 | 160 |
157 void SetCleared(RenderbufferManager* /* renderbuffer_manager */, | 161 void SetCleared(RenderbufferManager* /* renderbuffer_manager */, |
158 TextureManager* texture_manager, | 162 TextureManager* texture_manager, |
159 bool cleared) override { | 163 bool cleared) override { |
160 texture_manager->SetLevelCleared( | 164 texture_manager->SetLevelCleared( |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 } | 231 } |
228 | 232 |
229 protected: | 233 protected: |
230 ~TextureAttachment() override {} | 234 ~TextureAttachment() override {} |
231 | 235 |
232 private: | 236 private: |
233 scoped_refptr<TextureRef> texture_ref_; | 237 scoped_refptr<TextureRef> texture_ref_; |
234 GLenum target_; | 238 GLenum target_; |
235 GLint level_; | 239 GLint level_; |
236 GLsizei samples_; | 240 GLsizei samples_; |
| 241 GLint layer_; |
237 | 242 |
238 DISALLOW_COPY_AND_ASSIGN(TextureAttachment); | 243 DISALLOW_COPY_AND_ASSIGN(TextureAttachment); |
239 }; | 244 }; |
240 | 245 |
241 FramebufferManager::TextureDetachObserver::TextureDetachObserver() {} | 246 FramebufferManager::TextureDetachObserver::TextureDetachObserver() {} |
242 | 247 |
243 FramebufferManager::TextureDetachObserver::~TextureDetachObserver() {} | 248 FramebufferManager::TextureDetachObserver::~TextureDetachObserver() {} |
244 | 249 |
245 FramebufferManager::FramebufferManager( | 250 FramebufferManager::FramebufferManager( |
246 uint32 max_draw_buffers, | 251 uint32 max_draw_buffers, |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 } | 687 } |
683 | 688 |
684 void Framebuffer::AttachTexture( | 689 void Framebuffer::AttachTexture( |
685 GLenum attachment, TextureRef* texture_ref, GLenum target, | 690 GLenum attachment, TextureRef* texture_ref, GLenum target, |
686 GLint level, GLsizei samples) { | 691 GLint level, GLsizei samples) { |
687 const Attachment* a = GetAttachment(attachment); | 692 const Attachment* a = GetAttachment(attachment); |
688 if (a) | 693 if (a) |
689 a->DetachFromFramebuffer(this); | 694 a->DetachFromFramebuffer(this); |
690 if (texture_ref) { | 695 if (texture_ref) { |
691 attachments_[attachment] = scoped_refptr<Attachment>( | 696 attachments_[attachment] = scoped_refptr<Attachment>( |
692 new TextureAttachment(texture_ref, target, level, samples)); | 697 new TextureAttachment(texture_ref, target, level, samples, 0)); |
693 texture_ref->texture()->AttachToFramebuffer(); | 698 texture_ref->texture()->AttachToFramebuffer(); |
694 } else { | 699 } else { |
695 attachments_.erase(attachment); | 700 attachments_.erase(attachment); |
| 701 } |
| 702 framebuffer_complete_state_count_id_ = 0; |
| 703 } |
| 704 |
| 705 void Framebuffer::AttachTextureLayer( |
| 706 GLenum attachment, TextureRef* texture_ref, GLenum target, |
| 707 GLint level, GLint layer) { |
| 708 const Attachment* a = GetAttachment(attachment); |
| 709 if (a) |
| 710 a->DetachFromFramebuffer(this); |
| 711 if (texture_ref) { |
| 712 attachments_[attachment] = scoped_refptr<Attachment>( |
| 713 new TextureAttachment(texture_ref, target, level, 0, layer)); |
| 714 texture_ref->texture()->AttachToFramebuffer(); |
| 715 } else { |
| 716 attachments_.erase(attachment); |
696 } | 717 } |
697 framebuffer_complete_state_count_id_ = 0; | 718 framebuffer_complete_state_count_id_ = 0; |
698 } | 719 } |
699 | 720 |
700 const Framebuffer::Attachment* | 721 const Framebuffer::Attachment* |
701 Framebuffer::GetAttachment( | 722 Framebuffer::GetAttachment( |
702 GLenum attachment) const { | 723 GLenum attachment) const { |
703 AttachmentMap::const_iterator it = attachments_.find(attachment); | 724 AttachmentMap::const_iterator it = attachments_.find(attachment); |
704 if (it != attachments_.end()) { | 725 if (it != attachments_.end()) { |
705 return it->second.get(); | 726 return it->second.get(); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 texture_detach_observers_.begin(); | 798 texture_detach_observers_.begin(); |
778 it != texture_detach_observers_.end(); | 799 it != texture_detach_observers_.end(); |
779 ++it) { | 800 ++it) { |
780 TextureDetachObserver* observer = *it; | 801 TextureDetachObserver* observer = *it; |
781 observer->OnTextureRefDetachedFromFramebuffer(texture); | 802 observer->OnTextureRefDetachedFromFramebuffer(texture); |
782 } | 803 } |
783 } | 804 } |
784 | 805 |
785 } // namespace gles2 | 806 } // namespace gles2 |
786 } // namespace gpu | 807 } // namespace gpu |
OLD | NEW |