Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(234)

Side by Side Diff: gpu/command_buffer/service/framebuffer_manager.cc

Issue 3058043: Clear render buffers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "gpu/command_buffer/common/gles2_cmd_utils.h" 7 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
8 8
9 namespace gpu { 9 namespace gpu {
10 namespace gles2 { 10 namespace gles2 {
(...skipping 19 matching lines...) Expand all
30 void FramebufferManager::CreateFramebufferInfo( 30 void FramebufferManager::CreateFramebufferInfo(
31 GLuint client_id, GLuint service_id) { 31 GLuint client_id, GLuint service_id) {
32 std::pair<FramebufferInfoMap::iterator, bool> result = 32 std::pair<FramebufferInfoMap::iterator, bool> result =
33 framebuffer_infos_.insert( 33 framebuffer_infos_.insert(
34 std::make_pair( 34 std::make_pair(
35 client_id, 35 client_id,
36 FramebufferInfo::Ref(new FramebufferInfo(service_id)))); 36 FramebufferInfo::Ref(new FramebufferInfo(service_id))));
37 DCHECK(result.second); 37 DCHECK(result.second);
38 } 38 }
39 39
40 bool FramebufferManager::FramebufferInfo::HasUnclearedAttachment(
41 GLenum attachment) const {
42 AttachmentToRenderbufferMap::const_iterator it =
43 renderbuffers_.find(attachment);
44 if (it != renderbuffers_.end()) {
45 RenderbufferManager::RenderbufferInfo* info = it->second;
46 return !info->cleared();
47 }
48 return false;
49 }
50
51 void FramebufferManager::FramebufferInfo::MarkAttachedRenderbuffersAsCleared() {
52 for (AttachmentToRenderbufferMap::iterator it = renderbuffers_.begin();
53 it != renderbuffers_.end(); ++it) {
54 RenderbufferManager::RenderbufferInfo* info = it->second;
55 info->set_cleared();
56 }
57 }
58
40 FramebufferManager::FramebufferInfo* FramebufferManager::GetFramebufferInfo( 59 FramebufferManager::FramebufferInfo* FramebufferManager::GetFramebufferInfo(
41 GLuint client_id) { 60 GLuint client_id) {
42 FramebufferInfoMap::iterator it = framebuffer_infos_.find(client_id); 61 FramebufferInfoMap::iterator it = framebuffer_infos_.find(client_id);
43 return it != framebuffer_infos_.end() ? it->second : NULL; 62 return it != framebuffer_infos_.end() ? it->second : NULL;
44 } 63 }
45 64
46 void FramebufferManager::RemoveFramebufferInfo(GLuint client_id) { 65 void FramebufferManager::RemoveFramebufferInfo(GLuint client_id) {
47 FramebufferInfoMap::iterator it = framebuffer_infos_.find(client_id); 66 FramebufferInfoMap::iterator it = framebuffer_infos_.find(client_id);
48 if (it != framebuffer_infos_.end()) { 67 if (it != framebuffer_infos_.end()) {
49 it->second->MarkAsDeleted(); 68 it->second->MarkAsDeleted();
50 framebuffer_infos_.erase(it); 69 framebuffer_infos_.erase(it);
51 } 70 }
52 } 71 }
53 72
54 void FramebufferManager::FramebufferInfo::AttachRenderbuffer( 73 void FramebufferManager::FramebufferInfo::AttachRenderbuffer(
55 GLenum attachment, RenderbufferManager::RenderbufferInfo* renderbuffer) { 74 GLenum attachment, RenderbufferManager::RenderbufferInfo* renderbuffer) {
56 DCHECK(attachment == GL_COLOR_ATTACHMENT0 || 75 DCHECK(attachment == GL_COLOR_ATTACHMENT0 ||
57 attachment == GL_DEPTH_ATTACHMENT || 76 attachment == GL_DEPTH_ATTACHMENT ||
58 attachment == GL_STENCIL_ATTACHMENT); 77 attachment == GL_STENCIL_ATTACHMENT ||
78 attachment == GL_DEPTH_STENCIL_ATTACHMENT);
59 if (renderbuffer) { 79 if (renderbuffer) {
60 renderbuffers_[attachment] = 80 renderbuffers_[attachment] =
61 RenderbufferManager::RenderbufferInfo::Ref(renderbuffer); 81 RenderbufferManager::RenderbufferInfo::Ref(renderbuffer);
62 } else { 82 } else {
63 renderbuffers_.erase(attachment); 83 renderbuffers_.erase(attachment);
64 } 84 }
65 } 85 }
66 86
67 bool FramebufferManager::GetClientId( 87 bool FramebufferManager::GetClientId(
68 GLuint service_id, GLuint* client_id) const { 88 GLuint service_id, GLuint* client_id) const {
69 // This doesn't need to be fast. It's only used during slow queries. 89 // This doesn't need to be fast. It's only used during slow queries.
70 for (FramebufferInfoMap::const_iterator it = framebuffer_infos_.begin(); 90 for (FramebufferInfoMap::const_iterator it = framebuffer_infos_.begin();
71 it != framebuffer_infos_.end(); ++it) { 91 it != framebuffer_infos_.end(); ++it) {
72 if (it->second->service_id() == service_id) { 92 if (it->second->service_id() == service_id) {
73 *client_id = it->first; 93 *client_id = it->first;
74 return true; 94 return true;
75 } 95 }
76 } 96 }
77 return false; 97 return false;
78 } 98 }
79 99
80 } // namespace gles2 100 } // namespace gles2
81 } // namespace gpu 101 } // namespace gpu
82 102
83 103
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/framebuffer_manager.h ('k') | gpu/command_buffer/service/framebuffer_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698