| 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/texture_manager.h" | 5 #include "gpu/command_buffer/service/texture_manager.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "gpu/command_buffer/service/error_state_mock.h" | 8 #include "gpu/command_buffer/service/error_state_mock.h" |
| 9 #include "gpu/command_buffer/service/feature_info.h" | 9 #include "gpu/command_buffer/service/feature_info.h" |
| 10 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" | 10 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 } | 68 } |
| 69 | 69 |
| 70 virtual void TearDown() { | 70 virtual void TearDown() { |
| 71 manager_->Destroy(false); | 71 manager_->Destroy(false); |
| 72 manager_.reset(); | 72 manager_.reset(); |
| 73 ::gfx::GLInterface::SetGLInterface(NULL); | 73 ::gfx::GLInterface::SetGLInterface(NULL); |
| 74 gl_.reset(); | 74 gl_.reset(); |
| 75 } | 75 } |
| 76 | 76 |
| 77 void SetParameter( | 77 void SetParameter( |
| 78 Texture* texture, GLenum pname, GLint value, GLenum error) { | 78 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { |
| 79 TestHelper::SetTexParameterWithExpectations( | 79 TestHelper::SetTexParameterWithExpectations( |
| 80 gl_.get(), error_state_.get(), manager_.get(), | 80 gl_.get(), error_state_.get(), manager_.get(), |
| 81 texture, pname, value, error); | 81 texture_ref, pname, value, error); |
| 82 } | 82 } |
| 83 | 83 |
| 84 // Use StrictMock to make 100% sure we know how GL will be called. | 84 // Use StrictMock to make 100% sure we know how GL will be called. |
| 85 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; | 85 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; |
| 86 scoped_refptr<FeatureInfo> feature_info_; | 86 scoped_refptr<FeatureInfo> feature_info_; |
| 87 scoped_ptr<TextureManager> manager_; | 87 scoped_ptr<TextureManager> manager_; |
| 88 scoped_ptr<MockErrorState> error_state_; | 88 scoped_ptr<MockErrorState> error_state_; |
| 89 }; | 89 }; |
| 90 | 90 |
| 91 // GCC requires these declarations, but MSVC requires they not be present | 91 // GCC requires these declarations, but MSVC requires they not be present |
| 92 #ifndef COMPILER_MSVC | 92 #ifndef COMPILER_MSVC |
| 93 const GLint TextureManagerTest::kMaxTextureSize; | 93 const GLint TextureManagerTest::kMaxTextureSize; |
| 94 const GLint TextureManagerTest::kMaxCubeMapTextureSize; | 94 const GLint TextureManagerTest::kMaxCubeMapTextureSize; |
| 95 const GLint TextureManagerTest::kMaxExternalTextureSize; | 95 const GLint TextureManagerTest::kMaxExternalTextureSize; |
| 96 const GLint TextureManagerTest::kMax2dLevels; | 96 const GLint TextureManagerTest::kMax2dLevels; |
| 97 const GLint TextureManagerTest::kMaxCubeMapLevels; | 97 const GLint TextureManagerTest::kMaxCubeMapLevels; |
| 98 const GLint TextureManagerTest::kMaxExternalLevels; | 98 const GLint TextureManagerTest::kMaxExternalLevels; |
| 99 #endif | 99 #endif |
| 100 | 100 |
| 101 TEST_F(TextureManagerTest, Basic) { | 101 TEST_F(TextureManagerTest, Basic) { |
| 102 const GLuint kClient1Id = 1; | 102 const GLuint kClient1Id = 1; |
| 103 const GLuint kService1Id = 11; | 103 const GLuint kService1Id = 11; |
| 104 const GLuint kClient2Id = 2; | 104 const GLuint kClient2Id = 2; |
| 105 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 105 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 106 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 106 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 107 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 107 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 108 // Check we can create texture. | 108 // Check we can create texture. |
| 109 manager_->CreateTexture(kClient1Id, kService1Id); | 109 manager_->CreateTexture(kClient1Id, kService1Id); |
| 110 // Check texture got created. | 110 // Check texture got created. |
| 111 Texture* texture = manager_->GetTexture(kClient1Id); | 111 TextureRef* texture = manager_->GetTexture(kClient1Id); |
| 112 ASSERT_TRUE(texture != NULL); | 112 ASSERT_TRUE(texture != NULL); |
| 113 EXPECT_EQ(kService1Id, texture->service_id()); | 113 EXPECT_EQ(kService1Id, texture->service_id()); |
| 114 GLuint client_id = 0; | 114 GLuint client_id = 0; |
| 115 EXPECT_TRUE(manager_->GetClientId(texture->service_id(), &client_id)); | 115 EXPECT_TRUE(manager_->GetClientId(texture->service_id(), &client_id)); |
| 116 EXPECT_EQ(kClient1Id, client_id); | 116 EXPECT_EQ(kClient1Id, client_id); |
| 117 // Check we get nothing for a non-existent texture. | 117 // Check we get nothing for a non-existent texture. |
| 118 EXPECT_TRUE(manager_->GetTexture(kClient2Id) == NULL); | 118 EXPECT_TRUE(manager_->GetTexture(kClient2Id) == NULL); |
| 119 // Check trying to a remove non-existent textures does not crash. | 119 // Check trying to a remove non-existent textures does not crash. |
| 120 manager_->RemoveTexture(kClient2Id); | 120 manager_->RemoveTexture(kClient2Id); |
| 121 // Check that it gets deleted when the last reference is released. | 121 // Check that it gets deleted when the last reference is released. |
| 122 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 122 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
| 123 .Times(1) | 123 .Times(1) |
| 124 .RetiresOnSaturation(); | 124 .RetiresOnSaturation(); |
| 125 // Check we can't get the texture after we remove it. | 125 // Check we can't get the texture after we remove it. |
| 126 manager_->RemoveTexture(kClient1Id); | 126 manager_->RemoveTexture(kClient1Id); |
| 127 EXPECT_TRUE(manager_->GetTexture(kClient1Id) == NULL); | 127 EXPECT_TRUE(manager_->GetTexture(kClient1Id) == NULL); |
| 128 } | 128 } |
| 129 | 129 |
| 130 TEST_F(TextureManagerTest, SetParameter) { | 130 TEST_F(TextureManagerTest, SetParameter) { |
| 131 const GLuint kClient1Id = 1; | 131 const GLuint kClient1Id = 1; |
| 132 const GLuint kService1Id = 11; | 132 const GLuint kService1Id = 11; |
| 133 // Check we can create texture. | 133 // Check we can create texture. |
| 134 manager_->CreateTexture(kClient1Id, kService1Id); | 134 manager_->CreateTexture(kClient1Id, kService1Id); |
| 135 // Check texture got created. | 135 // Check texture got created. |
| 136 Texture* texture = manager_->GetTexture(kClient1Id); | 136 TextureRef* texture_ref = manager_->GetTexture(kClient1Id); |
| 137 manager_->SetTarget(texture, GL_TEXTURE_2D); | 137 ASSERT_TRUE(texture_ref != NULL); |
| 138 ASSERT_TRUE(texture != NULL); | 138 Texture* texture = texture_ref->texture(); |
| 139 SetParameter(texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); | 139 manager_->SetTarget(texture_ref, GL_TEXTURE_2D); |
| 140 SetParameter(texture_ref, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 140 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter()); | 141 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter()); |
| 141 SetParameter(texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 142 SetParameter(texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 142 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->mag_filter()); | 143 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->mag_filter()); |
| 143 SetParameter(texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 144 SetParameter(texture_ref, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 144 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_s()); | 145 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_s()); |
| 145 SetParameter(texture, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 146 SetParameter(texture_ref, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 146 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t()); | 147 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t()); |
| 147 SetParameter(texture, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1, GL_NO_ERROR); | 148 SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1, GL_NO_ERROR); |
| 148 SetParameter(texture, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2, GL_NO_ERROR); | 149 SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2, GL_NO_ERROR); |
| 149 SetParameter( | 150 SetParameter( |
| 150 texture, GL_TEXTURE_MIN_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM); | 151 texture_ref, GL_TEXTURE_MIN_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM); |
| 151 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter()); | 152 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter()); |
| 152 SetParameter( | 153 SetParameter( |
| 153 texture, GL_TEXTURE_MAG_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM); | 154 texture_ref, GL_TEXTURE_MAG_FILTER, GL_CLAMP_TO_EDGE, GL_INVALID_ENUM); |
| 154 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter()); | 155 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST), texture->min_filter()); |
| 155 SetParameter(texture, GL_TEXTURE_WRAP_S, GL_NEAREST, GL_INVALID_ENUM); | 156 SetParameter(texture_ref, GL_TEXTURE_WRAP_S, GL_NEAREST, GL_INVALID_ENUM); |
| 156 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_s()); | 157 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_s()); |
| 157 SetParameter(texture, GL_TEXTURE_WRAP_T, GL_NEAREST, GL_INVALID_ENUM); | 158 SetParameter(texture_ref, GL_TEXTURE_WRAP_T, GL_NEAREST, GL_INVALID_ENUM); |
| 158 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t()); | 159 EXPECT_EQ(static_cast<GLenum>(GL_CLAMP_TO_EDGE), texture->wrap_t()); |
| 159 SetParameter(texture, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE); | 160 SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE); |
| 160 } | 161 } |
| 161 | 162 |
| 162 TEST_F(TextureManagerTest, TextureUsageExt) { | 163 TEST_F(TextureManagerTest, TextureUsageExt) { |
| 163 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), | 164 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), |
| 164 "GL_ANGLE_texture_usage"); | 165 "GL_ANGLE_texture_usage"); |
| 165 TextureManager manager( | 166 TextureManager manager( |
| 166 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 167 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 167 manager.Initialize(); | 168 manager.Initialize(); |
| 168 const GLuint kClient1Id = 1; | 169 const GLuint kClient1Id = 1; |
| 169 const GLuint kService1Id = 11; | 170 const GLuint kService1Id = 11; |
| 170 // Check we can create texture. | 171 // Check we can create texture. |
| 171 manager.CreateTexture(kClient1Id, kService1Id); | 172 manager.CreateTexture(kClient1Id, kService1Id); |
| 172 // Check texture got created. | 173 // Check texture got created. |
| 173 Texture* texture = manager.GetTexture(kClient1Id); | 174 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 174 ASSERT_TRUE(texture != NULL); | 175 ASSERT_TRUE(texture_ref != NULL); |
| 175 TestHelper::SetTexParameterWithExpectations( | 176 TestHelper::SetTexParameterWithExpectations( |
| 176 gl_.get(), error_state_.get(), &manager, texture, | 177 gl_.get(), error_state_.get(), &manager, texture_ref, |
| 177 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE,GL_NO_ERROR); | 178 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE,GL_NO_ERROR); |
| 178 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), | 179 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), |
| 179 texture->usage()); | 180 texture_ref->texture()->usage()); |
| 180 manager.Destroy(false); | 181 manager.Destroy(false); |
| 181 } | 182 } |
| 182 | 183 |
| 183 TEST_F(TextureManagerTest, Destroy) { | 184 TEST_F(TextureManagerTest, Destroy) { |
| 184 const GLuint kClient1Id = 1; | 185 const GLuint kClient1Id = 1; |
| 185 const GLuint kService1Id = 11; | 186 const GLuint kService1Id = 11; |
| 186 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 187 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); |
| 187 TextureManager manager( | 188 TextureManager manager( |
| 188 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 189 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 189 manager.Initialize(); | 190 manager.Initialize(); |
| 190 // Check we can create texture. | 191 // Check we can create texture. |
| 191 manager.CreateTexture(kClient1Id, kService1Id); | 192 manager.CreateTexture(kClient1Id, kService1Id); |
| 192 // Check texture got created. | 193 // Check texture got created. |
| 193 Texture* texture = manager.GetTexture(kClient1Id); | 194 TextureRef* texture = manager.GetTexture(kClient1Id); |
| 194 ASSERT_TRUE(texture != NULL); | 195 ASSERT_TRUE(texture != NULL); |
| 195 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 196 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
| 196 .Times(1) | 197 .Times(1) |
| 197 .RetiresOnSaturation(); | 198 .RetiresOnSaturation(); |
| 198 TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), ""); | 199 TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), ""); |
| 199 manager.Destroy(true); | 200 manager.Destroy(true); |
| 200 // Check that resources got freed. | 201 // Check that resources got freed. |
| 201 texture = manager.GetTexture(kClient1Id); | 202 texture = manager.GetTexture(kClient1Id); |
| 202 ASSERT_TRUE(texture == NULL); | 203 ASSERT_TRUE(texture == NULL); |
| 203 } | 204 } |
| 204 | 205 |
| 205 TEST_F(TextureManagerTest, DestroyUnowned) { | 206 TEST_F(TextureManagerTest, DestroyUnowned) { |
| 206 const GLuint kClient1Id = 1; | 207 const GLuint kClient1Id = 1; |
| 207 const GLuint kService1Id = 11; | 208 const GLuint kService1Id = 11; |
| 208 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 209 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); |
| 209 TextureManager manager( | 210 TextureManager manager( |
| 210 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 211 NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 211 manager.Initialize(); | 212 manager.Initialize(); |
| 212 // Check we can create texture. | 213 // Check we can create texture. |
| 213 Texture* created_texture = | 214 TextureRef* created_texture = |
| 214 manager.CreateTexture(kClient1Id, kService1Id); | 215 manager.CreateTexture(kClient1Id, kService1Id); |
| 215 created_texture->SetNotOwned(); | 216 created_texture->texture()->SetNotOwned(); |
| 216 | 217 |
| 217 // Check texture got created. | 218 // Check texture got created. |
| 218 Texture* texture = manager.GetTexture(kClient1Id); | 219 TextureRef* texture = manager.GetTexture(kClient1Id); |
| 219 ASSERT_TRUE(texture != NULL); | 220 ASSERT_TRUE(texture != NULL); |
| 220 | 221 |
| 221 // Check that it is not freed if it is not owned. | 222 // Check that it is not freed if it is not owned. |
| 222 TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), ""); | 223 TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), ""); |
| 223 manager.Destroy(true); | 224 manager.Destroy(true); |
| 224 texture = manager.GetTexture(kClient1Id); | 225 texture = manager.GetTexture(kClient1Id); |
| 225 ASSERT_TRUE(texture == NULL); | 226 ASSERT_TRUE(texture == NULL); |
| 226 } | 227 } |
| 227 | 228 |
| 228 TEST_F(TextureManagerTest, MaxValues) { | 229 TEST_F(TextureManagerTest, MaxValues) { |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 static const GLint kMaxCubeMapTextureSize = 8; | 359 static const GLint kMaxCubeMapTextureSize = 8; |
| 359 static const GLint kMax2dLevels = 5; | 360 static const GLint kMax2dLevels = 5; |
| 360 static const GLint kMaxCubeMapLevels = 4; | 361 static const GLint kMaxCubeMapLevels = 4; |
| 361 static const GLuint kClient1Id = 1; | 362 static const GLuint kClient1Id = 1; |
| 362 static const GLuint kService1Id = 11; | 363 static const GLuint kService1Id = 11; |
| 363 | 364 |
| 364 TextureTestBase() | 365 TextureTestBase() |
| 365 : feature_info_(new FeatureInfo()) { | 366 : feature_info_(new FeatureInfo()) { |
| 366 } | 367 } |
| 367 virtual ~TextureTestBase() { | 368 virtual ~TextureTestBase() { |
| 368 texture_ = NULL; | 369 texture_ref_ = NULL; |
| 369 } | 370 } |
| 370 | 371 |
| 371 protected: | 372 protected: |
| 372 void SetUpBase(MemoryTracker* memory_tracker, std::string extensions) { | 373 void SetUpBase(MemoryTracker* memory_tracker, std::string extensions) { |
| 373 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); | 374 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); |
| 374 ::gfx::GLInterface::SetGLInterface(gl_.get()); | 375 ::gfx::GLInterface::SetGLInterface(gl_.get()); |
| 375 | 376 |
| 376 if (!extensions.empty()) { | 377 if (!extensions.empty()) { |
| 377 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), | 378 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), |
| 378 extensions.c_str()); | 379 extensions.c_str()); |
| 379 feature_info_->Initialize(NULL); | 380 feature_info_->Initialize(NULL); |
| 380 } | 381 } |
| 381 | 382 |
| 382 manager_.reset(new TextureManager( | 383 manager_.reset(new TextureManager( |
| 383 memory_tracker, feature_info_.get(), | 384 memory_tracker, feature_info_.get(), |
| 384 kMaxTextureSize, kMaxCubeMapTextureSize)); | 385 kMaxTextureSize, kMaxCubeMapTextureSize)); |
| 385 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); | 386 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); |
| 386 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 387 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
| 387 manager_->CreateTexture(kClient1Id, kService1Id); | 388 manager_->CreateTexture(kClient1Id, kService1Id); |
| 388 texture_ = manager_->GetTexture(kClient1Id); | 389 texture_ref_ = manager_->GetTexture(kClient1Id); |
| 389 ASSERT_TRUE(texture_.get() != NULL); | 390 ASSERT_TRUE(texture_ref_.get() != NULL); |
| 390 } | 391 } |
| 391 | 392 |
| 392 virtual void TearDown() { | 393 virtual void TearDown() { |
| 393 if (texture_.get()) { | 394 if (texture_ref_.get()) { |
| 394 GLuint client_id = 0; | 395 GLuint client_id = 0; |
| 395 // If it's not in the manager then setting texture_ to NULL will | 396 // If it's not in the manager then setting texture_ref_ to NULL will |
| 396 // delete the texture. | 397 // delete the texture. |
| 397 if (!manager_->GetClientId(texture_->service_id(), &client_id)) { | 398 if (!manager_->GetClientId(texture_ref_->service_id(), &client_id)) { |
| 398 // Check that it gets deleted when the last reference is released. | 399 // Check that it gets deleted when the last reference is released. |
| 399 EXPECT_CALL(*gl_, | 400 EXPECT_CALL(*gl_, |
| 400 DeleteTextures(1, ::testing::Pointee(texture_->service_id()))) | 401 DeleteTextures(1, ::testing::Pointee(texture_ref_->service_id()))) |
| 401 .Times(1) | 402 .Times(1) |
| 402 .RetiresOnSaturation(); | 403 .RetiresOnSaturation(); |
| 403 } | 404 } |
| 404 texture_ = NULL; | 405 texture_ref_ = NULL; |
| 405 } | 406 } |
| 406 manager_->Destroy(false); | 407 manager_->Destroy(false); |
| 407 manager_.reset(); | 408 manager_.reset(); |
| 408 ::gfx::GLInterface::SetGLInterface(NULL); | 409 ::gfx::GLInterface::SetGLInterface(NULL); |
| 409 gl_.reset(); | 410 gl_.reset(); |
| 410 } | 411 } |
| 411 | 412 |
| 412 void SetParameter( | 413 void SetParameter( |
| 413 Texture* texture, GLenum pname, GLint value, GLenum error) { | 414 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { |
| 414 TestHelper::SetTexParameterWithExpectations( | 415 TestHelper::SetTexParameterWithExpectations( |
| 415 gl_.get(), error_state_.get(), manager_.get(), | 416 gl_.get(), error_state_.get(), manager_.get(), |
| 416 texture, pname, value, error); | 417 texture_ref, pname, value, error); |
| 417 } | 418 } |
| 418 | 419 |
| 419 scoped_ptr<MockGLES2Decoder> decoder_; | 420 scoped_ptr<MockGLES2Decoder> decoder_; |
| 420 scoped_ptr<MockErrorState> error_state_; | 421 scoped_ptr<MockErrorState> error_state_; |
| 421 // Use StrictMock to make 100% sure we know how GL will be called. | 422 // Use StrictMock to make 100% sure we know how GL will be called. |
| 422 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; | 423 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; |
| 423 scoped_refptr<FeatureInfo> feature_info_; | 424 scoped_refptr<FeatureInfo> feature_info_; |
| 424 scoped_ptr<TextureManager> manager_; | 425 scoped_ptr<TextureManager> manager_; |
| 425 scoped_refptr<Texture> texture_; | 426 scoped_refptr<TextureRef> texture_ref_; |
| 426 }; | 427 }; |
| 427 | 428 |
| 428 class TextureTest : public TextureTestBase { | 429 class TextureTest : public TextureTestBase { |
| 429 protected: | 430 protected: |
| 430 virtual void SetUp() { | 431 virtual void SetUp() { |
| 431 SetUpBase(NULL, std::string()); | 432 SetUpBase(NULL, std::string()); |
| 432 } | 433 } |
| 433 }; | 434 }; |
| 434 | 435 |
| 435 class TextureMemoryTrackerTest : public TextureTestBase { | 436 class TextureMemoryTrackerTest : public TextureTestBase { |
| 436 protected: | 437 protected: |
| 437 virtual void SetUp() { | 438 virtual void SetUp() { |
| 438 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>(); | 439 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>(); |
| 439 SetUpBase(mock_memory_tracker_.get(), std::string()); | 440 SetUpBase(mock_memory_tracker_.get(), std::string()); |
| 440 } | 441 } |
| 441 | 442 |
| 442 scoped_refptr<MockMemoryTracker> mock_memory_tracker_; | 443 scoped_refptr<MockMemoryTracker> mock_memory_tracker_; |
| 443 }; | 444 }; |
| 444 | 445 |
| 445 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \ | 446 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \ |
| 446 EXPECT_CALL(*mock_memory_tracker_, \ | 447 EXPECT_CALL(*mock_memory_tracker_, \ |
| 447 TrackMemoryAllocatedChange(old_size, new_size, pool)) \ | 448 TrackMemoryAllocatedChange(old_size, new_size, pool)) \ |
| 448 .Times(1) \ | 449 .Times(1) \ |
| 449 .RetiresOnSaturation() \ | 450 .RetiresOnSaturation() \ |
| 450 | 451 |
| 451 TEST_F(TextureTest, Basic) { | 452 TEST_F(TextureTest, Basic) { |
| 452 EXPECT_EQ(0u, texture_->target()); | 453 Texture* texture = texture_ref_->texture(); |
| 453 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 454 EXPECT_EQ(0u, texture->target()); |
| 454 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_)); | 455 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 455 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_)); | 456 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 456 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 457 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 457 EXPECT_EQ(0, texture_->num_uncleared_mips()); | 458 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 458 EXPECT_FALSE(manager_->CanRender(texture_)); | 459 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 459 EXPECT_TRUE(texture_->SafeToRenderFrom()); | 460 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 460 EXPECT_FALSE(texture_->IsImmutable()); | 461 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 462 EXPECT_FALSE(texture->IsImmutable()); |
| 461 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), | 463 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), |
| 462 texture_->min_filter()); | 464 texture->min_filter()); |
| 463 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture_->mag_filter()); | 465 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter()); |
| 464 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture_->wrap_s()); | 466 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s()); |
| 465 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture_->wrap_t()); | 467 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t()); |
| 466 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 468 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 467 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 469 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 468 EXPECT_EQ(0u, texture_->estimated_size()); | 470 EXPECT_EQ(0u, texture->estimated_size()); |
| 469 } | 471 } |
| 470 | 472 |
| 471 TEST_F(TextureTest, SetTargetTexture2D) { | 473 TEST_F(TextureTest, SetTargetTexture2D) { |
| 472 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 474 Texture* texture = texture_ref_->texture(); |
| 473 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 475 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 474 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_)); | 476 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 475 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_)); | 477 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 476 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 478 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 477 EXPECT_FALSE(manager_->CanRender(texture_)); | 479 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 478 EXPECT_TRUE(texture_->SafeToRenderFrom()); | 480 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 479 EXPECT_FALSE(texture_->IsImmutable()); | 481 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 482 EXPECT_FALSE(texture->IsImmutable()); |
| 480 } | 483 } |
| 481 | 484 |
| 482 TEST_F(TextureTest, SetTargetTextureExternalOES) { | 485 TEST_F(TextureTest, SetTargetTextureExternalOES) { |
| 483 manager_->SetTarget(texture_, GL_TEXTURE_EXTERNAL_OES); | 486 Texture* texture = texture_ref_->texture(); |
| 484 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 487 manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES); |
| 485 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_)); | 488 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 486 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_)); | 489 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 487 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 490 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 488 EXPECT_TRUE(manager_->CanRender(texture_)); | 491 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 489 EXPECT_TRUE(texture_->SafeToRenderFrom()); | 492 EXPECT_TRUE(manager_->CanRender(texture_ref_)); |
| 490 EXPECT_TRUE(texture_->IsImmutable()); | 493 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 494 EXPECT_TRUE(texture->IsImmutable()); |
| 491 } | 495 } |
| 492 | 496 |
| 493 TEST_F(TextureTest, EstimatedSize) { | 497 TEST_F(TextureTest, EstimatedSize) { |
| 494 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 498 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 495 manager_->SetLevelInfo(texture_, | 499 manager_->SetLevelInfo(texture_ref_, |
| 496 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 500 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 497 EXPECT_EQ(8u * 4u * 4u, texture_->estimated_size()); | 501 EXPECT_EQ(8u * 4u * 4u, texture_ref_->texture()->estimated_size()); |
| 498 manager_->SetLevelInfo(texture_, | 502 manager_->SetLevelInfo(texture_ref_, |
| 499 GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 503 GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 500 EXPECT_EQ(8u * 4u * 4u * 2u, texture_->estimated_size()); | 504 EXPECT_EQ(8u * 4u * 4u * 2u, texture_ref_->texture()->estimated_size()); |
| 501 } | 505 } |
| 502 | 506 |
| 503 TEST_F(TextureMemoryTrackerTest, EstimatedSize) { | 507 TEST_F(TextureMemoryTrackerTest, EstimatedSize) { |
| 504 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 508 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 505 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); | 509 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); |
| 506 manager_->SetLevelInfo(texture_, | 510 manager_->SetLevelInfo(texture_ref_, |
| 507 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 511 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 508 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); | 512 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); |
| 509 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 256, MemoryTracker::kUnmanaged); | 513 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 256, MemoryTracker::kUnmanaged); |
| 510 manager_->SetLevelInfo(texture_, | 514 manager_->SetLevelInfo(texture_ref_, |
| 511 GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 515 GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 512 // Add expectation for texture deletion. | 516 // Add expectation for texture deletion. |
| 513 EXPECT_MEMORY_ALLOCATION_CHANGE(256, 0, MemoryTracker::kUnmanaged); | 517 EXPECT_MEMORY_ALLOCATION_CHANGE(256, 0, MemoryTracker::kUnmanaged); |
| 514 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 518 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
| 515 } | 519 } |
| 516 | 520 |
| 517 TEST_F(TextureMemoryTrackerTest, SetParameterPool) { | 521 TEST_F(TextureMemoryTrackerTest, SetParameterPool) { |
| 518 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 522 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 519 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); | 523 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); |
| 520 manager_->SetLevelInfo(texture_, | 524 manager_->SetLevelInfo(texture_ref_, |
| 521 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 525 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 522 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); | 526 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); |
| 523 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kManaged); | 527 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kManaged); |
| 524 SetParameter( | 528 SetParameter( |
| 525 texture_, GL_TEXTURE_POOL_CHROMIUM, GL_TEXTURE_POOL_MANAGED_CHROMIUM, | 529 texture_ref_, GL_TEXTURE_POOL_CHROMIUM, GL_TEXTURE_POOL_MANAGED_CHROMIUM, |
| 526 GL_NO_ERROR); | 530 GL_NO_ERROR); |
| 527 // Add expectation for texture deletion. | 531 // Add expectation for texture deletion. |
| 528 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kManaged); | 532 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kManaged); |
| 529 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 533 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
| 530 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged); | 534 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged); |
| 531 } | 535 } |
| 532 | 536 |
| 533 TEST_F(TextureTest, POT2D) { | 537 TEST_F(TextureTest, POT2D) { |
| 534 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 538 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 535 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture_->target()); | 539 Texture* texture = texture_ref_->texture(); |
| 540 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 536 // Check Setting level 0 to POT | 541 // Check Setting level 0 to POT |
| 537 manager_->SetLevelInfo(texture_, | 542 manager_->SetLevelInfo(texture_ref_, |
| 538 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 543 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 539 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 544 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 540 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 545 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 541 EXPECT_FALSE(manager_->CanRender(texture_)); | 546 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 542 EXPECT_EQ(0, texture_->num_uncleared_mips()); | 547 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 543 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 548 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 544 // Set filters to something that will work with a single mip. | 549 // Set filters to something that will work with a single mip. |
| 545 SetParameter(texture_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 550 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
| 546 EXPECT_TRUE(manager_->CanRender(texture_)); | 551 EXPECT_TRUE(manager_->CanRender(texture_ref_)); |
| 547 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 552 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 548 // Set them back. | 553 // Set them back. |
| 549 SetParameter( | 554 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, |
| 550 texture_, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR, GL_NO_ERROR); | 555 GL_LINEAR_MIPMAP_LINEAR, GL_NO_ERROR); |
| 551 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 556 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 552 | 557 |
| 553 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_)); | 558 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 554 // Make mips. | 559 // Make mips. |
| 555 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_)); | 560 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); |
| 556 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 561 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 557 EXPECT_TRUE(manager_->CanRender(texture_)); | 562 EXPECT_TRUE(manager_->CanRender(texture_ref_)); |
| 558 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 563 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 559 // Change a mip. | 564 // Change a mip. |
| 560 manager_->SetLevelInfo(texture_, | 565 manager_->SetLevelInfo(texture_ref_, |
| 561 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 566 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 562 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 567 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 563 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 568 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 564 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_)); | 569 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 565 EXPECT_FALSE(manager_->CanRender(texture_)); | 570 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 566 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 571 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 567 // Set a level past the number of mips that would get generated. | 572 // Set a level past the number of mips that would get generated. |
| 568 manager_->SetLevelInfo(texture_, | 573 manager_->SetLevelInfo(texture_ref_, |
| 569 GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 574 GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 570 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_)); | 575 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 571 // Make mips. | 576 // Make mips. |
| 572 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_)); | 577 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); |
| 573 EXPECT_TRUE(manager_->CanRender(texture_)); | 578 EXPECT_TRUE(manager_->CanRender(texture_ref_)); |
| 574 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 579 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 575 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 580 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 576 } | 581 } |
| 577 | 582 |
| 578 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { | 583 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { |
| 579 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 584 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 580 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64, MemoryTracker::kUnmanaged); | 585 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64, MemoryTracker::kUnmanaged); |
| 581 manager_->SetLevelInfo(texture_, | 586 manager_->SetLevelInfo(texture_ref_, |
| 582 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 587 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 583 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0, MemoryTracker::kUnmanaged); | 588 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0, MemoryTracker::kUnmanaged); |
| 584 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84, MemoryTracker::kUnmanaged); | 589 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84, MemoryTracker::kUnmanaged); |
| 585 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_)); | 590 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); |
| 586 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0, MemoryTracker::kUnmanaged); | 591 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0, MemoryTracker::kUnmanaged); |
| 587 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 592 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
| 588 } | 593 } |
| 589 | 594 |
| 590 TEST_F(TextureTest, UnusedMips) { | 595 TEST_F(TextureTest, UnusedMips) { |
| 591 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 596 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 592 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture_->target()); | 597 Texture* texture = texture_ref_->texture(); |
| 598 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 593 // Set level zero to large size. | 599 // Set level zero to large size. |
| 594 manager_->SetLevelInfo(texture_, | 600 manager_->SetLevelInfo(texture_ref_, |
| 595 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 601 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 596 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_)); | 602 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); |
| 597 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 603 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 598 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 604 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 599 EXPECT_TRUE(manager_->CanRender(texture_)); | 605 EXPECT_TRUE(manager_->CanRender(texture_ref_)); |
| 600 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 606 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 601 // Set level zero to large smaller (levels unused mips) | 607 // Set level zero to large smaller (levels unused mips) |
| 602 manager_->SetLevelInfo(texture_, | 608 manager_->SetLevelInfo(texture_ref_, |
| 603 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 609 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 604 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_)); | 610 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); |
| 605 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 611 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 606 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 612 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 607 EXPECT_TRUE(manager_->CanRender(texture_)); | 613 EXPECT_TRUE(manager_->CanRender(texture_ref_)); |
| 608 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 614 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 609 // Set an unused level to some size | 615 // Set an unused level to some size |
| 610 manager_->SetLevelInfo(texture_, | 616 manager_->SetLevelInfo(texture_ref_, |
| 611 GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 617 GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 612 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 618 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 613 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 619 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 614 EXPECT_TRUE(manager_->CanRender(texture_)); | 620 EXPECT_TRUE(manager_->CanRender(texture_ref_)); |
| 615 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 621 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 616 } | 622 } |
| 617 | 623 |
| 618 TEST_F(TextureTest, NPOT2D) { | 624 TEST_F(TextureTest, NPOT2D) { |
| 619 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 625 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 620 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture_->target()); | 626 Texture* texture = texture_ref_->texture(); |
| 627 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 621 // Check Setting level 0 to NPOT | 628 // Check Setting level 0 to NPOT |
| 622 manager_->SetLevelInfo(texture_, | 629 manager_->SetLevelInfo(texture_ref_, |
| 623 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 630 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 624 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture_)); | 631 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
| 625 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 632 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 626 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_)); | 633 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 627 EXPECT_FALSE(manager_->CanRender(texture_)); | 634 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 628 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 635 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 629 SetParameter(texture_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 636 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
| 630 EXPECT_FALSE(manager_->CanRender(texture_)); | 637 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 631 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 638 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 632 SetParameter(texture_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 639 SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 633 EXPECT_FALSE(manager_->CanRender(texture_)); | 640 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 634 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 641 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 635 SetParameter(texture_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 642 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 636 EXPECT_TRUE(manager_->CanRender(texture_)); | 643 EXPECT_TRUE(manager_->CanRender(texture_ref_)); |
| 637 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 644 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 638 // Change it to POT. | 645 // Change it to POT. |
| 639 manager_->SetLevelInfo(texture_, | 646 manager_->SetLevelInfo(texture_ref_, |
| 640 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 647 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 641 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 648 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 642 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 649 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 643 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_)); | 650 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 644 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 651 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 645 } | 652 } |
| 646 | 653 |
| 647 TEST_F(TextureTest, NPOT2DNPOTOK) { | 654 TEST_F(TextureTest, NPOT2DNPOTOK) { |
| 648 TestHelper::SetupFeatureInfoInitExpectations( | 655 TestHelper::SetupFeatureInfoInitExpectations( |
| 649 gl_.get(), "GL_OES_texture_npot"); | 656 gl_.get(), "GL_OES_texture_npot"); |
| 650 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 657 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 651 feature_info->Initialize(NULL); | 658 feature_info->Initialize(NULL); |
| 652 TextureManager manager( | 659 TextureManager manager( |
| 653 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 660 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 654 manager.CreateTexture(kClient1Id, kService1Id); | 661 manager.CreateTexture(kClient1Id, kService1Id); |
| 655 Texture* texture = manager.GetTexture(kClient1Id); | 662 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 656 ASSERT_TRUE(texture != NULL); | 663 ASSERT_TRUE(texture_ref != NULL); |
| 664 Texture* texture = texture_ref->texture(); |
| 657 | 665 |
| 658 manager.SetTarget(texture, GL_TEXTURE_2D); | 666 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 659 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 667 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 660 // Check Setting level 0 to NPOT | 668 // Check Setting level 0 to NPOT |
| 661 manager.SetLevelInfo(texture, | 669 manager.SetLevelInfo(texture_ref, |
| 662 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 670 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 663 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 671 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
| 664 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 672 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 665 EXPECT_TRUE(manager.CanGenerateMipmaps(texture)); | 673 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); |
| 666 EXPECT_FALSE(manager.CanRender(texture)); | 674 EXPECT_FALSE(manager.CanRender(texture_ref)); |
| 667 EXPECT_TRUE(manager.HaveUnrenderableTextures()); | 675 EXPECT_TRUE(manager.HaveUnrenderableTextures()); |
| 668 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture)); | 676 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref)); |
| 669 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 677 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 670 EXPECT_TRUE(manager.CanRender(texture)); | 678 EXPECT_TRUE(manager.CanRender(texture_ref)); |
| 671 EXPECT_FALSE(manager.HaveUnrenderableTextures()); | 679 EXPECT_FALSE(manager.HaveUnrenderableTextures()); |
| 672 manager.Destroy(false); | 680 manager.Destroy(false); |
| 673 } | 681 } |
| 674 | 682 |
| 675 TEST_F(TextureTest, POTCubeMap) { | 683 TEST_F(TextureTest, POTCubeMap) { |
| 676 manager_->SetTarget(texture_, GL_TEXTURE_CUBE_MAP); | 684 manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP); |
| 677 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture_->target()); | 685 Texture* texture = texture_ref_->texture(); |
| 686 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
| 678 // Check Setting level 0 each face to POT | 687 // Check Setting level 0 each face to POT |
| 679 manager_->SetLevelInfo(texture_, | 688 manager_->SetLevelInfo(texture_ref_, |
| 680 GL_TEXTURE_CUBE_MAP_POSITIVE_X, | 689 GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| 681 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 690 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 682 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 691 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 683 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 692 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 684 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_)); | 693 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 685 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_)); | 694 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 686 EXPECT_FALSE(manager_->CanRender(texture_)); | 695 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 687 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 696 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 688 manager_->SetLevelInfo(texture_, | 697 manager_->SetLevelInfo(texture_ref_, |
| 689 GL_TEXTURE_CUBE_MAP_NEGATIVE_X, | 698 GL_TEXTURE_CUBE_MAP_NEGATIVE_X, |
| 690 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 699 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 691 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 700 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 692 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 701 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 693 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_)); | 702 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 694 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_)); | 703 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 695 EXPECT_FALSE(manager_->CanRender(texture_)); | 704 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 696 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 705 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 697 manager_->SetLevelInfo(texture_, | 706 manager_->SetLevelInfo(texture_ref_, |
| 698 GL_TEXTURE_CUBE_MAP_POSITIVE_Y, | 707 GL_TEXTURE_CUBE_MAP_POSITIVE_Y, |
| 699 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 708 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 700 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 709 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 701 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 710 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 702 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_)); | 711 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 703 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_)); | 712 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 704 EXPECT_FALSE(manager_->CanRender(texture_)); | 713 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 705 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 714 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 706 manager_->SetLevelInfo(texture_, | 715 manager_->SetLevelInfo(texture_ref_, |
| 707 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, | 716 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| 708 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 717 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 709 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 718 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 710 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 719 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 711 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_)); | 720 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 712 EXPECT_FALSE(manager_->CanRender(texture_)); | 721 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 713 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_)); | 722 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 714 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 723 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 715 manager_->SetLevelInfo(texture_, | 724 manager_->SetLevelInfo(texture_ref_, |
| 716 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, | 725 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, |
| 717 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 726 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 718 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 727 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 719 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 728 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 720 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture_)); | 729 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 721 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_)); | 730 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 722 EXPECT_FALSE(manager_->CanRender(texture_)); | 731 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 723 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 732 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 724 manager_->SetLevelInfo(texture_, | 733 manager_->SetLevelInfo(texture_ref_, |
| 725 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 734 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 726 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 735 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 727 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 736 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 728 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 737 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 729 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture_)); | 738 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 730 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_)); | 739 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 731 EXPECT_FALSE(manager_->CanRender(texture_)); | 740 EXPECT_FALSE(manager_->CanRender(texture_ref_)); |
| 732 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 741 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 733 | 742 |
| 734 // Make mips. | 743 // Make mips. |
| 735 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_)); | 744 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); |
| 736 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 745 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 737 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture_)); | 746 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 738 EXPECT_TRUE(manager_->CanRender(texture_)); | 747 EXPECT_TRUE(manager_->CanRender(texture_ref_)); |
| 739 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 748 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 740 | 749 |
| 741 // Change a mip. | 750 // Change a mip. |
| 742 manager_->SetLevelInfo(texture_, | 751 manager_->SetLevelInfo(texture_ref_, |
| 743 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 752 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 744 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 753 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 745 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture_)); | 754 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 746 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture_)); | 755 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 747 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture_)); | 756 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 748 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_)); | 757 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 749 // Set a level past the number of mips that would get generated. | 758 // Set a level past the number of mips that would get generated. |
| 750 manager_->SetLevelInfo(texture_, | 759 manager_->SetLevelInfo(texture_ref_, |
| 751 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 760 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 752 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 761 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 753 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_)); | 762 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); |
| 754 // Make mips. | 763 // Make mips. |
| 755 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_)); | 764 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); |
| 756 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 765 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 757 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture_)); | 766 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 758 } | 767 } |
| 759 | 768 |
| 760 TEST_F(TextureTest, GetLevelSize) { | 769 TEST_F(TextureTest, GetLevelSize) { |
| 761 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 770 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 762 manager_->SetLevelInfo(texture_, | 771 manager_->SetLevelInfo(texture_ref_, |
| 763 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 772 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 764 GLsizei width = -1; | 773 GLsizei width = -1; |
| 765 GLsizei height = -1; | 774 GLsizei height = -1; |
| 766 EXPECT_FALSE(texture_->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height)); | 775 Texture* texture = texture_ref_->texture(); |
| 767 EXPECT_FALSE(texture_->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height)); | 776 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height)); |
| 768 EXPECT_FALSE(texture_->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); | 777 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height)); |
| 769 EXPECT_TRUE(texture_->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); | 778 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
| 779 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); |
| 770 EXPECT_EQ(4, width); | 780 EXPECT_EQ(4, width); |
| 771 EXPECT_EQ(5, height); | 781 EXPECT_EQ(5, height); |
| 772 manager_->RemoveTexture(kClient1Id); | 782 manager_->RemoveTexture(kClient1Id); |
| 773 EXPECT_TRUE(texture_->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); | 783 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); |
| 774 EXPECT_EQ(4, width); | 784 EXPECT_EQ(4, width); |
| 775 EXPECT_EQ(5, height); | 785 EXPECT_EQ(5, height); |
| 776 } | 786 } |
| 777 | 787 |
| 778 TEST_F(TextureTest, GetLevelType) { | 788 TEST_F(TextureTest, GetLevelType) { |
| 779 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 789 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 780 manager_->SetLevelInfo(texture_, | 790 manager_->SetLevelInfo(texture_ref_, |
| 781 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 791 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 782 GLenum type = -1; | 792 GLenum type = -1; |
| 783 GLenum format = -1; | 793 GLenum format = -1; |
| 784 EXPECT_FALSE(texture_->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); | 794 Texture* texture = texture_ref_->texture(); |
| 785 EXPECT_FALSE(texture_->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); | 795 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); |
| 786 EXPECT_FALSE(texture_->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); | 796 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); |
| 787 EXPECT_TRUE(texture_->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 797 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); |
| 798 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
| 788 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 799 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
| 789 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 800 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
| 790 manager_->RemoveTexture(kClient1Id); | 801 manager_->RemoveTexture(kClient1Id); |
| 791 EXPECT_TRUE(texture_->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 802 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
| 792 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 803 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
| 793 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 804 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
| 794 } | 805 } |
| 795 | 806 |
| 796 TEST_F(TextureTest, ValidForTexture) { | 807 TEST_F(TextureTest, ValidForTexture) { |
| 797 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 808 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 798 manager_->SetLevelInfo(texture_, | 809 manager_->SetLevelInfo(texture_ref_, |
| 799 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 810 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 800 // Check bad face. | 811 // Check bad face. |
| 801 EXPECT_FALSE(texture_->ValidForTexture( | 812 Texture* texture = texture_ref_->texture(); |
| 813 EXPECT_FALSE(texture->ValidForTexture( |
| 802 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 814 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 803 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 815 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 804 // Check bad level. | 816 // Check bad level. |
| 805 EXPECT_FALSE(texture_->ValidForTexture( | 817 EXPECT_FALSE(texture->ValidForTexture( |
| 806 GL_TEXTURE_2D, 0, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 818 GL_TEXTURE_2D, 0, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 807 // Check bad xoffset. | 819 // Check bad xoffset. |
| 808 EXPECT_FALSE(texture_->ValidForTexture( | 820 EXPECT_FALSE(texture->ValidForTexture( |
| 809 GL_TEXTURE_2D, 1, -1, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 821 GL_TEXTURE_2D, 1, -1, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 810 // Check bad xoffset + width > width. | 822 // Check bad xoffset + width > width. |
| 811 EXPECT_FALSE(texture_->ValidForTexture( | 823 EXPECT_FALSE(texture->ValidForTexture( |
| 812 GL_TEXTURE_2D, 1, 1, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 824 GL_TEXTURE_2D, 1, 1, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 813 // Check bad yoffset. | 825 // Check bad yoffset. |
| 814 EXPECT_FALSE(texture_->ValidForTexture( | 826 EXPECT_FALSE(texture->ValidForTexture( |
| 815 GL_TEXTURE_2D, 1, 0, -1, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 827 GL_TEXTURE_2D, 1, 0, -1, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 816 // Check bad yoffset + height > height. | 828 // Check bad yoffset + height > height. |
| 817 EXPECT_FALSE(texture_->ValidForTexture( | 829 EXPECT_FALSE(texture->ValidForTexture( |
| 818 GL_TEXTURE_2D, 1, 0, 1, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 830 GL_TEXTURE_2D, 1, 0, 1, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 819 // Check bad width. | 831 // Check bad width. |
| 820 EXPECT_FALSE(texture_->ValidForTexture( | 832 EXPECT_FALSE(texture->ValidForTexture( |
| 821 GL_TEXTURE_2D, 1, 0, 0, 5, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 833 GL_TEXTURE_2D, 1, 0, 0, 5, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 822 // Check bad height. | 834 // Check bad height. |
| 823 EXPECT_FALSE(texture_->ValidForTexture( | 835 EXPECT_FALSE(texture->ValidForTexture( |
| 824 GL_TEXTURE_2D, 1, 0, 0, 4, 6, GL_RGBA, GL_UNSIGNED_BYTE)); | 836 GL_TEXTURE_2D, 1, 0, 0, 4, 6, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 825 // Check bad format. | 837 // Check bad format. |
| 826 EXPECT_FALSE(texture_->ValidForTexture( | 838 EXPECT_FALSE(texture->ValidForTexture( |
| 827 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGB, GL_UNSIGNED_BYTE)); | 839 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGB, GL_UNSIGNED_BYTE)); |
| 828 // Check bad type. | 840 // Check bad type. |
| 829 EXPECT_FALSE(texture_->ValidForTexture( | 841 EXPECT_FALSE(texture->ValidForTexture( |
| 830 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4)); | 842 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4)); |
| 831 // Check valid full size | 843 // Check valid full size |
| 832 EXPECT_TRUE(texture_->ValidForTexture( | 844 EXPECT_TRUE(texture->ValidForTexture( |
| 833 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 845 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 834 // Check valid particial size. | 846 // Check valid particial size. |
| 835 EXPECT_TRUE(texture_->ValidForTexture( | 847 EXPECT_TRUE(texture->ValidForTexture( |
| 836 GL_TEXTURE_2D, 1, 1, 1, 2, 3, GL_RGBA, GL_UNSIGNED_BYTE)); | 848 GL_TEXTURE_2D, 1, 1, 1, 2, 3, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 837 manager_->RemoveTexture(kClient1Id); | 849 manager_->RemoveTexture(kClient1Id); |
| 838 EXPECT_TRUE(texture_->ValidForTexture( | 850 EXPECT_TRUE(texture->ValidForTexture( |
| 839 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 851 GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 840 } | 852 } |
| 841 | 853 |
| 842 TEST_F(TextureTest, FloatNotLinear) { | 854 TEST_F(TextureTest, FloatNotLinear) { |
| 843 TestHelper::SetupFeatureInfoInitExpectations( | 855 TestHelper::SetupFeatureInfoInitExpectations( |
| 844 gl_.get(), "GL_OES_texture_float"); | 856 gl_.get(), "GL_OES_texture_float"); |
| 845 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 857 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 846 feature_info->Initialize(NULL); | 858 feature_info->Initialize(NULL); |
| 847 TextureManager manager( | 859 TextureManager manager( |
| 848 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 860 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 849 manager.CreateTexture(kClient1Id, kService1Id); | 861 manager.CreateTexture(kClient1Id, kService1Id); |
| 850 Texture* texture = manager.GetTexture(kClient1Id); | 862 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 851 ASSERT_TRUE(texture != NULL); | 863 ASSERT_TRUE(texture_ref != NULL); |
| 852 manager.SetTarget(texture, GL_TEXTURE_2D); | 864 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 865 Texture* texture = texture_ref->texture(); |
| 853 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 866 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 854 manager.SetLevelInfo(texture, | 867 manager.SetLevelInfo(texture_ref, |
| 855 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 868 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); |
| 856 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 869 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 857 TestHelper::SetTexParameterWithExpectations( | 870 TestHelper::SetTexParameterWithExpectations( |
| 858 gl_.get(), error_state_.get(), &manager, | 871 gl_.get(), error_state_.get(), &manager, |
| 859 texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 872 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 860 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 873 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 861 TestHelper::SetTexParameterWithExpectations( | 874 TestHelper::SetTexParameterWithExpectations( |
| 862 gl_.get(), error_state_.get(), &manager, | 875 gl_.get(), error_state_.get(), &manager, texture_ref, |
| 863 texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 876 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
| 864 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 877 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 865 manager.Destroy(false); | 878 manager.Destroy(false); |
| 866 } | 879 } |
| 867 | 880 |
| 868 TEST_F(TextureTest, FloatLinear) { | 881 TEST_F(TextureTest, FloatLinear) { |
| 869 TestHelper::SetupFeatureInfoInitExpectations( | 882 TestHelper::SetupFeatureInfoInitExpectations( |
| 870 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); | 883 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); |
| 871 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 884 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 872 feature_info->Initialize(NULL); | 885 feature_info->Initialize(NULL); |
| 873 TextureManager manager( | 886 TextureManager manager( |
| 874 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 887 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 875 manager.CreateTexture(kClient1Id, kService1Id); | 888 manager.CreateTexture(kClient1Id, kService1Id); |
| 876 Texture* texture = manager.GetTexture(kClient1Id); | 889 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 877 ASSERT_TRUE(texture != NULL); | 890 ASSERT_TRUE(texture_ref != NULL); |
| 878 manager.SetTarget(texture, GL_TEXTURE_2D); | 891 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 892 Texture* texture = texture_ref->texture(); |
| 879 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 893 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 880 manager.SetLevelInfo(texture, | 894 manager.SetLevelInfo(texture_ref, |
| 881 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); | 895 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true); |
| 882 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 896 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 883 manager.Destroy(false); | 897 manager.Destroy(false); |
| 884 } | 898 } |
| 885 | 899 |
| 886 TEST_F(TextureTest, HalfFloatNotLinear) { | 900 TEST_F(TextureTest, HalfFloatNotLinear) { |
| 887 TestHelper::SetupFeatureInfoInitExpectations( | 901 TestHelper::SetupFeatureInfoInitExpectations( |
| 888 gl_.get(), "GL_OES_texture_half_float"); | 902 gl_.get(), "GL_OES_texture_half_float"); |
| 889 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 903 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 890 feature_info->Initialize(NULL); | 904 feature_info->Initialize(NULL); |
| 891 TextureManager manager( | 905 TextureManager manager( |
| 892 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 906 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 893 manager.CreateTexture(kClient1Id, kService1Id); | 907 manager.CreateTexture(kClient1Id, kService1Id); |
| 894 Texture* texture = manager.GetTexture(kClient1Id); | 908 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 895 ASSERT_TRUE(texture != NULL); | 909 ASSERT_TRUE(texture_ref != NULL); |
| 896 manager.SetTarget(texture, GL_TEXTURE_2D); | 910 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 911 Texture* texture = texture_ref->texture(); |
| 897 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 912 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 898 manager.SetLevelInfo(texture, | 913 manager.SetLevelInfo(texture_ref, |
| 899 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 914 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); |
| 900 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 915 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 901 TestHelper::SetTexParameterWithExpectations( | 916 TestHelper::SetTexParameterWithExpectations( |
| 902 gl_.get(), error_state_.get(), &manager, | 917 gl_.get(), error_state_.get(), &manager, |
| 903 texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 918 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 904 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 919 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 905 TestHelper::SetTexParameterWithExpectations( | 920 TestHelper::SetTexParameterWithExpectations( |
| 906 gl_.get(), error_state_.get(), &manager, | 921 gl_.get(), error_state_.get(), &manager, texture_ref, |
| 907 texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); | 922 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); |
| 908 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 923 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 909 manager.Destroy(false); | 924 manager.Destroy(false); |
| 910 } | 925 } |
| 911 | 926 |
| 912 TEST_F(TextureTest, HalfFloatLinear) { | 927 TEST_F(TextureTest, HalfFloatLinear) { |
| 913 TestHelper::SetupFeatureInfoInitExpectations( | 928 TestHelper::SetupFeatureInfoInitExpectations( |
| 914 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); | 929 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); |
| 915 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 930 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 916 feature_info->Initialize(NULL); | 931 feature_info->Initialize(NULL); |
| 917 TextureManager manager( | 932 TextureManager manager( |
| 918 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 933 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 919 manager.CreateTexture(kClient1Id, kService1Id); | 934 manager.CreateTexture(kClient1Id, kService1Id); |
| 920 Texture* texture = manager.GetTexture(kClient1Id); | 935 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 921 ASSERT_TRUE(texture != NULL); | 936 ASSERT_TRUE(texture_ref != NULL); |
| 922 manager.SetTarget(texture, GL_TEXTURE_2D); | 937 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 938 Texture* texture = texture_ref->texture(); |
| 923 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 939 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 924 manager.SetLevelInfo(texture, | 940 manager.SetLevelInfo(texture_ref, |
| 925 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); | 941 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true); |
| 926 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 942 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 927 manager.Destroy(false); | 943 manager.Destroy(false); |
| 928 } | 944 } |
| 929 | 945 |
| 930 TEST_F(TextureTest, EGLImageExternal) { | 946 TEST_F(TextureTest, EGLImageExternal) { |
| 931 TestHelper::SetupFeatureInfoInitExpectations( | 947 TestHelper::SetupFeatureInfoInitExpectations( |
| 932 gl_.get(), "GL_OES_EGL_image_external"); | 948 gl_.get(), "GL_OES_EGL_image_external"); |
| 933 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 949 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 934 feature_info->Initialize(NULL); | 950 feature_info->Initialize(NULL); |
| 935 TextureManager manager( | 951 TextureManager manager( |
| 936 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 952 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 937 manager.CreateTexture(kClient1Id, kService1Id); | 953 manager.CreateTexture(kClient1Id, kService1Id); |
| 938 Texture* texture = manager.GetTexture(kClient1Id); | 954 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 939 ASSERT_TRUE(texture != NULL); | 955 ASSERT_TRUE(texture_ref != NULL); |
| 940 manager.SetTarget(texture, GL_TEXTURE_EXTERNAL_OES); | 956 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); |
| 957 Texture* texture = texture_ref->texture(); |
| 941 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); | 958 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
| 942 EXPECT_FALSE(manager.CanGenerateMipmaps(texture)); | 959 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
| 943 manager.Destroy(false); | 960 manager.Destroy(false); |
| 944 } | 961 } |
| 945 | 962 |
| 946 TEST_F(TextureTest, DepthTexture) { | 963 TEST_F(TextureTest, DepthTexture) { |
| 947 TestHelper::SetupFeatureInfoInitExpectations( | 964 TestHelper::SetupFeatureInfoInitExpectations( |
| 948 gl_.get(), "GL_ANGLE_depth_texture"); | 965 gl_.get(), "GL_ANGLE_depth_texture"); |
| 949 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 966 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 950 feature_info->Initialize(NULL); | 967 feature_info->Initialize(NULL); |
| 951 TextureManager manager( | 968 TextureManager manager( |
| 952 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 969 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 953 manager.CreateTexture(kClient1Id, kService1Id); | 970 manager.CreateTexture(kClient1Id, kService1Id); |
| 954 Texture* texture = manager.GetTexture(kClient1Id); | 971 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 955 ASSERT_TRUE(texture != NULL); | 972 ASSERT_TRUE(texture_ref != NULL); |
| 956 manager.SetTarget(texture, GL_TEXTURE_2D); | 973 manager.SetTarget(texture_ref, GL_TEXTURE_2D); |
| 957 manager.SetLevelInfo( | 974 manager.SetLevelInfo( |
| 958 texture, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0, | 975 texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1, 0, |
| 959 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false); | 976 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, false); |
| 960 EXPECT_FALSE(manager.CanGenerateMipmaps(texture)); | 977 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); |
| 961 manager.Destroy(false); | 978 manager.Destroy(false); |
| 962 } | 979 } |
| 963 | 980 |
| 964 TEST_F(TextureTest, SafeUnsafe) { | 981 TEST_F(TextureTest, SafeUnsafe) { |
| 965 static const GLuint kClient2Id = 2; | 982 static const GLuint kClient2Id = 2; |
| 966 static const GLuint kService2Id = 12; | 983 static const GLuint kService2Id = 12; |
| 967 static const GLuint kClient3Id = 3; | 984 static const GLuint kClient3Id = 3; |
| 968 static const GLuint kService3Id = 13; | 985 static const GLuint kService3Id = 13; |
| 969 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 986 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 970 EXPECT_EQ(0, texture_->num_uncleared_mips()); | 987 Texture* texture = texture_ref_->texture(); |
| 971 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 988 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 972 manager_->SetLevelInfo(texture_, | 989 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 990 manager_->SetLevelInfo(texture_ref_, |
| 973 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 991 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 974 EXPECT_FALSE(texture_->SafeToRenderFrom()); | 992 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 975 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 993 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 976 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 994 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 977 EXPECT_EQ(1, texture_->num_uncleared_mips()); | 995 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 978 manager_->SetLevelCleared(texture_, GL_TEXTURE_2D, 0, true); | 996 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 0, true); |
| 979 EXPECT_TRUE(texture_->SafeToRenderFrom()); | 997 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 980 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 998 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 981 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 999 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 982 EXPECT_EQ(0, texture_->num_uncleared_mips()); | 1000 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 983 manager_->SetLevelInfo(texture_, | 1001 manager_->SetLevelInfo(texture_ref_, |
| 984 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1002 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 985 EXPECT_FALSE(texture_->SafeToRenderFrom()); | 1003 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 986 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1004 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 987 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1005 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 988 EXPECT_EQ(1, texture_->num_uncleared_mips()); | 1006 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 989 manager_->SetLevelCleared(texture_, GL_TEXTURE_2D, 1, true); | 1007 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 1, true); |
| 990 EXPECT_TRUE(texture_->SafeToRenderFrom()); | 1008 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 991 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1009 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 992 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1010 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 993 EXPECT_EQ(0, texture_->num_uncleared_mips()); | 1011 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 994 manager_->SetLevelInfo(texture_, | 1012 manager_->SetLevelInfo(texture_ref_, |
| 995 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1013 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 996 manager_->SetLevelInfo(texture_, | 1014 manager_->SetLevelInfo(texture_ref_, |
| 997 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1015 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 998 EXPECT_FALSE(texture_->SafeToRenderFrom()); | 1016 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 999 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1017 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1000 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1018 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1001 EXPECT_EQ(2, texture_->num_uncleared_mips()); | 1019 EXPECT_EQ(2, texture->num_uncleared_mips()); |
| 1002 manager_->SetLevelCleared(texture_, GL_TEXTURE_2D, 0, true); | 1020 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 0, true); |
| 1003 EXPECT_FALSE(texture_->SafeToRenderFrom()); | 1021 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1004 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1022 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1005 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1023 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1006 EXPECT_EQ(1, texture_->num_uncleared_mips()); | 1024 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1007 manager_->SetLevelCleared(texture_, GL_TEXTURE_2D, 1, true); | 1025 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 1, true); |
| 1008 EXPECT_TRUE(texture_->SafeToRenderFrom()); | 1026 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1009 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1027 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1010 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1028 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1011 EXPECT_EQ(0, texture_->num_uncleared_mips()); | 1029 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1012 manager_->SetLevelInfo(texture_, | 1030 manager_->SetLevelInfo(texture_ref_, |
| 1013 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1031 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1014 EXPECT_FALSE(texture_->SafeToRenderFrom()); | 1032 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1015 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1033 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1016 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1034 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1017 EXPECT_EQ(1, texture_->num_uncleared_mips()); | 1035 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1018 manager_->MarkMipmapsGenerated(texture_); | 1036 manager_->MarkMipmapsGenerated(texture_ref_); |
| 1019 EXPECT_TRUE(texture_->SafeToRenderFrom()); | 1037 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1020 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1038 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1021 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1039 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1022 EXPECT_EQ(0, texture_->num_uncleared_mips()); | 1040 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1023 | 1041 |
| 1024 manager_->CreateTexture(kClient2Id, kService2Id); | 1042 manager_->CreateTexture(kClient2Id, kService2Id); |
| 1025 scoped_refptr<Texture> texture2( | 1043 scoped_refptr<TextureRef> texture_ref2( |
| 1026 manager_->GetTexture(kClient2Id)); | 1044 manager_->GetTexture(kClient2Id)); |
| 1027 ASSERT_TRUE(texture2.get() != NULL); | 1045 ASSERT_TRUE(texture_ref2.get() != NULL); |
| 1028 manager_->SetTarget(texture2, GL_TEXTURE_2D); | 1046 manager_->SetTarget(texture_ref2, GL_TEXTURE_2D); |
| 1029 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1047 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1030 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1048 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1049 Texture* texture2 = texture_ref2->texture(); |
| 1031 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1050 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
| 1032 manager_->SetLevelInfo(texture2, | 1051 manager_->SetLevelInfo(texture_ref2, |
| 1033 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1052 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 1034 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1053 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1035 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1054 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1036 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1055 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
| 1037 manager_->SetLevelInfo(texture2, | 1056 manager_->SetLevelInfo(texture_ref2, |
| 1038 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1057 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1039 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1058 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1040 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1059 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1041 EXPECT_EQ(1, texture2->num_uncleared_mips()); | 1060 EXPECT_EQ(1, texture2->num_uncleared_mips()); |
| 1042 | 1061 |
| 1043 manager_->CreateTexture(kClient3Id, kService3Id); | 1062 manager_->CreateTexture(kClient3Id, kService3Id); |
| 1044 scoped_refptr<Texture> texture3( | 1063 scoped_refptr<TextureRef> texture_ref3( |
| 1045 manager_->GetTexture(kClient3Id)); | 1064 manager_->GetTexture(kClient3Id)); |
| 1046 ASSERT_TRUE(texture3.get() != NULL); | 1065 ASSERT_TRUE(texture_ref3.get() != NULL); |
| 1047 manager_->SetTarget(texture3, GL_TEXTURE_2D); | 1066 manager_->SetTarget(texture_ref3, GL_TEXTURE_2D); |
| 1048 manager_->SetLevelInfo(texture3, | 1067 manager_->SetLevelInfo(texture_ref3, |
| 1049 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1068 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1050 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1069 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1051 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1070 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1071 Texture* texture3 = texture_ref3->texture(); |
| 1052 EXPECT_EQ(1, texture3->num_uncleared_mips()); | 1072 EXPECT_EQ(1, texture3->num_uncleared_mips()); |
| 1053 manager_->SetLevelCleared(texture2, GL_TEXTURE_2D, 0, true); | 1073 manager_->SetLevelCleared(texture_ref2, GL_TEXTURE_2D, 0, true); |
| 1054 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1074 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1055 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1075 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1056 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1076 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
| 1057 manager_->SetLevelCleared(texture3, GL_TEXTURE_2D, 0, true); | 1077 manager_->SetLevelCleared(texture_ref3, GL_TEXTURE_2D, 0, true); |
| 1058 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1078 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1059 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1079 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1060 EXPECT_EQ(0, texture3->num_uncleared_mips()); | 1080 EXPECT_EQ(0, texture3->num_uncleared_mips()); |
| 1061 | 1081 |
| 1062 manager_->SetLevelInfo(texture2, | 1082 manager_->SetLevelInfo(texture_ref2, |
| 1063 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1083 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1064 manager_->SetLevelInfo(texture3, | 1084 manager_->SetLevelInfo(texture_ref3, |
| 1065 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1085 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1066 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1086 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1067 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1087 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1068 EXPECT_EQ(1, texture2->num_uncleared_mips()); | 1088 EXPECT_EQ(1, texture2->num_uncleared_mips()); |
| 1069 EXPECT_EQ(1, texture3->num_uncleared_mips()); | 1089 EXPECT_EQ(1, texture3->num_uncleared_mips()); |
| 1070 manager_->RemoveTexture(kClient3Id); | 1090 manager_->RemoveTexture(kClient3Id); |
| 1071 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1091 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1072 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1092 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1073 manager_->RemoveTexture(kClient2Id); | 1093 manager_->RemoveTexture(kClient2Id); |
| 1074 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1094 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1075 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1095 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1076 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1096 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
| 1077 .Times(1) | 1097 .Times(1) |
| 1078 .RetiresOnSaturation(); | 1098 .RetiresOnSaturation(); |
| 1079 texture2 = NULL; | 1099 texture_ref2 = NULL; |
| 1080 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1100 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1081 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1101 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1082 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) | 1102 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) |
| 1083 .Times(1) | 1103 .Times(1) |
| 1084 .RetiresOnSaturation(); | 1104 .RetiresOnSaturation(); |
| 1085 texture3 = NULL; | 1105 texture_ref3 = NULL; |
| 1086 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1106 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1087 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1107 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1088 } | 1108 } |
| 1089 | 1109 |
| 1090 TEST_F(TextureTest, ClearTexture) { | 1110 TEST_F(TextureTest, ClearTexture) { |
| 1091 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) | 1111 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) |
| 1092 .WillRepeatedly(Return(true)); | 1112 .WillRepeatedly(Return(true)); |
| 1093 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 1113 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 1094 manager_->SetLevelInfo(texture_, | 1114 manager_->SetLevelInfo(texture_ref_, |
| 1095 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1115 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1096 manager_->SetLevelInfo(texture_, | 1116 manager_->SetLevelInfo(texture_ref_, |
| 1097 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1117 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1098 EXPECT_FALSE(texture_->SafeToRenderFrom()); | 1118 Texture* texture = texture_ref_->texture(); |
| 1119 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1099 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1120 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1100 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1121 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1101 EXPECT_EQ(2, texture_->num_uncleared_mips()); | 1122 EXPECT_EQ(2, texture->num_uncleared_mips()); |
| 1102 manager_->ClearRenderableLevels(decoder_.get(), texture_); | 1123 manager_->ClearRenderableLevels(decoder_.get(), texture_ref_); |
| 1103 EXPECT_TRUE(texture_->SafeToRenderFrom()); | 1124 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1104 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1125 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1105 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1126 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1106 EXPECT_EQ(0, texture_->num_uncleared_mips()); | 1127 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1107 manager_->SetLevelInfo(texture_, | 1128 manager_->SetLevelInfo(texture_ref_, |
| 1108 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1129 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1109 manager_->SetLevelInfo(texture_, | 1130 manager_->SetLevelInfo(texture_ref_, |
| 1110 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1131 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1111 EXPECT_FALSE(texture_->SafeToRenderFrom()); | 1132 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1112 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1133 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1113 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1134 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1114 EXPECT_EQ(2, texture_->num_uncleared_mips()); | 1135 EXPECT_EQ(2, texture->num_uncleared_mips()); |
| 1115 manager_->ClearTextureLevel(decoder_.get(), texture_, GL_TEXTURE_2D, 0); | 1136 manager_->ClearTextureLevel(decoder_.get(), texture_ref_, GL_TEXTURE_2D, 0); |
| 1116 EXPECT_FALSE(texture_->SafeToRenderFrom()); | 1137 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1117 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1138 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1118 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1139 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1119 EXPECT_EQ(1, texture_->num_uncleared_mips()); | 1140 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1120 manager_->ClearTextureLevel(decoder_.get(), texture_, GL_TEXTURE_2D, 1); | 1141 manager_->ClearTextureLevel(decoder_.get(), texture_ref_, GL_TEXTURE_2D, 1); |
| 1121 EXPECT_TRUE(texture_->SafeToRenderFrom()); | 1142 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1122 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1143 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1123 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1144 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1124 EXPECT_EQ(0, texture_->num_uncleared_mips()); | 1145 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1125 } | 1146 } |
| 1126 | 1147 |
| 1127 TEST_F(TextureTest, UseDeletedTexture) { | 1148 TEST_F(TextureTest, UseDeletedTexture) { |
| 1128 static const GLuint kClient2Id = 2; | 1149 static const GLuint kClient2Id = 2; |
| 1129 static const GLuint kService2Id = 12; | 1150 static const GLuint kService2Id = 12; |
| 1130 // Make the default texture renderable | 1151 // Make the default texture renderable |
| 1131 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 1152 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 1132 manager_->SetLevelInfo(texture_, | 1153 manager_->SetLevelInfo(texture_ref_, |
| 1133 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1154 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1134 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1155 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 1135 // Make a new texture | 1156 // Make a new texture |
| 1136 manager_->CreateTexture(kClient2Id, kService2Id); | 1157 manager_->CreateTexture(kClient2Id, kService2Id); |
| 1137 scoped_refptr<Texture> texture( | 1158 scoped_refptr<TextureRef> texture_ref( |
| 1138 manager_->GetTexture(kClient2Id)); | 1159 manager_->GetTexture(kClient2Id)); |
| 1139 manager_->SetTarget(texture, GL_TEXTURE_2D); | 1160 manager_->SetTarget(texture_ref, GL_TEXTURE_2D); |
| 1140 EXPECT_FALSE(manager_->CanRender(texture)); | 1161 EXPECT_FALSE(manager_->CanRender(texture_ref)); |
| 1141 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1162 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 1142 // Remove it. | 1163 // Remove it. |
| 1143 manager_->RemoveTexture(kClient2Id); | 1164 manager_->RemoveTexture(kClient2Id); |
| 1144 EXPECT_FALSE(manager_->CanRender(texture)); | 1165 EXPECT_FALSE(manager_->CanRender(texture_ref)); |
| 1145 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1166 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 1146 // Check that we can still manipulate it and it effects the manager. | 1167 // Check that we can still manipulate it and it effects the manager. |
| 1147 manager_->SetLevelInfo(texture, | 1168 manager_->SetLevelInfo(texture_ref, |
| 1148 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1169 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1149 EXPECT_TRUE(manager_->CanRender(texture)); | 1170 EXPECT_TRUE(manager_->CanRender(texture_ref)); |
| 1150 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1171 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 1151 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1172 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
| 1152 .Times(1) | 1173 .Times(1) |
| 1153 .RetiresOnSaturation(); | 1174 .RetiresOnSaturation(); |
| 1154 texture = NULL; | 1175 texture_ref = NULL; |
| 1155 } | 1176 } |
| 1156 | 1177 |
| 1157 TEST_F(TextureTest, GetLevelImage) { | 1178 TEST_F(TextureTest, GetLevelImage) { |
| 1158 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 1179 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 1159 manager_->SetLevelInfo(texture_, | 1180 manager_->SetLevelInfo(texture_ref_, |
| 1160 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1181 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 1161 EXPECT_TRUE(texture_->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1182 Texture* texture = texture_ref_->texture(); |
| 1183 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1162 // Set image. | 1184 // Set image. |
| 1163 manager_->SetLevelImage(texture_, | 1185 manager_->SetLevelImage(texture_ref_, |
| 1164 GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); | 1186 GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); |
| 1165 EXPECT_FALSE(texture_->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1187 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1166 // Remove it. | 1188 // Remove it. |
| 1167 manager_->SetLevelImage(texture_, GL_TEXTURE_2D, 1, NULL); | 1189 manager_->SetLevelImage(texture_ref_, GL_TEXTURE_2D, 1, NULL); |
| 1168 EXPECT_TRUE(texture_->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1190 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1169 manager_->SetLevelImage(texture_, | 1191 manager_->SetLevelImage(texture_ref_, |
| 1170 GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); | 1192 GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); |
| 1171 // Image should be reset when SetLevelInfo is called. | 1193 // Image should be reset when SetLevelInfo is called. |
| 1172 manager_->SetLevelInfo(texture_, | 1194 manager_->SetLevelInfo(texture_ref_, |
| 1173 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1195 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 1174 EXPECT_TRUE(texture_->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1196 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1175 } | 1197 } |
| 1176 | 1198 |
| 1177 namespace { | 1199 namespace { |
| 1178 | 1200 |
| 1179 bool InSet(std::set<std::string>* string_set, const std::string& str) { | 1201 bool InSet(std::set<std::string>* string_set, const std::string& str) { |
| 1180 std::pair<std::set<std::string>::iterator, bool> result = | 1202 std::pair<std::set<std::string>::iterator, bool> result = |
| 1181 string_set->insert(str); | 1203 string_set->insert(str); |
| 1182 return !result.second; | 1204 return !result.second; |
| 1183 } | 1205 } |
| 1184 | 1206 |
| 1185 } // anonymous namespace | 1207 } // anonymous namespace |
| 1186 | 1208 |
| 1187 TEST_F(TextureTest, AddToSignature) { | 1209 TEST_F(TextureTest, AddToSignature) { |
| 1188 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 1210 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 1189 manager_->SetLevelInfo(texture_, | 1211 manager_->SetLevelInfo(texture_ref_, |
| 1190 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1212 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 1191 std::string signature1; | 1213 std::string signature1; |
| 1192 std::string signature2; | 1214 std::string signature2; |
| 1193 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature1); | 1215 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature1); |
| 1194 | 1216 |
| 1195 std::set<std::string> string_set; | 1217 std::set<std::string> string_set; |
| 1196 EXPECT_FALSE(InSet(&string_set, signature1)); | 1218 EXPECT_FALSE(InSet(&string_set, signature1)); |
| 1197 | 1219 |
| 1198 // check changing 1 thing makes a different signature. | 1220 // check changing 1 thing makes a different signature. |
| 1199 manager_->SetLevelInfo(texture_, | 1221 manager_->SetLevelInfo(texture_ref_, |
| 1200 GL_TEXTURE_2D, 1, GL_RGBA, 4, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1222 GL_TEXTURE_2D, 1, GL_RGBA, 4, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 1201 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1223 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1202 EXPECT_FALSE(InSet(&string_set, signature2)); | 1224 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1203 | 1225 |
| 1204 // check putting it back makes the same signature. | 1226 // check putting it back makes the same signature. |
| 1205 manager_->SetLevelInfo(texture_, | 1227 manager_->SetLevelInfo(texture_ref_, |
| 1206 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1228 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); |
| 1207 signature2.clear(); | 1229 signature2.clear(); |
| 1208 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1230 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1209 EXPECT_EQ(signature1, signature2); | 1231 EXPECT_EQ(signature1, signature2); |
| 1210 | 1232 |
| 1211 // Check setting cleared status does not change signature. | 1233 // Check setting cleared status does not change signature. |
| 1212 manager_->SetLevelInfo(texture_, | 1234 manager_->SetLevelInfo(texture_ref_, |
| 1213 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1235 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1214 signature2.clear(); | 1236 signature2.clear(); |
| 1215 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1237 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1216 EXPECT_EQ(signature1, signature2); | 1238 EXPECT_EQ(signature1, signature2); |
| 1217 | 1239 |
| 1218 // Check changing other settings changes signature. | 1240 // Check changing other settings changes signature. |
| 1219 manager_->SetLevelInfo(texture_, | 1241 manager_->SetLevelInfo(texture_ref_, |
| 1220 GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1242 GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1221 signature2.clear(); | 1243 signature2.clear(); |
| 1222 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1244 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1223 EXPECT_FALSE(InSet(&string_set, signature2)); | 1245 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1224 | 1246 |
| 1225 manager_->SetLevelInfo(texture_, | 1247 manager_->SetLevelInfo(texture_ref_, |
| 1226 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1248 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1227 signature2.clear(); | 1249 signature2.clear(); |
| 1228 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1250 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1229 EXPECT_FALSE(InSet(&string_set, signature2)); | 1251 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1230 | 1252 |
| 1231 manager_->SetLevelInfo(texture_, | 1253 manager_->SetLevelInfo(texture_ref_, |
| 1232 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1254 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, false); |
| 1233 signature2.clear(); | 1255 signature2.clear(); |
| 1234 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1256 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1235 EXPECT_FALSE(InSet(&string_set, signature2)); | 1257 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1236 | 1258 |
| 1237 manager_->SetLevelInfo(texture_, | 1259 manager_->SetLevelInfo(texture_ref_, |
| 1238 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, false); | 1260 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, false); |
| 1239 signature2.clear(); | 1261 signature2.clear(); |
| 1240 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1262 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1241 EXPECT_FALSE(InSet(&string_set, signature2)); | 1263 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1242 | 1264 |
| 1243 manager_->SetLevelInfo(texture_, | 1265 manager_->SetLevelInfo(texture_ref_, |
| 1244 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_FLOAT, | 1266 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_FLOAT, |
| 1245 false); | 1267 false); |
| 1246 signature2.clear(); | 1268 signature2.clear(); |
| 1247 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1269 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1248 EXPECT_FALSE(InSet(&string_set, signature2)); | 1270 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1249 | 1271 |
| 1250 // put it back | 1272 // put it back |
| 1251 manager_->SetLevelInfo(texture_, | 1273 manager_->SetLevelInfo(texture_ref_, |
| 1252 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1274 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 1253 false); | 1275 false); |
| 1254 signature2.clear(); | 1276 signature2.clear(); |
| 1255 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1277 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1256 EXPECT_EQ(signature1, signature2); | 1278 EXPECT_EQ(signature1, signature2); |
| 1257 | 1279 |
| 1258 // check changing parameters changes signature. | 1280 // check changing parameters changes signature. |
| 1259 SetParameter(texture_, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); | 1281 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 1260 signature2.clear(); | 1282 signature2.clear(); |
| 1261 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1283 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1262 EXPECT_FALSE(InSet(&string_set, signature2)); | 1284 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1263 | 1285 |
| 1264 SetParameter( | 1286 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, |
| 1265 texture_, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR, GL_NO_ERROR); | 1287 GL_NEAREST_MIPMAP_LINEAR, GL_NO_ERROR); |
| 1266 SetParameter(texture_, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1288 SetParameter(texture_ref_, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 1267 signature2.clear(); | 1289 signature2.clear(); |
| 1268 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1290 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1269 EXPECT_FALSE(InSet(&string_set, signature2)); | 1291 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1270 | 1292 |
| 1271 SetParameter(texture_, GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); | 1293 SetParameter(texture_ref_, GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); |
| 1272 SetParameter(texture_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 1294 SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 1273 signature2.clear(); | 1295 signature2.clear(); |
| 1274 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1296 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1275 EXPECT_FALSE(InSet(&string_set, signature2)); | 1297 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1276 | 1298 |
| 1277 SetParameter(texture_, GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR); | 1299 SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR); |
| 1278 SetParameter(texture_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 1300 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 1279 signature2.clear(); | 1301 signature2.clear(); |
| 1280 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1302 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1281 EXPECT_FALSE(InSet(&string_set, signature2)); | 1303 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1282 | 1304 |
| 1283 // Check putting it back genenerates the same signature | 1305 // Check putting it back genenerates the same signature |
| 1284 SetParameter(texture_, GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR); | 1306 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR); |
| 1285 signature2.clear(); | 1307 signature2.clear(); |
| 1286 manager_->AddToSignature(texture_, GL_TEXTURE_2D, 1, &signature2); | 1308 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); |
| 1287 EXPECT_EQ(signature1, signature2); | 1309 EXPECT_EQ(signature1, signature2); |
| 1288 | 1310 |
| 1289 // Check the set was acutally getting different signatures. | 1311 // Check the set was acutally getting different signatures. |
| 1290 EXPECT_EQ(11u, string_set.size()); | 1312 EXPECT_EQ(11u, string_set.size()); |
| 1291 } | 1313 } |
| 1292 | 1314 |
| 1293 class SaveRestoreTextureTest : public TextureTest { | 1315 class SaveRestoreTextureTest : public TextureTest { |
| 1294 public: | 1316 public: |
| 1295 virtual void SetUp() { | 1317 virtual void SetUp() { |
| 1296 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external"); | 1318 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external"); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1357 GLenum target; | 1379 GLenum target; |
| 1358 GLenum format; | 1380 GLenum format; |
| 1359 GLsizei width; | 1381 GLsizei width; |
| 1360 GLsizei height; | 1382 GLsizei height; |
| 1361 GLsizei depth; | 1383 GLsizei depth; |
| 1362 GLint border; | 1384 GLint border; |
| 1363 GLenum type; | 1385 GLenum type; |
| 1364 bool cleared; | 1386 bool cleared; |
| 1365 }; | 1387 }; |
| 1366 | 1388 |
| 1367 void SetLevelInfo(Texture* texture, GLint level, const LevelInfo& info) { | 1389 void SetLevelInfo(TextureRef* texture_ref, |
| 1368 manager_->SetLevelInfo(texture, | 1390 GLint level, |
| 1391 const LevelInfo& info) { |
| 1392 manager_->SetLevelInfo(texture_ref, |
| 1369 info.target, | 1393 info.target, |
| 1370 level, | 1394 level, |
| 1371 info.format, | 1395 info.format, |
| 1372 info.width, | 1396 info.width, |
| 1373 info.height, | 1397 info.height, |
| 1374 info.depth, | 1398 info.depth, |
| 1375 info.border, | 1399 info.border, |
| 1376 info.format, | 1400 info.format, |
| 1377 info.type, | 1401 info.type, |
| 1378 info.cleared); | 1402 info.cleared); |
| 1379 } | 1403 } |
| 1380 | 1404 |
| 1381 static LevelInfo GetLevelInfo(const Texture* texture, | 1405 static LevelInfo GetLevelInfo(const TextureRef* texture_ref, |
| 1382 GLint target, | 1406 GLint target, |
| 1383 GLint level) { | 1407 GLint level) { |
| 1408 const Texture* texture = texture_ref->texture(); |
| 1384 LevelInfo info; | 1409 LevelInfo info; |
| 1385 info.target = target; | 1410 info.target = target; |
| 1386 EXPECT_TRUE(texture->GetLevelSize(target, level, &info.width, | 1411 EXPECT_TRUE(texture->GetLevelSize(target, level, &info.width, |
| 1387 &info.height)); | 1412 &info.height)); |
| 1388 EXPECT_TRUE(texture->GetLevelType(target, level, &info.type, | 1413 EXPECT_TRUE(texture->GetLevelType(target, level, &info.type, |
| 1389 &info.format)); | 1414 &info.format)); |
| 1390 info.cleared = texture->IsLevelCleared(target, level); | 1415 info.cleared = texture->IsLevelCleared(target, level); |
| 1391 return info; | 1416 return info; |
| 1392 } | 1417 } |
| 1393 | 1418 |
| 1394 TextureDefinition* Save(Texture* texture) { | 1419 TextureDefinition* Save(TextureRef* texture_ref) { |
| 1395 EXPECT_CALL(*gl_, GenTextures(_, _)) | 1420 EXPECT_CALL(*gl_, GenTextures(_, _)) |
| 1396 .WillOnce(SetArgumentPointee<1>(kEmptyTextureServiceId)); | 1421 .WillOnce(SetArgumentPointee<1>(kEmptyTextureServiceId)); |
| 1397 TextureDefinition* definition = manager_->Save(texture); | 1422 TextureDefinition* definition = manager_->Save(texture_ref); |
| 1398 EXPECT_TRUE(definition != NULL); | 1423 EXPECT_TRUE(definition != NULL); |
| 1399 return definition; | 1424 return definition; |
| 1400 } | 1425 } |
| 1401 | 1426 |
| 1402 void Restore(Texture* texture, TextureDefinition* definition) { | 1427 void Restore(TextureRef* texture_ref, TextureDefinition* definition) { |
| 1403 EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(texture->service_id()))) | 1428 EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(texture_ref->service_id()))) |
| 1404 .Times(1).RetiresOnSaturation(); | 1429 .Times(1).RetiresOnSaturation(); |
| 1405 EXPECT_CALL(*gl_, | 1430 EXPECT_CALL(*gl_, |
| 1406 BindTexture(definition->target(), definition->service_id())) | 1431 BindTexture(definition->target(), definition->service_id())) |
| 1407 .Times(1).RetiresOnSaturation(); | 1432 .Times(1).RetiresOnSaturation(); |
| 1408 EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(AtLeast(1)); | 1433 EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(AtLeast(1)); |
| 1409 | 1434 |
| 1410 EXPECT_TRUE( | 1435 EXPECT_TRUE(manager_->Restore("TextureTest", decoder_.get(), |
| 1411 manager_->Restore("TextureTest", decoder_.get(), texture, definition)); | 1436 texture_ref, definition)); |
| 1412 } | 1437 } |
| 1413 | 1438 |
| 1414 scoped_refptr<Texture> texture2_; | 1439 scoped_refptr<TextureRef> texture2_; |
| 1415 | 1440 |
| 1416 private: | 1441 private: |
| 1417 static const GLuint kEmptyTextureServiceId; | 1442 static const GLuint kEmptyTextureServiceId; |
| 1418 static const GLuint kClient2Id; | 1443 static const GLuint kClient2Id; |
| 1419 static const GLuint kService2Id; | 1444 static const GLuint kService2Id; |
| 1420 }; | 1445 }; |
| 1421 | 1446 |
| 1422 const GLuint SaveRestoreTextureTest::kClient2Id = 2; | 1447 const GLuint SaveRestoreTextureTest::kClient2Id = 2; |
| 1423 const GLuint SaveRestoreTextureTest::kService2Id = 12; | 1448 const GLuint SaveRestoreTextureTest::kService2Id = 12; |
| 1424 const GLuint SaveRestoreTextureTest::kEmptyTextureServiceId = 13; | 1449 const GLuint SaveRestoreTextureTest::kEmptyTextureServiceId = 13; |
| 1425 | 1450 |
| 1426 TEST_F(SaveRestoreTextureTest, SaveRestore2D) { | 1451 TEST_F(SaveRestoreTextureTest, SaveRestore2D) { |
| 1427 manager_->SetTarget(texture_, GL_TEXTURE_2D); | 1452 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); |
| 1428 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture_->target()); | 1453 Texture* texture = texture_ref_->texture(); |
| 1454 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 1429 LevelInfo level0( | 1455 LevelInfo level0( |
| 1430 GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true); | 1456 GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true); |
| 1431 SetLevelInfo(texture_, 0, level0); | 1457 SetLevelInfo(texture_ref_, 0, level0); |
| 1432 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_)); | 1458 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); |
| 1433 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 1459 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1434 LevelInfo level1 = GetLevelInfo(texture_.get(), GL_TEXTURE_2D, 1); | 1460 LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1); |
| 1435 LevelInfo level2 = GetLevelInfo(texture_.get(), GL_TEXTURE_2D, 2); | 1461 LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2); |
| 1436 scoped_ptr<TextureDefinition> definition(Save(texture_)); | 1462 scoped_ptr<TextureDefinition> definition(Save(texture_ref_)); |
| 1437 const TextureDefinition::LevelInfos& infos = definition->level_infos(); | 1463 const TextureDefinition::LevelInfos& infos = definition->level_infos(); |
| 1438 EXPECT_EQ(1U, infos.size()); | 1464 EXPECT_EQ(1U, infos.size()); |
| 1439 EXPECT_EQ(3U, infos[0].size()); | 1465 EXPECT_EQ(3U, infos[0].size()); |
| 1440 | 1466 |
| 1441 // Make this texture bigger with more levels, and make sure they get | 1467 // Make this texture bigger with more levels, and make sure they get |
| 1442 // clobbered correctly during Restore(). | 1468 // clobbered correctly during Restore(). |
| 1443 manager_->SetTarget(texture2_, GL_TEXTURE_2D); | 1469 manager_->SetTarget(texture2_, GL_TEXTURE_2D); |
| 1444 SetLevelInfo( | 1470 SetLevelInfo( |
| 1445 texture2_, | 1471 texture2_, |
| 1446 0, | 1472 0, |
| 1447 LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false)); | 1473 LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false)); |
| 1448 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_)); | 1474 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_)); |
| 1449 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture2_)); | 1475 texture = texture2_->texture(); |
| 1450 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture2_->estimated_size()); | 1476 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1477 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size()); |
| 1451 Restore(texture2_, definition.release()); | 1478 Restore(texture2_, definition.release()); |
| 1452 EXPECT_EQ(level0, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 0)); | 1479 EXPECT_EQ(level0, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 0)); |
| 1453 EXPECT_EQ(level1, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 1)); | 1480 EXPECT_EQ(level1, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 1)); |
| 1454 EXPECT_EQ(level2, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 2)); | 1481 EXPECT_EQ(level2, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 2)); |
| 1455 EXPECT_EQ(64U + 16U + 4U, texture2_->estimated_size()); | 1482 EXPECT_EQ(64U + 16U + 4U, texture->estimated_size()); |
| 1456 GLint w, h; | 1483 GLint w, h; |
| 1457 EXPECT_TRUE(texture2_->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h)); | 1484 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h)); |
| 1458 EXPECT_EQ(0, w); | 1485 EXPECT_EQ(0, w); |
| 1459 EXPECT_EQ(0, h); | 1486 EXPECT_EQ(0, h); |
| 1460 } | 1487 } |
| 1461 | 1488 |
| 1462 TEST_F(SaveRestoreTextureTest, SaveRestoreClearRectangle) { | 1489 TEST_F(SaveRestoreTextureTest, SaveRestoreClearRectangle) { |
| 1463 manager_->SetTarget(texture_, GL_TEXTURE_RECTANGLE_ARB); | 1490 manager_->SetTarget(texture_ref_, GL_TEXTURE_RECTANGLE_ARB); |
| 1464 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture_->target()); | 1491 Texture* texture = texture_ref_->texture(); |
| 1492 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target()); |
| 1465 LevelInfo level0( | 1493 LevelInfo level0( |
| 1466 GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false); | 1494 GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false); |
| 1467 SetLevelInfo(texture_, 0, level0); | 1495 SetLevelInfo(texture_ref_, 0, level0); |
| 1468 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 1496 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1469 scoped_ptr<TextureDefinition> definition(Save(texture_)); | 1497 scoped_ptr<TextureDefinition> definition(Save(texture_ref_)); |
| 1470 const TextureDefinition::LevelInfos& infos = definition->level_infos(); | 1498 const TextureDefinition::LevelInfos& infos = definition->level_infos(); |
| 1471 EXPECT_EQ(1U, infos.size()); | 1499 EXPECT_EQ(1U, infos.size()); |
| 1472 EXPECT_EQ(1U, infos[0].size()); | 1500 EXPECT_EQ(1U, infos[0].size()); |
| 1473 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), infos[0][0].target); | 1501 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), infos[0][0].target); |
| 1474 manager_->SetTarget(texture2_, GL_TEXTURE_RECTANGLE_ARB); | 1502 manager_->SetTarget(texture2_, GL_TEXTURE_RECTANGLE_ARB); |
| 1475 Restore(texture2_, definition.release()); | 1503 Restore(texture2_, definition.release()); |
| 1476 | 1504 |
| 1477 // See if we can clear the previously uncleared level now. | 1505 // See if we can clear the previously uncleared level now. |
| 1478 EXPECT_EQ(level0, GetLevelInfo(texture2_.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); | 1506 EXPECT_EQ(level0, GetLevelInfo(texture2_.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); |
| 1479 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) | 1507 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) |
| 1480 .WillRepeatedly(Return(true)); | 1508 .WillRepeatedly(Return(true)); |
| 1481 EXPECT_TRUE(manager_->ClearTextureLevel( | 1509 EXPECT_TRUE(manager_->ClearTextureLevel( |
| 1482 decoder_.get(), texture2_, GL_TEXTURE_RECTANGLE_ARB, 0)); | 1510 decoder_.get(), texture2_, GL_TEXTURE_RECTANGLE_ARB, 0)); |
| 1483 } | 1511 } |
| 1484 | 1512 |
| 1485 TEST_F(SaveRestoreTextureTest, SaveRestoreStreamTexture) { | 1513 TEST_F(SaveRestoreTextureTest, SaveRestoreStreamTexture) { |
| 1486 manager_->SetTarget(texture_, GL_TEXTURE_EXTERNAL_OES); | 1514 manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES); |
| 1487 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture_->target()); | 1515 Texture* texture = texture_ref_->texture(); |
| 1488 texture_->SetStreamTexture(true); | 1516 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
| 1489 GLuint service_id = texture_->service_id(); | 1517 texture->SetStreamTexture(true); |
| 1490 scoped_ptr<TextureDefinition> definition(Save(texture_)); | 1518 GLuint service_id = texture->service_id(); |
| 1491 EXPECT_FALSE(texture_->IsStreamTexture()); | 1519 scoped_ptr<TextureDefinition> definition(Save(texture_ref_)); |
| 1520 EXPECT_FALSE(texture->IsStreamTexture()); |
| 1492 manager_->SetTarget(texture2_, GL_TEXTURE_EXTERNAL_OES); | 1521 manager_->SetTarget(texture2_, GL_TEXTURE_EXTERNAL_OES); |
| 1493 Restore(texture2_, definition.release()); | 1522 Restore(texture2_, definition.release()); |
| 1494 EXPECT_TRUE(texture2_->IsStreamTexture()); | 1523 EXPECT_TRUE(texture2_->texture()->IsStreamTexture()); |
| 1495 EXPECT_TRUE(texture2_->IsImmutable()); | 1524 EXPECT_TRUE(texture2_->texture()->IsImmutable()); |
| 1496 EXPECT_EQ(service_id, texture2_->service_id()); | 1525 EXPECT_EQ(service_id, texture2_->service_id()); |
| 1497 } | 1526 } |
| 1498 | 1527 |
| 1499 TEST_F(SaveRestoreTextureTest, SaveRestoreCube) { | 1528 TEST_F(SaveRestoreTextureTest, SaveRestoreCube) { |
| 1500 manager_->SetTarget(texture_, GL_TEXTURE_CUBE_MAP); | 1529 manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP); |
| 1501 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture_->target()); | 1530 Texture* texture = texture_ref_->texture(); |
| 1531 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
| 1502 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X, | 1532 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| 1503 GL_RGBA, | 1533 GL_RGBA, |
| 1504 1, | 1534 1, |
| 1505 1, | 1535 1, |
| 1506 1, | 1536 1, |
| 1507 0, | 1537 0, |
| 1508 GL_UNSIGNED_BYTE, | 1538 GL_UNSIGNED_BYTE, |
| 1509 true); | 1539 true); |
| 1510 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 1540 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 1511 GL_RGBA, | 1541 GL_RGBA, |
| 1512 3, | 1542 3, |
| 1513 3, | 1543 3, |
| 1514 1, | 1544 1, |
| 1515 0, | 1545 0, |
| 1516 GL_UNSIGNED_BYTE, | 1546 GL_UNSIGNED_BYTE, |
| 1517 true); | 1547 true); |
| 1518 SetLevelInfo(texture_, 0, face0); | 1548 SetLevelInfo(texture_ref_, 0, face0); |
| 1519 SetLevelInfo(texture_, 0, face5); | 1549 SetLevelInfo(texture_ref_, 0, face5); |
| 1520 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture_)); | 1550 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1521 scoped_ptr<TextureDefinition> definition(Save(texture_)); | 1551 scoped_ptr<TextureDefinition> definition(Save(texture_ref_)); |
| 1522 const TextureDefinition::LevelInfos& infos = definition->level_infos(); | 1552 const TextureDefinition::LevelInfos& infos = definition->level_infos(); |
| 1523 EXPECT_EQ(6U, infos.size()); | 1553 EXPECT_EQ(6U, infos.size()); |
| 1524 EXPECT_EQ(1U, infos[0].size()); | 1554 EXPECT_EQ(1U, infos[0].size()); |
| 1525 manager_->SetTarget(texture2_, GL_TEXTURE_CUBE_MAP); | 1555 manager_->SetTarget(texture2_, GL_TEXTURE_CUBE_MAP); |
| 1526 Restore(texture2_, definition.release()); | 1556 Restore(texture2_, definition.release()); |
| 1527 EXPECT_EQ(face0, | 1557 EXPECT_EQ(face0, |
| 1528 GetLevelInfo(texture2_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0)); | 1558 GetLevelInfo(texture2_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0)); |
| 1529 EXPECT_EQ(face5, | 1559 EXPECT_EQ(face5, |
| 1530 GetLevelInfo(texture2_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0)); | 1560 GetLevelInfo(texture2_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0)); |
| 1531 } | 1561 } |
| 1532 | 1562 |
| 1533 } // namespace gles2 | 1563 } // namespace gles2 |
| 1534 } // namespace gpu | 1564 } // namespace gpu |
| 1535 | 1565 |
| 1536 | 1566 |
| OLD | NEW |