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

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

Issue 7518016: Revert 94743 - Allow the renderer process to map textures from one context into another. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 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
Property Changes:
Added: svn:mergeinfo
Merged /branches/chrome_webkit_merge_branch/o3d/gpu/command_buffer/service/texture_manager.cc:r69-2775
Merged /trunk/src/o3d/gpu/command_buffer/service/texture_manager.cc:r32866-32958
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/feature_info.h" 8 #include "gpu/command_buffer/service/feature_info.h"
9 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 9 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
10 #include "gpu/GLES2/gles2_command_buffer.h" 10 #include "gpu/GLES2/gles2_command_buffer.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 } 61 }
62 62
63 TextureManager::~TextureManager() { 63 TextureManager::~TextureManager() {
64 DCHECK(texture_infos_.empty()); 64 DCHECK(texture_infos_.empty());
65 } 65 }
66 66
67 void TextureManager::Destroy(bool have_context) { 67 void TextureManager::Destroy(bool have_context) {
68 while (!texture_infos_.empty()) { 68 while (!texture_infos_.empty()) {
69 if (have_context) { 69 if (have_context) {
70 TextureInfo* info = texture_infos_.begin()->second; 70 TextureInfo* info = texture_infos_.begin()->second;
71 if (!info->IsDeleted() && info->owner_.get() == this) { 71 if (!info->IsDeleted() && info->owned_) {
72 GLuint service_id = info->service_id(); 72 GLuint service_id = info->service_id();
73 glDeleteTextures(1, &service_id); 73 glDeleteTextures(1, &service_id);
74 info->MarkAsDeleted(); 74 info->MarkAsDeleted();
75 } 75 }
76 } 76 }
77 texture_infos_.erase(texture_infos_.begin()); 77 texture_infos_.erase(texture_infos_.begin());
78 } 78 }
79 if (have_context) { 79 if (have_context) {
80 GLuint ids[] = { 80 GLuint ids[] = {
81 black_2d_texture_id_, 81 black_2d_texture_id_,
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 bool result = info->MarkMipmapsGenerated(feature_info); 549 bool result = info->MarkMipmapsGenerated(feature_info);
550 if (!info->CanRender(feature_info)) { 550 if (!info->CanRender(feature_info)) {
551 ++num_unrenderable_textures_; 551 ++num_unrenderable_textures_;
552 } 552 }
553 return result; 553 return result;
554 } 554 }
555 555
556 TextureManager::TextureInfo* TextureManager::CreateTextureInfo( 556 TextureManager::TextureInfo* TextureManager::CreateTextureInfo(
557 const FeatureInfo* feature_info, 557 const FeatureInfo* feature_info,
558 GLuint client_id, GLuint service_id) { 558 GLuint client_id, GLuint service_id) {
559 TextureInfo* texture_info = new TextureInfo(service_id); 559 TextureInfo::Ref info(new TextureInfo(service_id));
560 texture_info->owner_ = AsWeakPtr(); 560 std::pair<TextureInfoMap::iterator, bool> result =
561 AddTextureInfo(feature_info, client_id, texture_info); 561 texture_infos_.insert(std::make_pair(client_id, info));
562 return texture_info; 562 DCHECK(result.second);
563 if (!info->CanRender(feature_info)) {
564 ++num_unrenderable_textures_;
565 }
566 return info.get();
563 } 567 }
564 568
565 TextureManager::TextureInfo* TextureManager::GetTextureInfo( 569 TextureManager::TextureInfo* TextureManager::GetTextureInfo(
566 GLuint client_id) { 570 GLuint client_id) {
567 TextureInfoMap::iterator it = texture_infos_.find(client_id); 571 TextureInfoMap::iterator it = texture_infos_.find(client_id);
568 return it != texture_infos_.end() ? it->second : NULL; 572 return it != texture_infos_.end() ? it->second : NULL;
569 } 573 }
570 574
571 void TextureManager::AddTextureInfo(
572 const FeatureInfo* feature_info,
573 GLuint client_id, TextureInfo* texture_info) {
574 std::pair<TextureInfoMap::iterator, bool> result =
575 texture_infos_.insert(std::make_pair(client_id, texture_info));
576 DCHECK(result.second);
577 if (!texture_info->CanRender(feature_info)) {
578 ++num_unrenderable_textures_;
579 }
580 }
581
582 void TextureManager::RemoveTextureInfo( 575 void TextureManager::RemoveTextureInfo(
583 const FeatureInfo* feature_info, GLuint client_id) { 576 const FeatureInfo* feature_info, GLuint client_id) {
584 TextureInfoMap::iterator it = texture_infos_.find(client_id); 577 TextureInfoMap::iterator it = texture_infos_.find(client_id);
585 if (it != texture_infos_.end()) { 578 if (it != texture_infos_.end()) {
586 TextureInfo* info = it->second; 579 TextureInfo* info = it->second;
587 if (!info->CanRender(feature_info)) 580 if (!info->CanRender(feature_info)) {
588 --num_unrenderable_textures_; 581 --num_unrenderable_textures_;
589 if (info->owner_.get() == this) 582 }
590 info->MarkAsDeleted(); 583 info->MarkAsDeleted();
591 texture_infos_.erase(it); 584 texture_infos_.erase(it);
592 } 585 }
593 } 586 }
594 587
595 bool TextureManager::GetClientId(GLuint service_id, GLuint* client_id) const { 588 bool TextureManager::GetClientId(GLuint service_id, GLuint* client_id) const {
596 // This doesn't need to be fast. It's only used during slow queries. 589 // This doesn't need to be fast. It's only used during slow queries.
597 for (TextureInfoMap::const_iterator it = texture_infos_.begin(); 590 for (TextureInfoMap::const_iterator it = texture_infos_.begin();
598 it != texture_infos_.end(); ++it) { 591 it != texture_infos_.end(); ++it) {
599 if (it->second->service_id() == service_id) { 592 if (it->second->service_id() == service_id) {
600 *client_id = it->first; 593 *client_id = it->first;
601 return true; 594 return true;
602 } 595 }
603 } 596 }
604 return false; 597 return false;
605 } 598 }
606 599
607 } // namespace gles2 600 } // namespace gles2
608 } // namespace gpu 601 } // namespace gpu
609 602
610 603
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/texture_manager.h ('k') | gpu/command_buffer/service/texture_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698