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 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
403 GLenum attachment) const { | 403 GLenum attachment) const { |
404 AttachmentMap::const_iterator it = | 404 AttachmentMap::const_iterator it = |
405 attachments_.find(attachment); | 405 attachments_.find(attachment); |
406 if (it != attachments_.end()) { | 406 if (it != attachments_.end()) { |
407 const Attachment* attachment = it->second.get(); | 407 const Attachment* attachment = it->second.get(); |
408 return !attachment->cleared(); | 408 return !attachment->cleared(); |
409 } | 409 } |
410 return false; | 410 return false; |
411 } | 411 } |
412 | 412 |
413 bool Framebuffer::HasDepthStencilFormatAttachment( | |
414 GLenum attachment) const { | |
415 AttachmentMap::const_iterator it = attachments_.find(attachment); | |
416 if (it != attachments_.end()) { | |
417 const Attachment* attachment = it->second.get(); | |
418 GLenum internal_format = attachment->internal_format(); | |
419 return TextureManager::ExtractFormatFromStorageFormat(internal_format) == | |
420 GL_DEPTH_STENCIL; | |
421 } | |
422 return false; | |
423 } | |
424 | |
413 bool Framebuffer::HasUnclearedColorAttachments() const { | 425 bool Framebuffer::HasUnclearedColorAttachments() const { |
414 for (AttachmentMap::const_iterator it = attachments_.begin(); | 426 for (AttachmentMap::const_iterator it = attachments_.begin(); |
415 it != attachments_.end(); ++it) { | 427 it != attachments_.end(); ++it) { |
416 if (it->first >= GL_COLOR_ATTACHMENT0 && | 428 if (it->first >= GL_COLOR_ATTACHMENT0 && |
417 it->first < GL_COLOR_ATTACHMENT0 + manager_->max_draw_buffers_) { | 429 it->first < GL_COLOR_ATTACHMENT0 + manager_->max_draw_buffers_) { |
418 const Attachment* attachment = it->second.get(); | 430 const Attachment* attachment = it->second.get(); |
419 if (!attachment->cleared()) | 431 if (!attachment->cleared()) |
420 return true; | 432 return true; |
421 } | 433 } |
422 } | 434 } |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
552 if (attachment->IsPartiallyCleared() || attachment->Is3D() || | 564 if (attachment->IsPartiallyCleared() || attachment->Is3D() || |
553 GLES2Util::IsIntegerFormat(attachment->internal_format())) { | 565 GLES2Util::IsIntegerFormat(attachment->internal_format())) { |
554 texture_manager->ClearTextureLevel(decoder, | 566 texture_manager->ClearTextureLevel(decoder, |
555 attachment->texture(), | 567 attachment->texture(), |
556 attachment->target(), | 568 attachment->target(), |
557 attachment->level()); | 569 attachment->level()); |
558 } | 570 } |
559 } | 571 } |
560 } | 572 } |
561 | 573 |
574 // TODO(Jiawei): when the texture or the renderbuffer in format | |
Ken Russell (switch to Gerrit)
2016/07/20 23:36:06
Use full email address please.
| |
575 // DEPTH_STENCIL, mark the specific part (depth or stencil) of it as | |
576 // cleared or uncleared instead of the whole one. | |
562 void Framebuffer::MarkAttachmentAsCleared( | 577 void Framebuffer::MarkAttachmentAsCleared( |
563 RenderbufferManager* renderbuffer_manager, | 578 RenderbufferManager* renderbuffer_manager, |
564 TextureManager* texture_manager, | 579 TextureManager* texture_manager, |
565 GLenum attachment, | 580 GLenum attachment, |
566 bool cleared) { | 581 bool cleared) { |
567 AttachmentMap::iterator it = attachments_.find(attachment); | 582 AttachmentMap::iterator it = attachments_.find(attachment); |
568 if (it != attachments_.end()) { | 583 if (it != attachments_.end()) { |
569 Attachment* a = it->second.get(); | 584 Attachment* a = it->second.get(); |
570 if (a->cleared() != cleared) { | 585 if (a->cleared() != cleared) { |
571 a->SetCleared(renderbuffer_manager, | 586 a->SetCleared(renderbuffer_manager, |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
753 GLenum result = glCheckFramebufferStatusEXT(target); | 768 GLenum result = glCheckFramebufferStatusEXT(target); |
754 | 769 |
755 if (result == GL_FRAMEBUFFER_COMPLETE) { | 770 if (result == GL_FRAMEBUFFER_COMPLETE) { |
756 manager_->GetFramebufferComboCompleteCache()->SetComplete(signature); | 771 manager_->GetFramebufferComboCompleteCache()->SetComplete(signature); |
757 } | 772 } |
758 | 773 |
759 return result; | 774 return result; |
760 } | 775 } |
761 | 776 |
762 bool Framebuffer::IsCleared() const { | 777 bool Framebuffer::IsCleared() const { |
763 // are all the attachments cleaared? | 778 // are all the attachments cleared? |
764 for (AttachmentMap::const_iterator it = attachments_.begin(); | 779 for (AttachmentMap::const_iterator it = attachments_.begin(); |
765 it != attachments_.end(); ++it) { | 780 it != attachments_.end(); ++it) { |
766 Attachment* attachment = it->second.get(); | 781 Attachment* attachment = it->second.get(); |
767 if (!attachment->cleared()) { | 782 if (!attachment->cleared()) { |
768 return false; | 783 return false; |
769 } | 784 } |
770 } | 785 } |
771 return true; | 786 return true; |
772 } | 787 } |
773 | 788 |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1004 | 1019 |
1005 bool FramebufferManager::IsComplete( | 1020 bool FramebufferManager::IsComplete( |
1006 Framebuffer* framebuffer) { | 1021 Framebuffer* framebuffer) { |
1007 DCHECK(framebuffer); | 1022 DCHECK(framebuffer); |
1008 return framebuffer->framebuffer_complete_state_count_id() == | 1023 return framebuffer->framebuffer_complete_state_count_id() == |
1009 framebuffer_state_change_count_; | 1024 framebuffer_state_change_count_; |
1010 } | 1025 } |
1011 | 1026 |
1012 } // namespace gles2 | 1027 } // namespace gles2 |
1013 } // namespace gpu | 1028 } // namespace gpu |
OLD | NEW |