| 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 190a91097bc6e63c4717e082bd902dec3e31d9b0..316bc32a20022669cea7d5fcc39821a0acc0ea08 100644
|
| --- a/gpu/command_buffer/service/framebuffer_manager.cc
|
| +++ b/gpu/command_buffer/service/framebuffer_manager.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -43,6 +43,10 @@ class RenderbufferAttachment
|
| render_buffer_->set_cleared();
|
| }
|
|
|
| + virtual bool IsTexture(TextureManager::TextureInfo* /* texture */) const {
|
| + return false;
|
| + }
|
| +
|
| RenderbufferManager::RenderbufferInfo* render_buffer() const {
|
| return render_buffer_.get();
|
| }
|
| @@ -99,6 +103,10 @@ class TextureAttachment
|
| NOTREACHED();
|
| }
|
|
|
| + virtual bool IsTexture(TextureManager::TextureInfo* texture) const {
|
| + return texture == texture_.get();
|
| + }
|
| +
|
| TextureManager::TextureInfo* texture() const {
|
| return texture_.get();
|
| }
|
| @@ -169,6 +177,25 @@ void FramebufferManager::FramebufferInfo::MarkAttachedRenderbuffersAsCleared() {
|
| }
|
| }
|
|
|
| +bool FramebufferManager::FramebufferInfo::HasDepthAttachment() const {
|
| + return attachments_.find(GL_DEPTH_STENCIL_ATTACHMENT) != attachments_.end() ||
|
| + attachments_.find(GL_DEPTH_ATTACHMENT) != attachments_.end();
|
| +}
|
| +
|
| +bool FramebufferManager::FramebufferInfo::HasStencilAttachment() const {
|
| + return attachments_.find(GL_DEPTH_STENCIL_ATTACHMENT) != attachments_.end() ||
|
| + attachments_.find(GL_STENCIL_ATTACHMENT) != attachments_.end();
|
| +}
|
| +
|
| +GLenum FramebufferManager::FramebufferInfo::GetColorAttachmentFormat() const {
|
| + AttachmentMap::const_iterator it = attachments_.find(GL_COLOR_ATTACHMENT0);
|
| + if (it == attachments_.end()) {
|
| + return 0;
|
| + }
|
| + const Attachment* attachment = it->second;
|
| + return attachment->internal_format();
|
| +}
|
| +
|
| bool FramebufferManager::FramebufferInfo::IsNotComplete() const {
|
| for (AttachmentMap::const_iterator it = attachments_.begin();
|
| it != attachments_.end(); ++it) {
|
| @@ -215,9 +242,14 @@ void FramebufferManager::FramebufferInfo::AttachTexture(
|
| attachment == GL_DEPTH_ATTACHMENT ||
|
| attachment == GL_STENCIL_ATTACHMENT ||
|
| attachment == GL_DEPTH_STENCIL_ATTACHMENT);
|
| + const Attachment* a = GetAttachment(attachment);
|
| + if (a && a->IsTexture(texture)) {
|
| + texture->DetachFromFramebuffer();
|
| + }
|
| if (texture) {
|
| attachments_[attachment] = Attachment::Ref(
|
| new TextureAttachment(texture, target, level));
|
| + texture->AttachToFramebuffer();
|
| } else {
|
| attachments_.erase(attachment);
|
| }
|
|
|