| 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 |