| 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 4022b3defaa1e286e85e72f7ac6aa702fa1e9fb2..b8026c00b982e7cf6d33172c23f7670cef6fabbb 100644
|
| --- a/gpu/command_buffer/service/framebuffer_manager.cc
|
| +++ b/gpu/command_buffer/service/framebuffer_manager.cc
|
| @@ -113,6 +113,11 @@ class RenderbufferAttachment
|
| return renderbuffer_.get();
|
| }
|
|
|
| + virtual size_t GetSignatureSize(
|
| + TextureManager* texture_manager) const OVERRIDE {
|
| + return renderbuffer_->GetSignatureSize();
|
| + }
|
| +
|
| virtual void AddToSignature(
|
| TextureManager* texture_manager, std::string* signature) const OVERRIDE {
|
| DCHECK(signature);
|
| @@ -239,6 +244,11 @@ class TextureAttachment
|
| return (need & have) != 0;
|
| }
|
|
|
| + virtual size_t GetSignatureSize(
|
| + TextureManager* texture_manager) const OVERRIDE {
|
| + return texture_manager->GetSignatureSize();
|
| + }
|
| +
|
| virtual void AddToSignature(
|
| TextureManager* texture_manager, std::string* signature) const OVERRIDE {
|
| DCHECK(signature);
|
| @@ -508,14 +518,25 @@ GLenum Framebuffer::GetStatus(
|
| // Check if we have this combo already.
|
| std::string signature;
|
| if (allow_framebuffer_combo_complete_map_) {
|
| - signature = base::StringPrintf("|FBO|target=%04x", target);
|
| + size_t signature_size = sizeof(target);
|
| + for (AttachmentMap::const_iterator it = attachments_.begin();
|
| + it != attachments_.end(); ++it) {
|
| + Attachment* attachment = it->second.get();
|
| + signature_size += sizeof(it->first) +
|
| + attachment->GetSignatureSize(texture_manager);
|
| + }
|
| +
|
| + signature.reserve(signature_size);
|
| + signature.append(reinterpret_cast<const char*>(&target), sizeof(target));
|
| +
|
| for (AttachmentMap::const_iterator it = attachments_.begin();
|
| it != attachments_.end(); ++it) {
|
| Attachment* attachment = it->second.get();
|
| - signature +=
|
| - base::StringPrintf("|Attachment|attachmentpoint=%04x", it->first);
|
| + signature.append(reinterpret_cast<const char*>(&it->first),
|
| + sizeof(it->first));
|
| attachment->AddToSignature(texture_manager, &signature);
|
| }
|
| + DCHECK(signature.size() == signature_size);
|
|
|
| if (!framebuffer_combo_complete_map_) {
|
| framebuffer_combo_complete_map_ = new FramebufferComboCompleteMap();
|
| @@ -565,8 +586,6 @@ void Framebuffer::SetDrawBuffers(GLsizei n, const GLenum* bufs) {
|
| draw_buffers_[i] = bufs[i];
|
| }
|
|
|
| -
|
| -
|
| bool Framebuffer::HasAlphaMRT() const {
|
| for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i) {
|
| if (draw_buffers_[i] != GL_NONE) {
|
|
|