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/renderbuffer_manager.h" | 5 #include "gpu/command_buffer/service/renderbuffer_manager.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 } | 44 } |
45 | 45 |
46 void Renderbuffer::AddToSignature( | 46 void Renderbuffer::AddToSignature( |
47 std::string* signature) const { | 47 std::string* signature) const { |
48 DCHECK(signature); | 48 DCHECK(signature); |
49 *signature += base::StringPrintf( | 49 *signature += base::StringPrintf( |
50 "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d", | 50 "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d", |
51 internal_format_, samples_, width_, height_); | 51 internal_format_, samples_, width_, height_); |
52 } | 52 } |
53 | 53 |
54 Renderbuffer::Renderbuffer(RenderbufferManager* manager, GLuint service_id) | 54 Renderbuffer::Renderbuffer(RenderbufferManager* manager, |
| 55 GLuint client_id, |
| 56 GLuint service_id) |
55 : manager_(manager), | 57 : manager_(manager), |
56 deleted_(false), | 58 client_id_(client_id), |
57 service_id_(service_id), | 59 service_id_(service_id), |
58 cleared_(true), | 60 cleared_(true), |
59 has_been_bound_(false), | 61 has_been_bound_(false), |
60 samples_(0), | 62 samples_(0), |
61 internal_format_(GL_RGBA4), | 63 internal_format_(GL_RGBA4), |
62 width_(0), | 64 width_(0), |
63 height_(0) { | 65 height_(0) { |
64 manager_->StartTracking(this); | 66 manager_->StartTracking(this); |
65 } | 67 } |
66 | 68 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 --num_uncleared_renderbuffers_; | 117 --num_uncleared_renderbuffers_; |
116 } | 118 } |
117 renderbuffer->set_cleared(cleared); | 119 renderbuffer->set_cleared(cleared); |
118 if (!renderbuffer->cleared()) { | 120 if (!renderbuffer->cleared()) { |
119 ++num_uncleared_renderbuffers_; | 121 ++num_uncleared_renderbuffers_; |
120 } | 122 } |
121 } | 123 } |
122 | 124 |
123 void RenderbufferManager::CreateRenderbuffer( | 125 void RenderbufferManager::CreateRenderbuffer( |
124 GLuint client_id, GLuint service_id) { | 126 GLuint client_id, GLuint service_id) { |
125 scoped_refptr<Renderbuffer> renderbuffer(new Renderbuffer(this, service_id)); | 127 scoped_refptr<Renderbuffer> renderbuffer( |
| 128 new Renderbuffer(this, client_id, service_id)); |
126 std::pair<RenderbufferMap::iterator, bool> result = | 129 std::pair<RenderbufferMap::iterator, bool> result = |
127 renderbuffers_.insert(std::make_pair(client_id, renderbuffer)); | 130 renderbuffers_.insert(std::make_pair(client_id, renderbuffer)); |
128 DCHECK(result.second); | 131 DCHECK(result.second); |
129 if (!renderbuffer->cleared()) { | 132 if (!renderbuffer->cleared()) { |
130 ++num_uncleared_renderbuffers_; | 133 ++num_uncleared_renderbuffers_; |
131 } | 134 } |
132 } | 135 } |
133 | 136 |
134 Renderbuffer* RenderbufferManager::GetRenderbuffer( | 137 Renderbuffer* RenderbufferManager::GetRenderbuffer( |
135 GLuint client_id) { | 138 GLuint client_id) { |
136 RenderbufferMap::iterator it = renderbuffers_.find(client_id); | 139 RenderbufferMap::iterator it = renderbuffers_.find(client_id); |
137 return it != renderbuffers_.end() ? it->second : NULL; | 140 return it != renderbuffers_.end() ? it->second : NULL; |
138 } | 141 } |
139 | 142 |
140 void RenderbufferManager::RemoveRenderbuffer(GLuint client_id) { | 143 void RenderbufferManager::RemoveRenderbuffer(GLuint client_id) { |
141 RenderbufferMap::iterator it = renderbuffers_.find(client_id); | 144 RenderbufferMap::iterator it = renderbuffers_.find(client_id); |
142 if (it != renderbuffers_.end()) { | 145 if (it != renderbuffers_.end()) { |
143 Renderbuffer* renderbuffer = it->second; | 146 Renderbuffer* renderbuffer = it->second; |
144 renderbuffer->MarkAsDeleted(); | 147 renderbuffer->MarkAsDeleted(); |
145 renderbuffers_.erase(it); | 148 renderbuffers_.erase(it); |
146 } | 149 } |
147 } | 150 } |
148 | 151 |
149 bool RenderbufferManager::GetClientId( | |
150 GLuint service_id, GLuint* client_id) const { | |
151 // This doesn't need to be fast. It's only used during slow queries. | |
152 for (RenderbufferMap::const_iterator it = renderbuffers_.begin(); | |
153 it != renderbuffers_.end(); ++it) { | |
154 if (it->second->service_id() == service_id) { | |
155 *client_id = it->first; | |
156 return true; | |
157 } | |
158 } | |
159 return false; | |
160 } | |
161 | |
162 bool RenderbufferManager::ComputeEstimatedRenderbufferSize( | 152 bool RenderbufferManager::ComputeEstimatedRenderbufferSize( |
163 int width, int height, int samples, int internal_format, uint32* size) { | 153 int width, int height, int samples, int internal_format, uint32* size) { |
164 DCHECK(size); | 154 DCHECK(size); |
165 | 155 |
166 uint32 temp = 0; | 156 uint32 temp = 0; |
167 if (!SafeMultiplyUint32(width, height, &temp)) { | 157 if (!SafeMultiplyUint32(width, height, &temp)) { |
168 return false; | 158 return false; |
169 } | 159 } |
170 if (!SafeMultiplyUint32(temp, samples, &temp)) { | 160 if (!SafeMultiplyUint32(temp, samples, &temp)) { |
171 return false; | 161 return false; |
(...skipping 20 matching lines...) Expand all Loading... |
192 return GL_RGB; | 182 return GL_RGB; |
193 } | 183 } |
194 } | 184 } |
195 return impl_format; | 185 return impl_format; |
196 } | 186 } |
197 | 187 |
198 } // namespace gles2 | 188 } // namespace gles2 |
199 } // namespace gpu | 189 } // namespace gpu |
200 | 190 |
201 | 191 |
OLD | NEW |