| OLD | NEW |
| 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/texture_manager.h" | 5 #include "gpu/command_buffer/service/texture_manager.h" |
| 6 #include "base/bits.h" | 6 #include "base/bits.h" |
| 7 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 7 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| 8 #include "gpu/command_buffer/service/context_group.h" | 8 #include "gpu/command_buffer/service/context_group.h" |
| 9 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 9 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 10 | 10 |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 TextureManager::TextureManager( | 256 TextureManager::TextureManager( |
| 257 GLint max_texture_size, | 257 GLint max_texture_size, |
| 258 GLint max_cube_map_texture_size) | 258 GLint max_cube_map_texture_size) |
| 259 : max_texture_size_(max_texture_size), | 259 : max_texture_size_(max_texture_size), |
| 260 max_cube_map_texture_size_(max_cube_map_texture_size), | 260 max_cube_map_texture_size_(max_cube_map_texture_size), |
| 261 max_levels_(ComputeMipMapCount(max_texture_size, | 261 max_levels_(ComputeMipMapCount(max_texture_size, |
| 262 max_texture_size, | 262 max_texture_size, |
| 263 max_texture_size)), | 263 max_texture_size)), |
| 264 max_cube_map_levels_(ComputeMipMapCount(max_cube_map_texture_size, | 264 max_cube_map_levels_(ComputeMipMapCount(max_cube_map_texture_size, |
| 265 max_cube_map_texture_size, | 265 max_cube_map_texture_size, |
| 266 max_cube_map_texture_size)) { | 266 max_cube_map_texture_size)), |
| 267 num_unrenderable_textures_(0) { |
| 267 default_texture_2d_ = TextureInfo::Ref(new TextureInfo(0)); | 268 default_texture_2d_ = TextureInfo::Ref(new TextureInfo(0)); |
| 268 SetInfoTarget(default_texture_2d_, GL_TEXTURE_2D); | 269 SetInfoTarget(default_texture_2d_, GL_TEXTURE_2D); |
| 269 default_texture_2d_->SetLevelInfo( | 270 default_texture_2d_->SetLevelInfo( |
| 270 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); | 271 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); |
| 271 default_texture_cube_map_ = TextureInfo::Ref(new TextureInfo(0)); | 272 default_texture_cube_map_ = TextureInfo::Ref(new TextureInfo(0)); |
| 272 SetInfoTarget(default_texture_cube_map_, GL_TEXTURE_CUBE_MAP); | 273 SetInfoTarget(default_texture_cube_map_, GL_TEXTURE_CUBE_MAP); |
| 273 for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) { | 274 for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) { |
| 274 default_texture_cube_map_->SetLevelInfo( | 275 default_texture_cube_map_->SetLevelInfo( |
| 275 GLES2Util::IndexToGLFaceTarget(ii), | 276 GLES2Util::IndexToGLFaceTarget(ii), |
| 276 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); | 277 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 290 height <= max_size && | 291 height <= max_size && |
| 291 depth <= max_size && | 292 depth <= max_size && |
| 292 (level == 0 || | 293 (level == 0 || |
| 293 (!GLES2Util::IsNPOT(width) && | 294 (!GLES2Util::IsNPOT(width) && |
| 294 !GLES2Util::IsNPOT(height) && | 295 !GLES2Util::IsNPOT(height) && |
| 295 !GLES2Util::IsNPOT(depth))) && | 296 !GLES2Util::IsNPOT(depth))) && |
| 296 (target != GL_TEXTURE_CUBE_MAP || (width == height && depth == 1)) && | 297 (target != GL_TEXTURE_CUBE_MAP || (width == height && depth == 1)) && |
| 297 (target != GL_TEXTURE_2D || (depth == 1)); | 298 (target != GL_TEXTURE_2D || (depth == 1)); |
| 298 } | 299 } |
| 299 | 300 |
| 301 void TextureManager::SetLevelInfo( |
| 302 TextureManager::TextureInfo* info, |
| 303 GLenum target, |
| 304 GLint level, |
| 305 GLint internal_format, |
| 306 GLsizei width, |
| 307 GLsizei height, |
| 308 GLsizei depth, |
| 309 GLint border, |
| 310 GLenum format, |
| 311 GLenum type) { |
| 312 DCHECK(info); |
| 313 DCHECK(!info->IsDeleted()); |
| 314 if (!info->CanRender()) { |
| 315 --num_unrenderable_textures_; |
| 316 } |
| 317 info->SetLevelInfo( |
| 318 target, level, internal_format, width, height, depth, |
| 319 border, format, type); |
| 320 if (!info->CanRender()) { |
| 321 ++num_unrenderable_textures_; |
| 322 } |
| 323 } |
| 324 |
| 325 void TextureManager::SetParameter( |
| 326 TextureManager::TextureInfo* info, GLenum pname, GLint param) { |
| 327 DCHECK(info); |
| 328 DCHECK(!info->IsDeleted()); |
| 329 if (!info->CanRender()) { |
| 330 --num_unrenderable_textures_; |
| 331 } |
| 332 info->SetParameter(pname, param); |
| 333 if (!info->CanRender()) { |
| 334 ++num_unrenderable_textures_; |
| 335 } |
| 336 } |
| 337 |
| 338 bool TextureManager::MarkMipmapsGenerated(TextureManager::TextureInfo* info) { |
| 339 DCHECK(info); |
| 340 DCHECK(!info->IsDeleted()); |
| 341 if (!info->CanRender()) { |
| 342 --num_unrenderable_textures_; |
| 343 } |
| 344 bool result = info->MarkMipmapsGenerated(); |
| 345 if (!info->CanRender()) { |
| 346 ++num_unrenderable_textures_; |
| 347 } |
| 348 return result; |
| 349 } |
| 350 |
| 300 TextureManager::TextureInfo* TextureManager::CreateTextureInfo( | 351 TextureManager::TextureInfo* TextureManager::CreateTextureInfo( |
| 301 GLuint client_id, GLuint service_id) { | 352 GLuint client_id, GLuint service_id) { |
| 302 TextureInfo::Ref info(new TextureInfo(service_id)); | 353 TextureInfo::Ref info(new TextureInfo(service_id)); |
| 303 std::pair<TextureInfoMap::iterator, bool> result = | 354 std::pair<TextureInfoMap::iterator, bool> result = |
| 304 texture_infos_.insert(std::make_pair(client_id, info)); | 355 texture_infos_.insert(std::make_pair(client_id, info)); |
| 305 DCHECK(result.second); | 356 DCHECK(result.second); |
| 357 if (!info->CanRender()) { |
| 358 ++num_unrenderable_textures_; |
| 359 } |
| 306 return info.get(); | 360 return info.get(); |
| 307 } | 361 } |
| 308 | 362 |
| 309 TextureManager::TextureInfo* TextureManager::GetTextureInfo( | 363 TextureManager::TextureInfo* TextureManager::GetTextureInfo( |
| 310 GLuint client_id) { | 364 GLuint client_id) { |
| 311 TextureInfoMap::iterator it = texture_infos_.find(client_id); | 365 TextureInfoMap::iterator it = texture_infos_.find(client_id); |
| 312 return it != texture_infos_.end() ? it->second : NULL; | 366 return it != texture_infos_.end() ? it->second : NULL; |
| 313 } | 367 } |
| 314 | 368 |
| 315 void TextureManager::RemoveTextureInfo(GLuint client_id) { | 369 void TextureManager::RemoveTextureInfo(GLuint client_id) { |
| 316 TextureInfoMap::iterator it = texture_infos_.find(client_id); | 370 TextureInfoMap::iterator it = texture_infos_.find(client_id); |
| 317 if (it != texture_infos_.end()) { | 371 if (it != texture_infos_.end()) { |
| 318 it->second->MarkAsDeleted(); | 372 TextureInfo* info = it->second; |
| 373 if (!info->CanRender()) { |
| 374 --num_unrenderable_textures_; |
| 375 } |
| 376 info->MarkAsDeleted(); |
| 319 texture_infos_.erase(it); | 377 texture_infos_.erase(it); |
| 320 } | 378 } |
| 321 } | 379 } |
| 322 | 380 |
| 323 bool TextureManager::GetClientId(GLuint service_id, GLuint* client_id) const { | 381 bool TextureManager::GetClientId(GLuint service_id, GLuint* client_id) const { |
| 324 // This doesn't need to be fast. It's only used during slow queries. | 382 // This doesn't need to be fast. It's only used during slow queries. |
| 325 for (TextureInfoMap::const_iterator it = texture_infos_.begin(); | 383 for (TextureInfoMap::const_iterator it = texture_infos_.begin(); |
| 326 it != texture_infos_.end(); ++it) { | 384 it != texture_infos_.end(); ++it) { |
| 327 if (it->second->service_id() == service_id) { | 385 if (it->second->service_id() == service_id) { |
| 328 *client_id = it->first; | 386 *client_id = it->first; |
| 329 return true; | 387 return true; |
| 330 } | 388 } |
| 331 } | 389 } |
| 332 return false; | 390 return false; |
| 333 } | 391 } |
| 334 | 392 |
| 335 } // namespace gles2 | 393 } // namespace gles2 |
| 336 } // namespace gpu | 394 } // namespace gpu |
| 337 | 395 |
| 338 | 396 |
| OLD | NEW |