Index: gpu/command_buffer/service/texture_manager.cc |
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc |
index 2082841c3ad5f88c01fca7f77f35a46a45550eb3..8f7703b95400602a25ede5ccfee7fefb60d3de8b 100644 |
--- a/gpu/command_buffer/service/texture_manager.cc |
+++ b/gpu/command_buffer/service/texture_manager.cc |
@@ -895,9 +895,10 @@ TextureRef::~TextureRef() { |
TextureManager::TextureManager(MemoryTracker* memory_tracker, |
FeatureInfo* feature_info, |
GLint max_texture_size, |
- GLint max_cube_map_texture_size) |
- : memory_tracker_managed_(new MemoryTypeTracker(memory_tracker, |
- MemoryTracker::kManaged)), |
+ GLint max_cube_map_texture_size, |
+ bool use_default_textures) |
+ : memory_tracker_managed_( |
+ new MemoryTypeTracker(memory_tracker, MemoryTracker::kManaged)), |
memory_tracker_unmanaged_( |
new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)), |
feature_info_(feature_info), |
@@ -912,6 +913,7 @@ TextureManager::TextureManager(MemoryTracker* memory_tracker, |
max_cube_map_texture_size, |
max_cube_map_texture_size, |
max_cube_map_texture_size)), |
+ use_default_textures_(use_default_textures), |
num_unrenderable_textures_(0), |
num_unsafe_textures_(0), |
num_uncleared_mips_(0), |
@@ -959,8 +961,9 @@ scoped_refptr<TextureRef> |
// Make default textures and texture for replacing non-renderable textures. |
GLuint ids[2]; |
- glGenTextures(arraysize(ids), ids); |
- for (unsigned long ii = 0; ii < arraysize(ids); ++ii) { |
+ const unsigned long num_ids = use_default_textures_ ? 2 : 1; |
+ glGenTextures(num_ids, ids); |
+ for (unsigned long ii = 0; ii < num_ids; ++ii) { |
glBindTexture(target, ids[ii]); |
if (needs_initialization) { |
if (needs_faces) { |
@@ -976,48 +979,50 @@ scoped_refptr<TextureRef> |
} |
glBindTexture(target, 0); |
- scoped_refptr<TextureRef> default_texture( |
- TextureRef::Create(this, 0, ids[1])); |
- SetTarget(default_texture.get(), target); |
- if (needs_faces) { |
- for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) { |
- SetLevelInfo(default_texture.get(), |
- GLES2Util::IndexToGLFaceTarget(ii), |
- 0, |
- GL_RGBA, |
- 1, |
- 1, |
- 1, |
- 0, |
- GL_RGBA, |
- GL_UNSIGNED_BYTE, |
- true); |
- } |
- } else { |
- if (needs_initialization) { |
- SetLevelInfo(default_texture.get(), |
- GL_TEXTURE_2D, |
- 0, |
- GL_RGBA, |
- 1, |
- 1, |
- 1, |
- 0, |
- GL_RGBA, |
- GL_UNSIGNED_BYTE, |
- true); |
+ scoped_refptr<TextureRef> default_texture; |
+ if (use_default_textures_) { |
+ default_texture = TextureRef::Create(this, 0, ids[1]); |
+ SetTarget(default_texture.get(), target); |
+ if (needs_faces) { |
+ for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) { |
+ SetLevelInfo(default_texture.get(), |
+ GLES2Util::IndexToGLFaceTarget(ii), |
+ 0, |
+ GL_RGBA, |
+ 1, |
+ 1, |
+ 1, |
+ 0, |
+ GL_RGBA, |
+ GL_UNSIGNED_BYTE, |
+ true); |
+ } |
} else { |
- SetLevelInfo(default_texture.get(), |
- GL_TEXTURE_EXTERNAL_OES, |
- 0, |
- GL_RGBA, |
- 1, |
- 1, |
- 1, |
- 0, |
- GL_RGBA, |
- GL_UNSIGNED_BYTE, |
- true); |
+ if (needs_initialization) { |
+ SetLevelInfo(default_texture.get(), |
+ GL_TEXTURE_2D, |
+ 0, |
+ GL_RGBA, |
+ 1, |
+ 1, |
+ 1, |
+ 0, |
+ GL_RGBA, |
+ GL_UNSIGNED_BYTE, |
+ true); |
+ } else { |
+ SetLevelInfo(default_texture.get(), |
+ GL_TEXTURE_EXTERNAL_OES, |
+ 0, |
+ GL_RGBA, |
+ 1, |
+ 1, |
+ 1, |
+ 0, |
+ GL_RGBA, |
+ GL_UNSIGNED_BYTE, |
+ true); |
+ } |
} |
} |