| 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/framebuffer_manager.h" | 10 #include "gpu/command_buffer/service/framebuffer_manager.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 const GLuint kClient1Id = 1; | 103 const GLuint kClient1Id = 1; |
| 104 const GLuint kService1Id = 11; | 104 const GLuint kService1Id = 11; |
| 105 const GLuint kClient2Id = 2; | 105 const GLuint kClient2Id = 2; |
| 106 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 106 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 107 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 107 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 108 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 108 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 109 // Check we can create texture. | 109 // Check we can create texture. |
| 110 manager_->CreateTexture(kClient1Id, kService1Id); | 110 manager_->CreateTexture(kClient1Id, kService1Id); |
| 111 // Check texture got created. | 111 // Check texture got created. |
| 112 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id); | 112 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id); |
| 113 ASSERT_TRUE(texture != NULL); | 113 ASSERT_TRUE(texture.get() != NULL); |
| 114 EXPECT_EQ(kService1Id, texture->service_id()); | 114 EXPECT_EQ(kService1Id, texture->service_id()); |
| 115 EXPECT_EQ(kClient1Id, texture->client_id()); | 115 EXPECT_EQ(kClient1Id, texture->client_id()); |
| 116 EXPECT_EQ(texture->texture(), manager_->GetTextureForServiceId( | 116 EXPECT_EQ(texture->texture(), manager_->GetTextureForServiceId( |
| 117 texture->service_id())); | 117 texture->service_id())); |
| 118 // Check we get nothing for a non-existent texture. | 118 // Check we get nothing for a non-existent texture. |
| 119 EXPECT_TRUE(manager_->GetTexture(kClient2Id) == NULL); | 119 EXPECT_TRUE(manager_->GetTexture(kClient2Id) == NULL); |
| 120 // Check trying to a remove non-existent textures does not crash. | 120 // Check trying to a remove non-existent textures does not crash. |
| 121 manager_->RemoveTexture(kClient2Id); | 121 manager_->RemoveTexture(kClient2Id); |
| 122 // Check that it gets deleted when the last reference is released. | 122 // Check that it gets deleted when the last reference is released. |
| 123 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) | 123 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 class TextureMemoryTrackerTest : public TextureTestBase { | 437 class TextureMemoryTrackerTest : public TextureTestBase { |
| 438 protected: | 438 protected: |
| 439 virtual void SetUp() { | 439 virtual void SetUp() { |
| 440 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>(); | 440 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>(); |
| 441 SetUpBase(mock_memory_tracker_.get(), std::string()); | 441 SetUpBase(mock_memory_tracker_.get(), std::string()); |
| 442 } | 442 } |
| 443 | 443 |
| 444 scoped_refptr<MockMemoryTracker> mock_memory_tracker_; | 444 scoped_refptr<MockMemoryTracker> mock_memory_tracker_; |
| 445 }; | 445 }; |
| 446 | 446 |
| 447 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \ | 447 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \ |
| 448 EXPECT_CALL(*mock_memory_tracker_, \ | 448 EXPECT_CALL(*mock_memory_tracker_.get(), \ |
| 449 TrackMemoryAllocatedChange(old_size, new_size, pool)) \ | 449 TrackMemoryAllocatedChange(old_size, new_size, pool)) \ |
| 450 .Times(1) \ | 450 .Times(1).RetiresOnSaturation() |
| 451 .RetiresOnSaturation() \ | |
| 452 | 451 |
| 453 TEST_F(TextureTest, Basic) { | 452 TEST_F(TextureTest, Basic) { |
| 454 Texture* texture = texture_ref_->texture(); | 453 Texture* texture = texture_ref_->texture(); |
| 455 EXPECT_EQ(0u, texture->target()); | 454 EXPECT_EQ(0u, texture->target()); |
| 456 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 455 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 457 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 456 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 458 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 457 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 459 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 458 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 460 EXPECT_EQ(0, texture->num_uncleared_mips()); | 459 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 461 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 460 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 462 EXPECT_TRUE(texture->SafeToRenderFrom()); | 461 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 463 EXPECT_FALSE(texture->IsImmutable()); | 462 EXPECT_FALSE(texture->IsImmutable()); |
| 464 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), | 463 EXPECT_EQ(static_cast<GLenum>(GL_NEAREST_MIPMAP_LINEAR), |
| 465 texture->min_filter()); | 464 texture->min_filter()); |
| 466 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter()); | 465 EXPECT_EQ(static_cast<GLenum>(GL_LINEAR), texture->mag_filter()); |
| 467 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s()); | 466 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_s()); |
| 468 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t()); | 467 EXPECT_EQ(static_cast<GLenum>(GL_REPEAT), texture->wrap_t()); |
| 469 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 468 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 470 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 469 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 471 EXPECT_EQ(0u, texture->estimated_size()); | 470 EXPECT_EQ(0u, texture->estimated_size()); |
| 472 } | 471 } |
| 473 | 472 |
| 474 TEST_F(TextureTest, SetTargetTexture2D) { | 473 TEST_F(TextureTest, SetTargetTexture2D) { |
| 475 Texture* texture = texture_ref_->texture(); | 474 Texture* texture = texture_ref_->texture(); |
| 476 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 475 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 477 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 476 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 478 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 477 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 479 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 478 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 480 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 479 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 481 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 480 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 482 EXPECT_TRUE(texture->SafeToRenderFrom()); | 481 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 483 EXPECT_FALSE(texture->IsImmutable()); | 482 EXPECT_FALSE(texture->IsImmutable()); |
| 484 } | 483 } |
| 485 | 484 |
| 486 TEST_F(TextureTest, SetTargetTextureExternalOES) { | 485 TEST_F(TextureTest, SetTargetTextureExternalOES) { |
| 487 Texture* texture = texture_ref_->texture(); | 486 Texture* texture = texture_ref_->texture(); |
| 488 manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES); | 487 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); |
| 489 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 488 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 490 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 489 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 491 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 490 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 492 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 491 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
| 493 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 492 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 494 EXPECT_TRUE(texture->SafeToRenderFrom()); | 493 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 495 EXPECT_TRUE(texture->IsImmutable()); | 494 EXPECT_TRUE(texture->IsImmutable()); |
| 496 manager_->SetStreamTexture(texture_ref_, true); | 495 manager_->SetStreamTexture(texture_ref_.get(), true); |
| 497 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 496 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 498 } | 497 } |
| 499 | 498 |
| 500 TEST_F(TextureTest, ZeroSizeCanNotRender) { | 499 TEST_F(TextureTest, ZeroSizeCanNotRender) { |
| 501 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 500 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 502 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 501 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 503 manager_->SetLevelInfo(texture_ref_, | 502 manager_->SetLevelInfo(texture_ref_.get(), |
| 504 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 503 GL_TEXTURE_2D, |
| 505 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 504 0, |
| 506 manager_->SetLevelInfo(texture_ref_, | 505 GL_RGBA, |
| 507 GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 506 1, |
| 508 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 507 1, |
| 508 1, |
| 509 0, |
| 510 GL_RGBA, |
| 511 GL_UNSIGNED_BYTE, |
| 512 true); |
| 513 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 514 manager_->SetLevelInfo(texture_ref_.get(), |
| 515 GL_TEXTURE_2D, |
| 516 0, |
| 517 GL_RGBA, |
| 518 0, |
| 519 0, |
| 520 1, |
| 521 0, |
| 522 GL_RGBA, |
| 523 GL_UNSIGNED_BYTE, |
| 524 true); |
| 525 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 509 } | 526 } |
| 510 | 527 |
| 511 TEST_F(TextureTest, EstimatedSize) { | 528 TEST_F(TextureTest, EstimatedSize) { |
| 512 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 529 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 513 manager_->SetLevelInfo(texture_ref_, | 530 manager_->SetLevelInfo(texture_ref_.get(), |
| 514 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 531 GL_TEXTURE_2D, |
| 532 0, |
| 533 GL_RGBA, |
| 534 8, |
| 535 4, |
| 536 1, |
| 537 0, |
| 538 GL_RGBA, |
| 539 GL_UNSIGNED_BYTE, |
| 540 true); |
| 515 EXPECT_EQ(8u * 4u * 4u, texture_ref_->texture()->estimated_size()); | 541 EXPECT_EQ(8u * 4u * 4u, texture_ref_->texture()->estimated_size()); |
| 516 manager_->SetLevelInfo(texture_ref_, | 542 manager_->SetLevelInfo(texture_ref_.get(), |
| 517 GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 543 GL_TEXTURE_2D, |
| 544 2, |
| 545 GL_RGBA, |
| 546 8, |
| 547 4, |
| 548 1, |
| 549 0, |
| 550 GL_RGBA, |
| 551 GL_UNSIGNED_BYTE, |
| 552 true); |
| 518 EXPECT_EQ(8u * 4u * 4u * 2u, texture_ref_->texture()->estimated_size()); | 553 EXPECT_EQ(8u * 4u * 4u * 2u, texture_ref_->texture()->estimated_size()); |
| 519 } | 554 } |
| 520 | 555 |
| 521 TEST_F(TextureMemoryTrackerTest, EstimatedSize) { | 556 TEST_F(TextureMemoryTrackerTest, EstimatedSize) { |
| 522 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 557 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 523 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); | 558 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); |
| 524 manager_->SetLevelInfo(texture_ref_, | 559 manager_->SetLevelInfo(texture_ref_.get(), |
| 525 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 560 GL_TEXTURE_2D, |
| 561 0, |
| 562 GL_RGBA, |
| 563 8, |
| 564 4, |
| 565 1, |
| 566 0, |
| 567 GL_RGBA, |
| 568 GL_UNSIGNED_BYTE, |
| 569 true); |
| 526 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); | 570 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); |
| 527 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 256, MemoryTracker::kUnmanaged); | 571 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 256, MemoryTracker::kUnmanaged); |
| 528 manager_->SetLevelInfo(texture_ref_, | 572 manager_->SetLevelInfo(texture_ref_.get(), |
| 529 GL_TEXTURE_2D, 2, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 573 GL_TEXTURE_2D, |
| 574 2, |
| 575 GL_RGBA, |
| 576 8, |
| 577 4, |
| 578 1, |
| 579 0, |
| 580 GL_RGBA, |
| 581 GL_UNSIGNED_BYTE, |
| 582 true); |
| 530 // Add expectation for texture deletion. | 583 // Add expectation for texture deletion. |
| 531 EXPECT_MEMORY_ALLOCATION_CHANGE(256, 0, MemoryTracker::kUnmanaged); | 584 EXPECT_MEMORY_ALLOCATION_CHANGE(256, 0, MemoryTracker::kUnmanaged); |
| 532 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 585 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
| 533 } | 586 } |
| 534 | 587 |
| 535 TEST_F(TextureMemoryTrackerTest, SetParameterPool) { | 588 TEST_F(TextureMemoryTrackerTest, SetParameterPool) { |
| 536 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 589 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 537 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); | 590 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kUnmanaged); |
| 538 manager_->SetLevelInfo(texture_ref_, | 591 manager_->SetLevelInfo(texture_ref_.get(), |
| 539 GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 592 GL_TEXTURE_2D, |
| 593 0, |
| 594 GL_RGBA, |
| 595 8, |
| 596 4, |
| 597 1, |
| 598 0, |
| 599 GL_RGBA, |
| 600 GL_UNSIGNED_BYTE, |
| 601 true); |
| 540 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); | 602 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kUnmanaged); |
| 541 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kManaged); | 603 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 128, MemoryTracker::kManaged); |
| 542 SetParameter( | 604 SetParameter(texture_ref_.get(), |
| 543 texture_ref_, GL_TEXTURE_POOL_CHROMIUM, GL_TEXTURE_POOL_MANAGED_CHROMIUM, | 605 GL_TEXTURE_POOL_CHROMIUM, |
| 544 GL_NO_ERROR); | 606 GL_TEXTURE_POOL_MANAGED_CHROMIUM, |
| 607 GL_NO_ERROR); |
| 545 // Add expectation for texture deletion. | 608 // Add expectation for texture deletion. |
| 546 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kManaged); | 609 EXPECT_MEMORY_ALLOCATION_CHANGE(128, 0, MemoryTracker::kManaged); |
| 547 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 610 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
| 548 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged); | 611 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kManaged); |
| 549 } | 612 } |
| 550 | 613 |
| 551 TEST_F(TextureTest, POT2D) { | 614 TEST_F(TextureTest, POT2D) { |
| 552 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 615 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 553 Texture* texture = texture_ref_->texture(); | 616 Texture* texture = texture_ref_->texture(); |
| 554 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 617 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 555 // Check Setting level 0 to POT | 618 // Check Setting level 0 to POT |
| 556 manager_->SetLevelInfo(texture_ref_, | 619 manager_->SetLevelInfo(texture_ref_.get(), |
| 557 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 620 GL_TEXTURE_2D, |
| 558 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 621 0, |
| 559 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 622 GL_RGBA, |
| 560 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 623 4, |
| 624 4, |
| 625 1, |
| 626 0, |
| 627 GL_RGBA, |
| 628 GL_UNSIGNED_BYTE, |
| 629 true); |
| 630 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 631 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 632 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 561 EXPECT_EQ(0, texture->num_uncleared_mips()); | 633 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 562 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 634 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 563 // Set filters to something that will work with a single mip. | 635 // Set filters to something that will work with a single mip. |
| 564 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 636 SetParameter( |
| 565 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 637 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
| 638 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 566 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 639 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 567 // Set them back. | 640 // Set them back. |
| 568 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, | 641 SetParameter(texture_ref_.get(), |
| 569 GL_LINEAR_MIPMAP_LINEAR, GL_NO_ERROR); | 642 GL_TEXTURE_MIN_FILTER, |
| 570 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 643 GL_LINEAR_MIPMAP_LINEAR, |
| 571 | 644 GL_NO_ERROR); |
| 572 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 645 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 646 |
| 647 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 573 // Make mips. | 648 // Make mips. |
| 574 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 649 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 575 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 650 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 576 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 651 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 577 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 652 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 578 // Change a mip. | 653 // Change a mip. |
| 579 manager_->SetLevelInfo(texture_ref_, | 654 manager_->SetLevelInfo(texture_ref_.get(), |
| 580 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 655 GL_TEXTURE_2D, |
| 581 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 656 1, |
| 582 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 657 GL_RGBA, |
| 583 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 658 4, |
| 584 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 659 4, |
| 660 1, |
| 661 0, |
| 662 GL_RGBA, |
| 663 GL_UNSIGNED_BYTE, |
| 664 true); |
| 665 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 666 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 667 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 668 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 585 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 669 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 586 // Set a level past the number of mips that would get generated. | 670 // Set a level past the number of mips that would get generated. |
| 587 manager_->SetLevelInfo(texture_ref_, | 671 manager_->SetLevelInfo(texture_ref_.get(), |
| 588 GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 672 GL_TEXTURE_2D, |
| 589 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 673 3, |
| 674 GL_RGBA, |
| 675 4, |
| 676 4, |
| 677 1, |
| 678 0, |
| 679 GL_RGBA, |
| 680 GL_UNSIGNED_BYTE, |
| 681 true); |
| 682 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 590 // Make mips. | 683 // Make mips. |
| 591 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 684 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 592 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 685 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 593 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 686 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 594 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 687 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 595 } | 688 } |
| 596 | 689 |
| 597 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { | 690 TEST_F(TextureMemoryTrackerTest, MarkMipmapsGenerated) { |
| 598 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 691 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 599 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64, MemoryTracker::kUnmanaged); | 692 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 64, MemoryTracker::kUnmanaged); |
| 600 manager_->SetLevelInfo(texture_ref_, | 693 manager_->SetLevelInfo(texture_ref_.get(), |
| 601 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 694 GL_TEXTURE_2D, |
| 695 0, |
| 696 GL_RGBA, |
| 697 4, |
| 698 4, |
| 699 1, |
| 700 0, |
| 701 GL_RGBA, |
| 702 GL_UNSIGNED_BYTE, |
| 703 true); |
| 602 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0, MemoryTracker::kUnmanaged); | 704 EXPECT_MEMORY_ALLOCATION_CHANGE(64, 0, MemoryTracker::kUnmanaged); |
| 603 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84, MemoryTracker::kUnmanaged); | 705 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 84, MemoryTracker::kUnmanaged); |
| 604 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 706 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 605 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0, MemoryTracker::kUnmanaged); | 707 EXPECT_MEMORY_ALLOCATION_CHANGE(84, 0, MemoryTracker::kUnmanaged); |
| 606 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 708 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
| 607 } | 709 } |
| 608 | 710 |
| 609 TEST_F(TextureTest, UnusedMips) { | 711 TEST_F(TextureTest, UnusedMips) { |
| 610 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 712 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 611 Texture* texture = texture_ref_->texture(); | 713 Texture* texture = texture_ref_->texture(); |
| 612 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 714 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 613 // Set level zero to large size. | 715 // Set level zero to large size. |
| 614 manager_->SetLevelInfo(texture_ref_, | 716 manager_->SetLevelInfo(texture_ref_.get(), |
| 615 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 717 GL_TEXTURE_2D, |
| 616 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 718 0, |
| 617 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 719 GL_RGBA, |
| 618 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 720 4, |
| 619 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 721 4, |
| 722 1, |
| 723 0, |
| 724 GL_RGBA, |
| 725 GL_UNSIGNED_BYTE, |
| 726 true); |
| 727 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 728 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 729 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 730 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 620 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 731 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 621 // Set level zero to large smaller (levels unused mips) | 732 // Set level zero to large smaller (levels unused mips) |
| 622 manager_->SetLevelInfo(texture_ref_, | 733 manager_->SetLevelInfo(texture_ref_.get(), |
| 623 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 734 GL_TEXTURE_2D, |
| 624 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 735 0, |
| 625 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 736 GL_RGBA, |
| 626 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 737 2, |
| 627 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 738 2, |
| 739 1, |
| 740 0, |
| 741 GL_RGBA, |
| 742 GL_UNSIGNED_BYTE, |
| 743 true); |
| 744 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 745 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 746 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 747 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 628 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 748 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 629 // Set an unused level to some size | 749 // Set an unused level to some size |
| 630 manager_->SetLevelInfo(texture_ref_, | 750 manager_->SetLevelInfo(texture_ref_.get(), |
| 631 GL_TEXTURE_2D, 4, GL_RGBA, 16, 16, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 751 GL_TEXTURE_2D, |
| 632 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 752 4, |
| 633 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 753 GL_RGBA, |
| 634 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 754 16, |
| 755 16, |
| 756 1, |
| 757 0, |
| 758 GL_RGBA, |
| 759 GL_UNSIGNED_BYTE, |
| 760 true); |
| 761 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 762 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 763 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 635 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 764 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 636 } | 765 } |
| 637 | 766 |
| 638 TEST_F(TextureTest, NPOT2D) { | 767 TEST_F(TextureTest, NPOT2D) { |
| 639 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 768 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 640 Texture* texture = texture_ref_->texture(); | 769 Texture* texture = texture_ref_->texture(); |
| 641 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 770 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 642 // Check Setting level 0 to NPOT | 771 // Check Setting level 0 to NPOT |
| 643 manager_->SetLevelInfo(texture_ref_, | 772 manager_->SetLevelInfo(texture_ref_.get(), |
| 644 GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 773 GL_TEXTURE_2D, |
| 774 0, |
| 775 GL_RGBA, |
| 776 4, |
| 777 5, |
| 778 1, |
| 779 0, |
| 780 GL_RGBA, |
| 781 GL_UNSIGNED_BYTE, |
| 782 true); |
| 645 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); | 783 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); |
| 646 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 784 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 647 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 785 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 648 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 786 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 649 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 787 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 650 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); | 788 SetParameter( |
| 651 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 789 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR, GL_NO_ERROR); |
| 652 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 790 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 653 SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 791 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 654 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 792 SetParameter( |
| 655 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 793 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 656 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 794 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 657 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 795 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 796 SetParameter( |
| 797 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 798 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 658 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 799 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 659 // Change it to POT. | 800 // Change it to POT. |
| 660 manager_->SetLevelInfo(texture_ref_, | 801 manager_->SetLevelInfo(texture_ref_.get(), |
| 661 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 802 GL_TEXTURE_2D, |
| 662 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 803 0, |
| 663 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 804 GL_RGBA, |
| 664 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 805 4, |
| 665 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 806 4, |
| 666 } | 807 1, |
| 667 | 808 0, |
| 809 GL_RGBA, |
| 810 GL_UNSIGNED_BYTE, |
| 811 true); |
| 812 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 813 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 814 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 815 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 816 } |
| 817 |
| 668 TEST_F(TextureTest, NPOT2DNPOTOK) { | 818 TEST_F(TextureTest, NPOT2DNPOTOK) { |
| 669 TestHelper::SetupFeatureInfoInitExpectations( | 819 TestHelper::SetupFeatureInfoInitExpectations( |
| 670 gl_.get(), "GL_OES_texture_npot"); | 820 gl_.get(), "GL_OES_texture_npot"); |
| 671 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 821 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 672 feature_info->Initialize(NULL); | 822 feature_info->Initialize(NULL); |
| 673 TextureManager manager( | 823 TextureManager manager( |
| 674 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); | 824 NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize); |
| 675 manager.CreateTexture(kClient1Id, kService1Id); | 825 manager.CreateTexture(kClient1Id, kService1Id); |
| 676 TextureRef* texture_ref = manager.GetTexture(kClient1Id); | 826 TextureRef* texture_ref = manager.GetTexture(kClient1Id); |
| 677 ASSERT_TRUE(texture_ref != NULL); | 827 ASSERT_TRUE(texture_ref != NULL); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 688 EXPECT_FALSE(manager.CanRender(texture_ref)); | 838 EXPECT_FALSE(manager.CanRender(texture_ref)); |
| 689 EXPECT_TRUE(manager.HaveUnrenderableTextures()); | 839 EXPECT_TRUE(manager.HaveUnrenderableTextures()); |
| 690 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref)); | 840 EXPECT_TRUE(manager.MarkMipmapsGenerated(texture_ref)); |
| 691 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 841 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 692 EXPECT_TRUE(manager.CanRender(texture_ref)); | 842 EXPECT_TRUE(manager.CanRender(texture_ref)); |
| 693 EXPECT_FALSE(manager.HaveUnrenderableTextures()); | 843 EXPECT_FALSE(manager.HaveUnrenderableTextures()); |
| 694 manager.Destroy(false); | 844 manager.Destroy(false); |
| 695 } | 845 } |
| 696 | 846 |
| 697 TEST_F(TextureTest, POTCubeMap) { | 847 TEST_F(TextureTest, POTCubeMap) { |
| 698 manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP); | 848 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); |
| 699 Texture* texture = texture_ref_->texture(); | 849 Texture* texture = texture_ref_->texture(); |
| 700 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 850 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
| 701 // Check Setting level 0 each face to POT | 851 // Check Setting level 0 each face to POT |
| 702 manager_->SetLevelInfo(texture_ref_, | 852 manager_->SetLevelInfo(texture_ref_.get(), |
| 703 GL_TEXTURE_CUBE_MAP_POSITIVE_X, | 853 GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| 704 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 854 0, |
| 855 GL_RGBA, |
| 856 4, |
| 857 4, |
| 858 1, |
| 859 0, |
| 860 GL_RGBA, |
| 861 GL_UNSIGNED_BYTE, |
| 862 true); |
| 705 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 863 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 706 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 864 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 707 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 865 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 708 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 866 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 709 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 867 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 710 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 868 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 711 manager_->SetLevelInfo(texture_ref_, | 869 manager_->SetLevelInfo(texture_ref_.get(), |
| 712 GL_TEXTURE_CUBE_MAP_NEGATIVE_X, | 870 GL_TEXTURE_CUBE_MAP_NEGATIVE_X, |
| 713 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 871 0, |
| 872 GL_RGBA, |
| 873 4, |
| 874 4, |
| 875 1, |
| 876 0, |
| 877 GL_RGBA, |
| 878 GL_UNSIGNED_BYTE, |
| 879 true); |
| 714 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 880 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 715 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 881 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 716 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 882 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 717 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 883 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 718 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 884 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 719 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 885 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 720 manager_->SetLevelInfo(texture_ref_, | 886 manager_->SetLevelInfo(texture_ref_.get(), |
| 721 GL_TEXTURE_CUBE_MAP_POSITIVE_Y, | 887 GL_TEXTURE_CUBE_MAP_POSITIVE_Y, |
| 722 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 888 0, |
| 889 GL_RGBA, |
| 890 4, |
| 891 4, |
| 892 1, |
| 893 0, |
| 894 GL_RGBA, |
| 895 GL_UNSIGNED_BYTE, |
| 896 true); |
| 723 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 897 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 724 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 898 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 725 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 899 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 726 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 900 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 727 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 901 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 728 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 902 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 729 manager_->SetLevelInfo(texture_ref_, | 903 manager_->SetLevelInfo(texture_ref_.get(), |
| 730 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, | 904 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| 731 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 905 0, |
| 906 GL_RGBA, |
| 907 4, |
| 908 4, |
| 909 1, |
| 910 0, |
| 911 GL_RGBA, |
| 912 GL_UNSIGNED_BYTE, |
| 913 true); |
| 732 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 914 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 733 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 915 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 734 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 916 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 735 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 917 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 736 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 918 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 737 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 919 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 738 manager_->SetLevelInfo(texture_ref_, | 920 manager_->SetLevelInfo(texture_ref_.get(), |
| 739 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, | 921 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, |
| 740 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 922 0, |
| 923 GL_RGBA, |
| 924 4, |
| 925 4, |
| 926 1, |
| 927 0, |
| 928 GL_RGBA, |
| 929 GL_UNSIGNED_BYTE, |
| 930 true); |
| 741 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 931 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 742 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 932 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 743 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); | 933 EXPECT_FALSE(TextureTestHelper::IsCubeComplete(texture)); |
| 744 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_)); | 934 EXPECT_FALSE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 745 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 935 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 746 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 936 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 747 manager_->SetLevelInfo(texture_ref_, | 937 manager_->SetLevelInfo(texture_ref_.get(), |
| 748 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 938 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 749 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 939 0, |
| 940 GL_RGBA, |
| 941 4, |
| 942 4, |
| 943 1, |
| 944 0, |
| 945 GL_RGBA, |
| 946 GL_UNSIGNED_BYTE, |
| 947 true); |
| 750 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 948 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 751 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 949 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 752 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 950 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 753 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 951 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 754 EXPECT_FALSE(manager_->CanRender(texture_ref_)); | 952 EXPECT_FALSE(manager_->CanRender(texture_ref_.get())); |
| 755 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 953 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 756 | 954 |
| 757 // Make mips. | 955 // Make mips. |
| 758 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 956 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 759 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 957 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 760 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 958 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 761 EXPECT_TRUE(manager_->CanRender(texture_ref_)); | 959 EXPECT_TRUE(manager_->CanRender(texture_ref_.get())); |
| 762 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 960 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 763 | 961 |
| 764 // Change a mip. | 962 // Change a mip. |
| 765 manager_->SetLevelInfo(texture_ref_, | 963 manager_->SetLevelInfo(texture_ref_.get(), |
| 766 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 964 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 767 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 965 1, |
| 966 GL_RGBA, |
| 967 4, |
| 968 4, |
| 969 1, |
| 970 0, |
| 971 GL_RGBA, |
| 972 GL_UNSIGNED_BYTE, |
| 973 true); |
| 768 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); | 974 EXPECT_FALSE(TextureTestHelper::IsNPOT(texture)); |
| 769 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); | 975 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); |
| 770 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 976 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 771 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 977 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 772 // Set a level past the number of mips that would get generated. | 978 // Set a level past the number of mips that would get generated. |
| 773 manager_->SetLevelInfo(texture_ref_, | 979 manager_->SetLevelInfo(texture_ref_.get(), |
| 774 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 980 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 775 3, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 981 3, |
| 776 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_)); | 982 GL_RGBA, |
| 983 4, |
| 984 4, |
| 985 1, |
| 986 0, |
| 987 GL_RGBA, |
| 988 GL_UNSIGNED_BYTE, |
| 989 true); |
| 990 EXPECT_TRUE(manager_->CanGenerateMipmaps(texture_ref_.get())); |
| 777 // Make mips. | 991 // Make mips. |
| 778 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 992 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 779 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 993 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 780 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); | 994 EXPECT_TRUE(TextureTestHelper::IsCubeComplete(texture)); |
| 781 } | 995 } |
| 782 | 996 |
| 783 TEST_F(TextureTest, GetLevelSize) { | 997 TEST_F(TextureTest, GetLevelSize) { |
| 784 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 998 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 785 manager_->SetLevelInfo(texture_ref_, | 999 manager_->SetLevelInfo(texture_ref_.get(), |
| 786 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1000 GL_TEXTURE_2D, |
| 1001 1, |
| 1002 GL_RGBA, |
| 1003 4, |
| 1004 5, |
| 1005 1, |
| 1006 0, |
| 1007 GL_RGBA, |
| 1008 GL_UNSIGNED_BYTE, |
| 1009 true); |
| 787 GLsizei width = -1; | 1010 GLsizei width = -1; |
| 788 GLsizei height = -1; | 1011 GLsizei height = -1; |
| 789 Texture* texture = texture_ref_->texture(); | 1012 Texture* texture = texture_ref_->texture(); |
| 790 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height)); | 1013 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, -1, &width, &height)); |
| 791 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height)); | 1014 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 1000, &width, &height)); |
| 792 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); | 1015 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
| 793 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); | 1016 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); |
| 794 EXPECT_EQ(4, width); | 1017 EXPECT_EQ(4, width); |
| 795 EXPECT_EQ(5, height); | 1018 EXPECT_EQ(5, height); |
| 796 manager_->RemoveTexture(kClient1Id); | 1019 manager_->RemoveTexture(kClient1Id); |
| 797 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); | 1020 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height)); |
| 798 EXPECT_EQ(4, width); | 1021 EXPECT_EQ(4, width); |
| 799 EXPECT_EQ(5, height); | 1022 EXPECT_EQ(5, height); |
| 800 } | 1023 } |
| 801 | 1024 |
| 802 TEST_F(TextureTest, GetLevelType) { | 1025 TEST_F(TextureTest, GetLevelType) { |
| 803 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1026 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 804 manager_->SetLevelInfo(texture_ref_, | 1027 manager_->SetLevelInfo(texture_ref_.get(), |
| 805 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1028 GL_TEXTURE_2D, |
| 1029 1, |
| 1030 GL_RGBA, |
| 1031 4, |
| 1032 5, |
| 1033 1, |
| 1034 0, |
| 1035 GL_RGBA, |
| 1036 GL_UNSIGNED_BYTE, |
| 1037 true); |
| 806 GLenum type = -1; | 1038 GLenum type = -1; |
| 807 GLenum format = -1; | 1039 GLenum format = -1; |
| 808 Texture* texture = texture_ref_->texture(); | 1040 Texture* texture = texture_ref_->texture(); |
| 809 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); | 1041 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, -1, &type, &format)); |
| 810 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); | 1042 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 1000, &type, &format)); |
| 811 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); | 1043 EXPECT_FALSE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &format)); |
| 812 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 1044 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
| 813 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 1045 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
| 814 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 1046 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
| 815 manager_->RemoveTexture(kClient1Id); | 1047 manager_->RemoveTexture(kClient1Id); |
| 816 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); | 1048 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &format)); |
| 817 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 1049 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
| 818 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); | 1050 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format); |
| 819 } | 1051 } |
| 820 | 1052 |
| 821 TEST_F(TextureTest, ValidForTexture) { | 1053 TEST_F(TextureTest, ValidForTexture) { |
| 822 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1054 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 823 manager_->SetLevelInfo(texture_ref_, | 1055 manager_->SetLevelInfo(texture_ref_.get(), |
| 824 GL_TEXTURE_2D, 1, GL_RGBA, 4, 5, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1056 GL_TEXTURE_2D, |
| 1057 1, |
| 1058 GL_RGBA, |
| 1059 4, |
| 1060 5, |
| 1061 1, |
| 1062 0, |
| 1063 GL_RGBA, |
| 1064 GL_UNSIGNED_BYTE, |
| 1065 true); |
| 825 // Check bad face. | 1066 // Check bad face. |
| 826 Texture* texture = texture_ref_->texture(); | 1067 Texture* texture = texture_ref_->texture(); |
| 827 EXPECT_FALSE(texture->ValidForTexture( | 1068 EXPECT_FALSE(texture->ValidForTexture( |
| 828 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 1069 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 829 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 1070 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 830 // Check bad level. | 1071 // Check bad level. |
| 831 EXPECT_FALSE(texture->ValidForTexture( | 1072 EXPECT_FALSE(texture->ValidForTexture( |
| 832 GL_TEXTURE_2D, 0, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); | 1073 GL_TEXTURE_2D, 0, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE)); |
| 833 // Check bad xoffset. | 1074 // Check bad xoffset. |
| 834 EXPECT_FALSE(texture->ValidForTexture( | 1075 EXPECT_FALSE(texture->ValidForTexture( |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 993 } | 1234 } |
| 994 | 1235 |
| 995 TEST_F(TextureTest, SafeUnsafe) { | 1236 TEST_F(TextureTest, SafeUnsafe) { |
| 996 static const GLuint kClient2Id = 2; | 1237 static const GLuint kClient2Id = 2; |
| 997 static const GLuint kService2Id = 12; | 1238 static const GLuint kService2Id = 12; |
| 998 static const GLuint kClient3Id = 3; | 1239 static const GLuint kClient3Id = 3; |
| 999 static const GLuint kService3Id = 13; | 1240 static const GLuint kService3Id = 13; |
| 1000 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1241 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1001 Texture* texture = texture_ref_->texture(); | 1242 Texture* texture = texture_ref_->texture(); |
| 1002 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1243 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1003 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1244 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1004 manager_->SetLevelInfo(texture_ref_, | 1245 manager_->SetLevelInfo(texture_ref_.get(), |
| 1005 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1246 GL_TEXTURE_2D, |
| 1247 0, |
| 1248 GL_RGBA, |
| 1249 4, |
| 1250 4, |
| 1251 1, |
| 1252 0, |
| 1253 GL_RGBA, |
| 1254 GL_UNSIGNED_BYTE, |
| 1255 false); |
| 1006 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1256 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1007 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1257 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1008 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1258 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1009 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1259 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1010 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 0, true); | 1260 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); |
| 1011 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1261 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1012 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1262 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1013 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1263 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1014 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1264 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1015 manager_->SetLevelInfo(texture_ref_, | 1265 manager_->SetLevelInfo(texture_ref_.get(), |
| 1016 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1266 GL_TEXTURE_2D, |
| 1267 1, |
| 1268 GL_RGBA, |
| 1269 8, |
| 1270 8, |
| 1271 1, |
| 1272 0, |
| 1273 GL_RGBA, |
| 1274 GL_UNSIGNED_BYTE, |
| 1275 false); |
| 1017 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1276 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1018 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1277 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1019 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1278 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1020 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1279 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1021 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 1, true); | 1280 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); |
| 1022 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1281 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1023 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1282 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1024 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1283 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1025 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1284 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1026 manager_->SetLevelInfo(texture_ref_, | 1285 manager_->SetLevelInfo(texture_ref_.get(), |
| 1027 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1286 GL_TEXTURE_2D, |
| 1028 manager_->SetLevelInfo(texture_ref_, | 1287 0, |
| 1029 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1288 GL_RGBA, |
| 1289 4, |
| 1290 4, |
| 1291 1, |
| 1292 0, |
| 1293 GL_RGBA, |
| 1294 GL_UNSIGNED_BYTE, |
| 1295 false); |
| 1296 manager_->SetLevelInfo(texture_ref_.get(), |
| 1297 GL_TEXTURE_2D, |
| 1298 1, |
| 1299 GL_RGBA, |
| 1300 8, |
| 1301 8, |
| 1302 1, |
| 1303 0, |
| 1304 GL_RGBA, |
| 1305 GL_UNSIGNED_BYTE, |
| 1306 false); |
| 1030 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1307 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1031 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1308 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1032 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1309 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1033 EXPECT_EQ(2, texture->num_uncleared_mips()); | 1310 EXPECT_EQ(2, texture->num_uncleared_mips()); |
| 1034 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 0, true); | 1311 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 0, true); |
| 1035 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1312 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1036 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1313 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1037 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1314 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1038 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1315 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1039 manager_->SetLevelCleared(texture_ref_, GL_TEXTURE_2D, 1, true); | 1316 manager_->SetLevelCleared(texture_ref_.get(), GL_TEXTURE_2D, 1, true); |
| 1040 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1317 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1041 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1318 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1042 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1319 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1043 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1320 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1044 manager_->SetLevelInfo(texture_ref_, | 1321 manager_->SetLevelInfo(texture_ref_.get(), |
| 1045 GL_TEXTURE_2D, 1, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1322 GL_TEXTURE_2D, |
| 1323 1, |
| 1324 GL_RGBA, |
| 1325 8, |
| 1326 8, |
| 1327 1, |
| 1328 0, |
| 1329 GL_RGBA, |
| 1330 GL_UNSIGNED_BYTE, |
| 1331 false); |
| 1046 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1332 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1047 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1333 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1048 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1334 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1049 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1335 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1050 manager_->MarkMipmapsGenerated(texture_ref_); | 1336 manager_->MarkMipmapsGenerated(texture_ref_.get()); |
| 1051 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1337 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1052 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1338 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1053 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1339 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1054 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1340 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1055 | 1341 |
| 1056 manager_->CreateTexture(kClient2Id, kService2Id); | 1342 manager_->CreateTexture(kClient2Id, kService2Id); |
| 1057 scoped_refptr<TextureRef> texture_ref2( | 1343 scoped_refptr<TextureRef> texture_ref2( |
| 1058 manager_->GetTexture(kClient2Id)); | 1344 manager_->GetTexture(kClient2Id)); |
| 1059 ASSERT_TRUE(texture_ref2.get() != NULL); | 1345 ASSERT_TRUE(texture_ref2.get() != NULL); |
| 1060 manager_->SetTarget(texture_ref2, GL_TEXTURE_2D); | 1346 manager_->SetTarget(texture_ref2.get(), GL_TEXTURE_2D); |
| 1061 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1347 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1062 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1348 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1063 Texture* texture2 = texture_ref2->texture(); | 1349 Texture* texture2 = texture_ref2->texture(); |
| 1064 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1350 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
| 1065 manager_->SetLevelInfo(texture_ref2, | 1351 manager_->SetLevelInfo(texture_ref2.get(), |
| 1066 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1352 GL_TEXTURE_2D, |
| 1353 0, |
| 1354 GL_RGBA, |
| 1355 8, |
| 1356 8, |
| 1357 1, |
| 1358 0, |
| 1359 GL_RGBA, |
| 1360 GL_UNSIGNED_BYTE, |
| 1361 true); |
| 1067 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1362 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1068 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1363 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1069 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1364 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
| 1070 manager_->SetLevelInfo(texture_ref2, | 1365 manager_->SetLevelInfo(texture_ref2.get(), |
| 1071 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1366 GL_TEXTURE_2D, |
| 1367 0, |
| 1368 GL_RGBA, |
| 1369 8, |
| 1370 8, |
| 1371 1, |
| 1372 0, |
| 1373 GL_RGBA, |
| 1374 GL_UNSIGNED_BYTE, |
| 1375 false); |
| 1072 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1376 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1073 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1377 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1074 EXPECT_EQ(1, texture2->num_uncleared_mips()); | 1378 EXPECT_EQ(1, texture2->num_uncleared_mips()); |
| 1075 | 1379 |
| 1076 manager_->CreateTexture(kClient3Id, kService3Id); | 1380 manager_->CreateTexture(kClient3Id, kService3Id); |
| 1077 scoped_refptr<TextureRef> texture_ref3( | 1381 scoped_refptr<TextureRef> texture_ref3( |
| 1078 manager_->GetTexture(kClient3Id)); | 1382 manager_->GetTexture(kClient3Id)); |
| 1079 ASSERT_TRUE(texture_ref3.get() != NULL); | 1383 ASSERT_TRUE(texture_ref3.get() != NULL); |
| 1080 manager_->SetTarget(texture_ref3, GL_TEXTURE_2D); | 1384 manager_->SetTarget(texture_ref3.get(), GL_TEXTURE_2D); |
| 1081 manager_->SetLevelInfo(texture_ref3, | 1385 manager_->SetLevelInfo(texture_ref3.get(), |
| 1082 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1386 GL_TEXTURE_2D, |
| 1387 0, |
| 1388 GL_RGBA, |
| 1389 8, |
| 1390 8, |
| 1391 1, |
| 1392 0, |
| 1393 GL_RGBA, |
| 1394 GL_UNSIGNED_BYTE, |
| 1395 false); |
| 1083 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1396 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1084 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1397 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1085 Texture* texture3 = texture_ref3->texture(); | 1398 Texture* texture3 = texture_ref3->texture(); |
| 1086 EXPECT_EQ(1, texture3->num_uncleared_mips()); | 1399 EXPECT_EQ(1, texture3->num_uncleared_mips()); |
| 1087 manager_->SetLevelCleared(texture_ref2, GL_TEXTURE_2D, 0, true); | 1400 manager_->SetLevelCleared(texture_ref2.get(), GL_TEXTURE_2D, 0, true); |
| 1088 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1401 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1089 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1402 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1090 EXPECT_EQ(0, texture2->num_uncleared_mips()); | 1403 EXPECT_EQ(0, texture2->num_uncleared_mips()); |
| 1091 manager_->SetLevelCleared(texture_ref3, GL_TEXTURE_2D, 0, true); | 1404 manager_->SetLevelCleared(texture_ref3.get(), GL_TEXTURE_2D, 0, true); |
| 1092 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1405 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1093 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1406 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1094 EXPECT_EQ(0, texture3->num_uncleared_mips()); | 1407 EXPECT_EQ(0, texture3->num_uncleared_mips()); |
| 1095 | 1408 |
| 1096 manager_->SetLevelInfo(texture_ref2, | 1409 manager_->SetLevelInfo(texture_ref2.get(), |
| 1097 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1410 GL_TEXTURE_2D, |
| 1098 manager_->SetLevelInfo(texture_ref3, | 1411 0, |
| 1099 GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1412 GL_RGBA, |
| 1413 8, |
| 1414 8, |
| 1415 1, |
| 1416 0, |
| 1417 GL_RGBA, |
| 1418 GL_UNSIGNED_BYTE, |
| 1419 false); |
| 1420 manager_->SetLevelInfo(texture_ref3.get(), |
| 1421 GL_TEXTURE_2D, |
| 1422 0, |
| 1423 GL_RGBA, |
| 1424 8, |
| 1425 8, |
| 1426 1, |
| 1427 0, |
| 1428 GL_RGBA, |
| 1429 GL_UNSIGNED_BYTE, |
| 1430 false); |
| 1100 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1431 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1101 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1432 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1102 EXPECT_EQ(1, texture2->num_uncleared_mips()); | 1433 EXPECT_EQ(1, texture2->num_uncleared_mips()); |
| 1103 EXPECT_EQ(1, texture3->num_uncleared_mips()); | 1434 EXPECT_EQ(1, texture3->num_uncleared_mips()); |
| 1104 manager_->RemoveTexture(kClient3Id); | 1435 manager_->RemoveTexture(kClient3Id); |
| 1105 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1436 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1106 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1437 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1107 manager_->RemoveTexture(kClient2Id); | 1438 manager_->RemoveTexture(kClient2Id); |
| 1108 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1439 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1109 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1440 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1110 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1441 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
| 1111 .Times(1) | 1442 .Times(1) |
| 1112 .RetiresOnSaturation(); | 1443 .RetiresOnSaturation(); |
| 1113 texture_ref2 = NULL; | 1444 texture_ref2 = NULL; |
| 1114 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1445 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1115 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1446 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1116 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) | 1447 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService3Id))) |
| 1117 .Times(1) | 1448 .Times(1) |
| 1118 .RetiresOnSaturation(); | 1449 .RetiresOnSaturation(); |
| 1119 texture_ref3 = NULL; | 1450 texture_ref3 = NULL; |
| 1120 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1451 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1121 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1452 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1122 } | 1453 } |
| 1123 | 1454 |
| 1124 TEST_F(TextureTest, ClearTexture) { | 1455 TEST_F(TextureTest, ClearTexture) { |
| 1125 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) | 1456 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) |
| 1126 .WillRepeatedly(Return(true)); | 1457 .WillRepeatedly(Return(true)); |
| 1127 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1458 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1128 manager_->SetLevelInfo(texture_ref_, | 1459 manager_->SetLevelInfo(texture_ref_.get(), |
| 1129 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1460 GL_TEXTURE_2D, |
| 1130 manager_->SetLevelInfo(texture_ref_, | 1461 0, |
| 1131 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1462 GL_RGBA, |
| 1463 4, |
| 1464 4, |
| 1465 1, |
| 1466 0, |
| 1467 GL_RGBA, |
| 1468 GL_UNSIGNED_BYTE, |
| 1469 false); |
| 1470 manager_->SetLevelInfo(texture_ref_.get(), |
| 1471 GL_TEXTURE_2D, |
| 1472 1, |
| 1473 GL_RGBA, |
| 1474 4, |
| 1475 4, |
| 1476 1, |
| 1477 0, |
| 1478 GL_RGBA, |
| 1479 GL_UNSIGNED_BYTE, |
| 1480 false); |
| 1132 Texture* texture = texture_ref_->texture(); | 1481 Texture* texture = texture_ref_->texture(); |
| 1133 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1482 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1134 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1483 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1135 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1484 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1136 EXPECT_EQ(2, texture->num_uncleared_mips()); | 1485 EXPECT_EQ(2, texture->num_uncleared_mips()); |
| 1137 manager_->ClearRenderableLevels(decoder_.get(), texture_ref_); | 1486 manager_->ClearRenderableLevels(decoder_.get(), texture_ref_.get()); |
| 1138 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1487 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1139 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1488 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1140 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1489 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1141 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1490 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1142 manager_->SetLevelInfo(texture_ref_, | 1491 manager_->SetLevelInfo(texture_ref_.get(), |
| 1143 GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1492 GL_TEXTURE_2D, |
| 1144 manager_->SetLevelInfo(texture_ref_, | 1493 0, |
| 1145 GL_TEXTURE_2D, 1, GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1494 GL_RGBA, |
| 1495 4, |
| 1496 4, |
| 1497 1, |
| 1498 0, |
| 1499 GL_RGBA, |
| 1500 GL_UNSIGNED_BYTE, |
| 1501 false); |
| 1502 manager_->SetLevelInfo(texture_ref_.get(), |
| 1503 GL_TEXTURE_2D, |
| 1504 1, |
| 1505 GL_RGBA, |
| 1506 4, |
| 1507 4, |
| 1508 1, |
| 1509 0, |
| 1510 GL_RGBA, |
| 1511 GL_UNSIGNED_BYTE, |
| 1512 false); |
| 1146 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1513 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1147 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1514 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1148 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1515 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1149 EXPECT_EQ(2, texture->num_uncleared_mips()); | 1516 EXPECT_EQ(2, texture->num_uncleared_mips()); |
| 1150 manager_->ClearTextureLevel(decoder_.get(), texture_ref_, GL_TEXTURE_2D, 0); | 1517 manager_->ClearTextureLevel( |
| 1518 decoder_.get(), texture_ref_.get(), GL_TEXTURE_2D, 0); |
| 1151 EXPECT_FALSE(texture->SafeToRenderFrom()); | 1519 EXPECT_FALSE(texture->SafeToRenderFrom()); |
| 1152 EXPECT_TRUE(manager_->HaveUnsafeTextures()); | 1520 EXPECT_TRUE(manager_->HaveUnsafeTextures()); |
| 1153 EXPECT_TRUE(manager_->HaveUnclearedMips()); | 1521 EXPECT_TRUE(manager_->HaveUnclearedMips()); |
| 1154 EXPECT_EQ(1, texture->num_uncleared_mips()); | 1522 EXPECT_EQ(1, texture->num_uncleared_mips()); |
| 1155 manager_->ClearTextureLevel(decoder_.get(), texture_ref_, GL_TEXTURE_2D, 1); | 1523 manager_->ClearTextureLevel( |
| 1524 decoder_.get(), texture_ref_.get(), GL_TEXTURE_2D, 1); |
| 1156 EXPECT_TRUE(texture->SafeToRenderFrom()); | 1525 EXPECT_TRUE(texture->SafeToRenderFrom()); |
| 1157 EXPECT_FALSE(manager_->HaveUnsafeTextures()); | 1526 EXPECT_FALSE(manager_->HaveUnsafeTextures()); |
| 1158 EXPECT_FALSE(manager_->HaveUnclearedMips()); | 1527 EXPECT_FALSE(manager_->HaveUnclearedMips()); |
| 1159 EXPECT_EQ(0, texture->num_uncleared_mips()); | 1528 EXPECT_EQ(0, texture->num_uncleared_mips()); |
| 1160 } | 1529 } |
| 1161 | 1530 |
| 1162 TEST_F(TextureTest, UseDeletedTexture) { | 1531 TEST_F(TextureTest, UseDeletedTexture) { |
| 1163 static const GLuint kClient2Id = 2; | 1532 static const GLuint kClient2Id = 2; |
| 1164 static const GLuint kService2Id = 12; | 1533 static const GLuint kService2Id = 12; |
| 1165 // Make the default texture renderable | 1534 // Make the default texture renderable |
| 1166 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1535 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1167 manager_->SetLevelInfo(texture_ref_, | 1536 manager_->SetLevelInfo(texture_ref_.get(), |
| 1168 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1537 GL_TEXTURE_2D, |
| 1538 0, |
| 1539 GL_RGBA, |
| 1540 1, |
| 1541 1, |
| 1542 1, |
| 1543 0, |
| 1544 GL_RGBA, |
| 1545 GL_UNSIGNED_BYTE, |
| 1546 false); |
| 1169 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1547 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 1170 // Make a new texture | 1548 // Make a new texture |
| 1171 manager_->CreateTexture(kClient2Id, kService2Id); | 1549 manager_->CreateTexture(kClient2Id, kService2Id); |
| 1172 scoped_refptr<TextureRef> texture_ref( | 1550 scoped_refptr<TextureRef> texture_ref( |
| 1173 manager_->GetTexture(kClient2Id)); | 1551 manager_->GetTexture(kClient2Id)); |
| 1174 manager_->SetTarget(texture_ref, GL_TEXTURE_2D); | 1552 manager_->SetTarget(texture_ref.get(), GL_TEXTURE_2D); |
| 1175 EXPECT_FALSE(manager_->CanRender(texture_ref)); | 1553 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
| 1176 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1554 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 1177 // Remove it. | 1555 // Remove it. |
| 1178 manager_->RemoveTexture(kClient2Id); | 1556 manager_->RemoveTexture(kClient2Id); |
| 1179 EXPECT_FALSE(manager_->CanRender(texture_ref)); | 1557 EXPECT_FALSE(manager_->CanRender(texture_ref.get())); |
| 1180 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); | 1558 EXPECT_TRUE(manager_->HaveUnrenderableTextures()); |
| 1181 // Check that we can still manipulate it and it effects the manager. | 1559 // Check that we can still manipulate it and it effects the manager. |
| 1182 manager_->SetLevelInfo(texture_ref, | 1560 manager_->SetLevelInfo(texture_ref.get(), |
| 1183 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1561 GL_TEXTURE_2D, |
| 1184 EXPECT_TRUE(manager_->CanRender(texture_ref)); | 1562 0, |
| 1563 GL_RGBA, |
| 1564 1, |
| 1565 1, |
| 1566 1, |
| 1567 0, |
| 1568 GL_RGBA, |
| 1569 GL_UNSIGNED_BYTE, |
| 1570 false); |
| 1571 EXPECT_TRUE(manager_->CanRender(texture_ref.get())); |
| 1185 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); | 1572 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); |
| 1186 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) | 1573 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService2Id))) |
| 1187 .Times(1) | 1574 .Times(1) |
| 1188 .RetiresOnSaturation(); | 1575 .RetiresOnSaturation(); |
| 1189 texture_ref = NULL; | 1576 texture_ref = NULL; |
| 1190 } | 1577 } |
| 1191 | 1578 |
| 1192 TEST_F(TextureTest, GetLevelImage) { | 1579 TEST_F(TextureTest, GetLevelImage) { |
| 1193 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1580 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1194 manager_->SetLevelInfo(texture_ref_, | 1581 manager_->SetLevelInfo(texture_ref_.get(), |
| 1195 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1582 GL_TEXTURE_2D, |
| 1583 1, |
| 1584 GL_RGBA, |
| 1585 2, |
| 1586 2, |
| 1587 1, |
| 1588 0, |
| 1589 GL_RGBA, |
| 1590 GL_UNSIGNED_BYTE, |
| 1591 true); |
| 1196 Texture* texture = texture_ref_->texture(); | 1592 Texture* texture = texture_ref_->texture(); |
| 1197 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1593 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1198 // Set image. | 1594 // Set image. |
| 1199 manager_->SetLevelImage(texture_ref_, | 1595 manager_->SetLevelImage( |
| 1200 GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); | 1596 texture_ref_.get(), GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); |
| 1201 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1597 EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1202 // Remove it. | 1598 // Remove it. |
| 1203 manager_->SetLevelImage(texture_ref_, GL_TEXTURE_2D, 1, NULL); | 1599 manager_->SetLevelImage(texture_ref_.get(), GL_TEXTURE_2D, 1, NULL); |
| 1204 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1600 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1205 manager_->SetLevelImage(texture_ref_, | 1601 manager_->SetLevelImage( |
| 1206 GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); | 1602 texture_ref_.get(), GL_TEXTURE_2D, 1, gfx::GLImage::CreateGLImage(0)); |
| 1207 // Image should be reset when SetLevelInfo is called. | 1603 // Image should be reset when SetLevelInfo is called. |
| 1208 manager_->SetLevelInfo(texture_ref_, | 1604 manager_->SetLevelInfo(texture_ref_.get(), |
| 1209 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1605 GL_TEXTURE_2D, |
| 1606 1, |
| 1607 GL_RGBA, |
| 1608 2, |
| 1609 2, |
| 1610 1, |
| 1611 0, |
| 1612 GL_RGBA, |
| 1613 GL_UNSIGNED_BYTE, |
| 1614 true); |
| 1210 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); | 1615 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 1) == NULL); |
| 1211 } | 1616 } |
| 1212 | 1617 |
| 1213 namespace { | 1618 namespace { |
| 1214 | 1619 |
| 1215 bool InSet(std::set<std::string>* string_set, const std::string& str) { | 1620 bool InSet(std::set<std::string>* string_set, const std::string& str) { |
| 1216 std::pair<std::set<std::string>::iterator, bool> result = | 1621 std::pair<std::set<std::string>::iterator, bool> result = |
| 1217 string_set->insert(str); | 1622 string_set->insert(str); |
| 1218 return !result.second; | 1623 return !result.second; |
| 1219 } | 1624 } |
| 1220 | 1625 |
| 1221 } // anonymous namespace | 1626 } // anonymous namespace |
| 1222 | 1627 |
| 1223 TEST_F(TextureTest, AddToSignature) { | 1628 TEST_F(TextureTest, AddToSignature) { |
| 1224 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1629 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1225 manager_->SetLevelInfo(texture_ref_, | 1630 manager_->SetLevelInfo(texture_ref_.get(), |
| 1226 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1631 GL_TEXTURE_2D, |
| 1632 1, |
| 1633 GL_RGBA, |
| 1634 2, |
| 1635 2, |
| 1636 1, |
| 1637 0, |
| 1638 GL_RGBA, |
| 1639 GL_UNSIGNED_BYTE, |
| 1640 true); |
| 1227 std::string signature1; | 1641 std::string signature1; |
| 1228 std::string signature2; | 1642 std::string signature2; |
| 1229 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature1); | 1643 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature1); |
| 1230 | 1644 |
| 1231 std::set<std::string> string_set; | 1645 std::set<std::string> string_set; |
| 1232 EXPECT_FALSE(InSet(&string_set, signature1)); | 1646 EXPECT_FALSE(InSet(&string_set, signature1)); |
| 1233 | 1647 |
| 1234 // check changing 1 thing makes a different signature. | 1648 // check changing 1 thing makes a different signature. |
| 1235 manager_->SetLevelInfo(texture_ref_, | 1649 manager_->SetLevelInfo(texture_ref_.get(), |
| 1236 GL_TEXTURE_2D, 1, GL_RGBA, 4, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1650 GL_TEXTURE_2D, |
| 1237 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1651 1, |
| 1652 GL_RGBA, |
| 1653 4, |
| 1654 2, |
| 1655 1, |
| 1656 0, |
| 1657 GL_RGBA, |
| 1658 GL_UNSIGNED_BYTE, |
| 1659 true); |
| 1660 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1238 EXPECT_FALSE(InSet(&string_set, signature2)); | 1661 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1239 | 1662 |
| 1240 // check putting it back makes the same signature. | 1663 // check putting it back makes the same signature. |
| 1241 manager_->SetLevelInfo(texture_ref_, | 1664 manager_->SetLevelInfo(texture_ref_.get(), |
| 1242 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, true); | 1665 GL_TEXTURE_2D, |
| 1243 signature2.clear(); | 1666 1, |
| 1244 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1667 GL_RGBA, |
| 1668 2, |
| 1669 2, |
| 1670 1, |
| 1671 0, |
| 1672 GL_RGBA, |
| 1673 GL_UNSIGNED_BYTE, |
| 1674 true); |
| 1675 signature2.clear(); |
| 1676 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1245 EXPECT_EQ(signature1, signature2); | 1677 EXPECT_EQ(signature1, signature2); |
| 1246 | 1678 |
| 1247 // Check setting cleared status does not change signature. | 1679 // Check setting cleared status does not change signature. |
| 1248 manager_->SetLevelInfo(texture_ref_, | 1680 manager_->SetLevelInfo(texture_ref_.get(), |
| 1249 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1681 GL_TEXTURE_2D, |
| 1250 signature2.clear(); | 1682 1, |
| 1251 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1683 GL_RGBA, |
| 1684 2, |
| 1685 2, |
| 1686 1, |
| 1687 0, |
| 1688 GL_RGBA, |
| 1689 GL_UNSIGNED_BYTE, |
| 1690 false); |
| 1691 signature2.clear(); |
| 1692 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1252 EXPECT_EQ(signature1, signature2); | 1693 EXPECT_EQ(signature1, signature2); |
| 1253 | 1694 |
| 1254 // Check changing other settings changes signature. | 1695 // Check changing other settings changes signature. |
| 1255 manager_->SetLevelInfo(texture_ref_, | 1696 manager_->SetLevelInfo(texture_ref_.get(), |
| 1256 GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1697 GL_TEXTURE_2D, |
| 1257 signature2.clear(); | 1698 1, |
| 1258 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1699 GL_RGBA, |
| 1259 EXPECT_FALSE(InSet(&string_set, signature2)); | 1700 2, |
| 1260 | 1701 4, |
| 1261 manager_->SetLevelInfo(texture_ref_, | 1702 1, |
| 1262 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1703 0, |
| 1263 signature2.clear(); | 1704 GL_RGBA, |
| 1264 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1705 GL_UNSIGNED_BYTE, |
| 1265 EXPECT_FALSE(InSet(&string_set, signature2)); | 1706 false); |
| 1266 | 1707 signature2.clear(); |
| 1267 manager_->SetLevelInfo(texture_ref_, | 1708 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1268 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, false); | 1709 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1269 signature2.clear(); | 1710 |
| 1270 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1711 manager_->SetLevelInfo(texture_ref_.get(), |
| 1271 EXPECT_FALSE(InSet(&string_set, signature2)); | 1712 GL_TEXTURE_2D, |
| 1272 | 1713 1, |
| 1273 manager_->SetLevelInfo(texture_ref_, | 1714 GL_RGBA, |
| 1274 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, false); | 1715 2, |
| 1275 signature2.clear(); | 1716 2, |
| 1276 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1717 2, |
| 1277 EXPECT_FALSE(InSet(&string_set, signature2)); | 1718 0, |
| 1278 | 1719 GL_RGBA, |
| 1279 manager_->SetLevelInfo(texture_ref_, | 1720 GL_UNSIGNED_BYTE, |
| 1280 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_FLOAT, | 1721 false); |
| 1281 false); | 1722 signature2.clear(); |
| 1282 signature2.clear(); | 1723 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1283 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1724 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1725 |
| 1726 manager_->SetLevelInfo(texture_ref_.get(), |
| 1727 GL_TEXTURE_2D, |
| 1728 1, |
| 1729 GL_RGBA, |
| 1730 2, |
| 1731 2, |
| 1732 1, |
| 1733 1, |
| 1734 GL_RGBA, |
| 1735 GL_UNSIGNED_BYTE, |
| 1736 false); |
| 1737 signature2.clear(); |
| 1738 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1739 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1740 |
| 1741 manager_->SetLevelInfo(texture_ref_.get(), |
| 1742 GL_TEXTURE_2D, |
| 1743 1, |
| 1744 GL_RGBA, |
| 1745 2, |
| 1746 2, |
| 1747 1, |
| 1748 0, |
| 1749 GL_RGB, |
| 1750 GL_UNSIGNED_BYTE, |
| 1751 false); |
| 1752 signature2.clear(); |
| 1753 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1754 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1755 |
| 1756 manager_->SetLevelInfo(texture_ref_.get(), |
| 1757 GL_TEXTURE_2D, |
| 1758 1, |
| 1759 GL_RGBA, |
| 1760 2, |
| 1761 2, |
| 1762 1, |
| 1763 0, |
| 1764 GL_RGBA, |
| 1765 GL_FLOAT, |
| 1766 false); |
| 1767 signature2.clear(); |
| 1768 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1284 EXPECT_FALSE(InSet(&string_set, signature2)); | 1769 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1285 | 1770 |
| 1286 // put it back | 1771 // put it back |
| 1287 manager_->SetLevelInfo(texture_ref_, | 1772 manager_->SetLevelInfo(texture_ref_.get(), |
| 1288 GL_TEXTURE_2D, 1, GL_RGBA, 2, 2, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 1773 GL_TEXTURE_2D, |
| 1289 false); | 1774 1, |
| 1290 signature2.clear(); | 1775 GL_RGBA, |
| 1291 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1776 2, |
| 1777 2, |
| 1778 1, |
| 1779 0, |
| 1780 GL_RGBA, |
| 1781 GL_UNSIGNED_BYTE, |
| 1782 false); |
| 1783 signature2.clear(); |
| 1784 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1292 EXPECT_EQ(signature1, signature2); | 1785 EXPECT_EQ(signature1, signature2); |
| 1293 | 1786 |
| 1294 // check changing parameters changes signature. | 1787 // check changing parameters changes signature. |
| 1295 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); | 1788 SetParameter( |
| 1296 signature2.clear(); | 1789 texture_ref_.get(), GL_TEXTURE_MIN_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 1297 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1790 signature2.clear(); |
| 1298 EXPECT_FALSE(InSet(&string_set, signature2)); | 1791 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1299 | 1792 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1300 SetParameter(texture_ref_, GL_TEXTURE_MIN_FILTER, | 1793 |
| 1301 GL_NEAREST_MIPMAP_LINEAR, GL_NO_ERROR); | 1794 SetParameter(texture_ref_.get(), |
| 1302 SetParameter(texture_ref_, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); | 1795 GL_TEXTURE_MIN_FILTER, |
| 1303 signature2.clear(); | 1796 GL_NEAREST_MIPMAP_LINEAR, |
| 1304 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1797 GL_NO_ERROR); |
| 1305 EXPECT_FALSE(InSet(&string_set, signature2)); | 1798 SetParameter( |
| 1306 | 1799 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); |
| 1307 SetParameter(texture_ref_, GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); | 1800 signature2.clear(); |
| 1308 SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 1801 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1309 signature2.clear(); | 1802 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1310 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1803 |
| 1311 EXPECT_FALSE(InSet(&string_set, signature2)); | 1804 SetParameter( |
| 1312 | 1805 texture_ref_.get(), GL_TEXTURE_MAG_FILTER, GL_LINEAR, GL_NO_ERROR); |
| 1313 SetParameter(texture_ref_, GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR); | 1806 SetParameter( |
| 1314 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); | 1807 texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 1315 signature2.clear(); | 1808 signature2.clear(); |
| 1316 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1809 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1810 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1811 |
| 1812 SetParameter(texture_ref_.get(), GL_TEXTURE_WRAP_S, GL_REPEAT, GL_NO_ERROR); |
| 1813 SetParameter( |
| 1814 texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE, GL_NO_ERROR); |
| 1815 signature2.clear(); |
| 1816 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1317 EXPECT_FALSE(InSet(&string_set, signature2)); | 1817 EXPECT_FALSE(InSet(&string_set, signature2)); |
| 1318 | 1818 |
| 1319 // Check putting it back genenerates the same signature | 1819 // Check putting it back genenerates the same signature |
| 1320 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR); | 1820 SetParameter(texture_ref_.get(), GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR); |
| 1321 signature2.clear(); | 1821 signature2.clear(); |
| 1322 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); | 1822 manager_->AddToSignature(texture_ref_.get(), GL_TEXTURE_2D, 1, &signature2); |
| 1323 EXPECT_EQ(signature1, signature2); | 1823 EXPECT_EQ(signature1, signature2); |
| 1324 | 1824 |
| 1325 // Check the set was acutally getting different signatures. | 1825 // Check the set was acutally getting different signatures. |
| 1326 EXPECT_EQ(11u, string_set.size()); | 1826 EXPECT_EQ(11u, string_set.size()); |
| 1327 } | 1827 } |
| 1328 | 1828 |
| 1329 class ProduceConsumeTextureTest : public TextureTest { | 1829 class ProduceConsumeTextureTest : public TextureTest { |
| 1330 public: | 1830 public: |
| 1331 virtual void SetUp() { | 1831 virtual void SetUp() { |
| 1332 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external"); | 1832 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external"); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1443 | 1943 |
| 1444 private: | 1944 private: |
| 1445 static const GLuint kClient2Id; | 1945 static const GLuint kClient2Id; |
| 1446 static const GLuint kService2Id; | 1946 static const GLuint kService2Id; |
| 1447 }; | 1947 }; |
| 1448 | 1948 |
| 1449 const GLuint ProduceConsumeTextureTest::kClient2Id = 2; | 1949 const GLuint ProduceConsumeTextureTest::kClient2Id = 2; |
| 1450 const GLuint ProduceConsumeTextureTest::kService2Id = 12; | 1950 const GLuint ProduceConsumeTextureTest::kService2Id = 12; |
| 1451 | 1951 |
| 1452 TEST_F(ProduceConsumeTextureTest, ProduceConsume2D) { | 1952 TEST_F(ProduceConsumeTextureTest, ProduceConsume2D) { |
| 1453 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); | 1953 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D); |
| 1454 Texture* texture = texture_ref_->texture(); | 1954 Texture* texture = texture_ref_->texture(); |
| 1455 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); | 1955 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); |
| 1456 LevelInfo level0( | 1956 LevelInfo level0( |
| 1457 GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true); | 1957 GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true); |
| 1458 SetLevelInfo(texture_ref_, 0, level0); | 1958 SetLevelInfo(texture_ref_.get(), 0, level0); |
| 1459 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); | 1959 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_.get())); |
| 1460 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1960 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1461 LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1); | 1961 LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1); |
| 1462 LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2); | 1962 LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2); |
| 1463 Texture* produced_texture = Produce(texture_ref_); | 1963 Texture* produced_texture = Produce(texture_ref_.get()); |
| 1464 EXPECT_EQ(produced_texture, texture); | 1964 EXPECT_EQ(produced_texture, texture); |
| 1465 | 1965 |
| 1466 // Make this texture bigger with more levels, and make sure they get | 1966 // Make this texture bigger with more levels, and make sure they get |
| 1467 // clobbered correctly during Consume(). | 1967 // clobbered correctly during Consume(). |
| 1468 manager_->SetTarget(texture2_, GL_TEXTURE_2D); | 1968 manager_->SetTarget(texture2_.get(), GL_TEXTURE_2D); |
| 1469 SetLevelInfo( | 1969 SetLevelInfo( |
| 1470 texture2_, | 1970 texture2_.get(), |
| 1471 0, | 1971 0, |
| 1472 LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false)); | 1972 LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false)); |
| 1473 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_)); | 1973 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_.get())); |
| 1474 texture = texture2_->texture(); | 1974 texture = texture2_->texture(); |
| 1475 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 1975 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1476 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size()); | 1976 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size()); |
| 1477 | 1977 |
| 1478 GLuint client_id = texture2_->client_id(); | 1978 GLuint client_id = texture2_->client_id(); |
| 1479 manager_->RemoveTexture(client_id); | 1979 manager_->RemoveTexture(client_id); |
| 1480 Consume(client_id, produced_texture); | 1980 Consume(client_id, produced_texture); |
| 1481 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 1981 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
| 1482 EXPECT_EQ(produced_texture, restored_texture->texture()); | 1982 EXPECT_EQ(produced_texture, restored_texture->texture()); |
| 1483 EXPECT_EQ(level0, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 0)); | 1983 EXPECT_EQ(level0, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 0)); |
| 1484 EXPECT_EQ(level1, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 1)); | 1984 EXPECT_EQ(level1, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 1)); |
| 1485 EXPECT_EQ(level2, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 2)); | 1985 EXPECT_EQ(level2, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 2)); |
| 1486 texture = restored_texture->texture(); | 1986 texture = restored_texture->texture(); |
| 1487 EXPECT_EQ(64U + 16U + 4U, texture->estimated_size()); | 1987 EXPECT_EQ(64U + 16U + 4U, texture->estimated_size()); |
| 1488 GLint w, h; | 1988 GLint w, h; |
| 1489 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h)); | 1989 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h)); |
| 1490 | 1990 |
| 1491 // However the old texture ref still exists if it was referenced somewhere. | 1991 // However the old texture ref still exists if it was referenced somewhere. |
| 1492 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, | 1992 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, |
| 1493 texture2_->texture()->estimated_size()); | 1993 texture2_->texture()->estimated_size()); |
| 1494 } | 1994 } |
| 1495 | 1995 |
| 1496 TEST_F(ProduceConsumeTextureTest, ProduceConsumeClearRectangle) { | 1996 TEST_F(ProduceConsumeTextureTest, ProduceConsumeClearRectangle) { |
| 1497 manager_->SetTarget(texture_ref_, GL_TEXTURE_RECTANGLE_ARB); | 1997 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_RECTANGLE_ARB); |
| 1498 Texture* texture = texture_ref_->texture(); | 1998 Texture* texture = texture_ref_->texture(); |
| 1499 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target()); | 1999 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target()); |
| 1500 LevelInfo level0( | 2000 LevelInfo level0( |
| 1501 GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false); | 2001 GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false); |
| 1502 SetLevelInfo(texture_ref_, 0, level0); | 2002 SetLevelInfo(texture_ref_.get(), 0, level0); |
| 1503 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 2003 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1504 Texture* produced_texture = Produce(texture_ref_); | 2004 Texture* produced_texture = Produce(texture_ref_.get()); |
| 1505 EXPECT_EQ(produced_texture, texture); | 2005 EXPECT_EQ(produced_texture, texture); |
| 1506 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), | 2006 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), |
| 1507 produced_texture->target()); | 2007 produced_texture->target()); |
| 1508 | 2008 |
| 1509 GLuint client_id = texture2_->client_id(); | 2009 GLuint client_id = texture2_->client_id(); |
| 1510 manager_->RemoveTexture(client_id); | 2010 manager_->RemoveTexture(client_id); |
| 1511 Consume(client_id, produced_texture); | 2011 Consume(client_id, produced_texture); |
| 1512 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 2012 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
| 1513 EXPECT_EQ(produced_texture, restored_texture->texture()); | 2013 EXPECT_EQ(produced_texture, restored_texture->texture()); |
| 1514 | 2014 |
| 1515 // See if we can clear the previously uncleared level now. | 2015 // See if we can clear the previously uncleared level now. |
| 1516 EXPECT_EQ(level0, | 2016 EXPECT_EQ(level0, |
| 1517 GetLevelInfo(restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); | 2017 GetLevelInfo(restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); |
| 1518 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) | 2018 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) |
| 1519 .WillRepeatedly(Return(true)); | 2019 .WillRepeatedly(Return(true)); |
| 1520 EXPECT_TRUE(manager_->ClearTextureLevel( | 2020 EXPECT_TRUE(manager_->ClearTextureLevel( |
| 1521 decoder_.get(), restored_texture, GL_TEXTURE_RECTANGLE_ARB, 0)); | 2021 decoder_.get(), restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); |
| 1522 } | 2022 } |
| 1523 | 2023 |
| 1524 TEST_F(ProduceConsumeTextureTest, ProduceConsumeStreamTexture) { | 2024 TEST_F(ProduceConsumeTextureTest, ProduceConsumeStreamTexture) { |
| 1525 manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES); | 2025 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES); |
| 1526 Texture* texture = texture_ref_->texture(); | 2026 Texture* texture = texture_ref_->texture(); |
| 1527 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); | 2027 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); |
| 1528 manager_->SetStreamTexture(texture_ref_, true); | 2028 manager_->SetStreamTexture(texture_ref_.get(), true); |
| 1529 GLuint service_id = texture->service_id(); | 2029 GLuint service_id = texture->service_id(); |
| 1530 Texture* produced_texture = Produce(texture_ref_); | 2030 Texture* produced_texture = Produce(texture_ref_.get()); |
| 1531 EXPECT_TRUE(texture->IsStreamTexture()); | 2031 EXPECT_TRUE(texture->IsStreamTexture()); |
| 1532 | 2032 |
| 1533 GLuint client_id = texture2_->client_id(); | 2033 GLuint client_id = texture2_->client_id(); |
| 1534 manager_->RemoveTexture(client_id); | 2034 manager_->RemoveTexture(client_id); |
| 1535 Consume(client_id, produced_texture); | 2035 Consume(client_id, produced_texture); |
| 1536 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 2036 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
| 1537 EXPECT_EQ(produced_texture, restored_texture->texture()); | 2037 EXPECT_EQ(produced_texture, restored_texture->texture()); |
| 1538 EXPECT_TRUE(restored_texture->texture()->IsStreamTexture()); | 2038 EXPECT_TRUE(restored_texture->texture()->IsStreamTexture()); |
| 1539 EXPECT_TRUE(restored_texture->texture()->IsImmutable()); | 2039 EXPECT_TRUE(restored_texture->texture()->IsImmutable()); |
| 1540 EXPECT_EQ(service_id, restored_texture->service_id()); | 2040 EXPECT_EQ(service_id, restored_texture->service_id()); |
| 1541 } | 2041 } |
| 1542 | 2042 |
| 1543 TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) { | 2043 TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) { |
| 1544 manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP); | 2044 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); |
| 1545 Texture* texture = texture_ref_->texture(); | 2045 Texture* texture = texture_ref_->texture(); |
| 1546 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); | 2046 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); |
| 1547 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X, | 2047 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| 1548 GL_RGBA, | 2048 GL_RGBA, |
| 1549 1, | 2049 1, |
| 1550 1, | 2050 1, |
| 1551 1, | 2051 1, |
| 1552 0, | 2052 0, |
| 1553 GL_UNSIGNED_BYTE, | 2053 GL_UNSIGNED_BYTE, |
| 1554 true); | 2054 true); |
| 1555 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 2055 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 1556 GL_RGBA, | 2056 GL_RGBA, |
| 1557 3, | 2057 3, |
| 1558 3, | 2058 3, |
| 1559 1, | 2059 1, |
| 1560 0, | 2060 0, |
| 1561 GL_UNSIGNED_BYTE, | 2061 GL_UNSIGNED_BYTE, |
| 1562 true); | 2062 true); |
| 1563 SetLevelInfo(texture_ref_, 0, face0); | 2063 SetLevelInfo(texture_ref_.get(), 0, face0); |
| 1564 SetLevelInfo(texture_ref_, 0, face5); | 2064 SetLevelInfo(texture_ref_.get(), 0, face5); |
| 1565 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); | 2065 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); |
| 1566 Texture* produced_texture = Produce(texture_ref_); | 2066 Texture* produced_texture = Produce(texture_ref_.get()); |
| 1567 EXPECT_EQ(produced_texture, texture); | 2067 EXPECT_EQ(produced_texture, texture); |
| 1568 | 2068 |
| 1569 GLuint client_id = texture2_->client_id(); | 2069 GLuint client_id = texture2_->client_id(); |
| 1570 manager_->RemoveTexture(client_id); | 2070 manager_->RemoveTexture(client_id); |
| 1571 Consume(client_id, produced_texture); | 2071 Consume(client_id, produced_texture); |
| 1572 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); | 2072 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id); |
| 1573 EXPECT_EQ(produced_texture, restored_texture->texture()); | 2073 EXPECT_EQ(produced_texture, restored_texture->texture()); |
| 1574 EXPECT_EQ(face0, | 2074 EXPECT_EQ( |
| 1575 GetLevelInfo(restored_texture, GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0)); | 2075 face0, |
| 1576 EXPECT_EQ(face5, | 2076 GetLevelInfo(restored_texture.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0)); |
| 1577 GetLevelInfo(restored_texture, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0)); | 2077 EXPECT_EQ( |
| 2078 face5, |
| 2079 GetLevelInfo(restored_texture.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0)); |
| 1578 } | 2080 } |
| 1579 | 2081 |
| 1580 class CountingMemoryTracker : public MemoryTracker { | 2082 class CountingMemoryTracker : public MemoryTracker { |
| 1581 public: | 2083 public: |
| 1582 CountingMemoryTracker() { | 2084 CountingMemoryTracker() { |
| 1583 current_size_[0] = 0; | 2085 current_size_[0] = 0; |
| 1584 current_size_[1] = 0; | 2086 current_size_[1] = 0; |
| 1585 } | 2087 } |
| 1586 | 2088 |
| 1587 virtual void TrackMemoryAllocatedChange(size_t old_size, | 2089 virtual void TrackMemoryAllocatedChange(size_t old_size, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1614 } | 2116 } |
| 1615 | 2117 |
| 1616 virtual ~SharedTextureTest() { | 2118 virtual ~SharedTextureTest() { |
| 1617 } | 2119 } |
| 1618 | 2120 |
| 1619 virtual void SetUp() { | 2121 virtual void SetUp() { |
| 1620 gl_.reset(new ::gfx::MockGLInterface()); | 2122 gl_.reset(new ::gfx::MockGLInterface()); |
| 1621 ::gfx::GLInterface::SetGLInterface(gl_.get()); | 2123 ::gfx::GLInterface::SetGLInterface(gl_.get()); |
| 1622 | 2124 |
| 1623 memory_tracker1_ = new CountingMemoryTracker; | 2125 memory_tracker1_ = new CountingMemoryTracker; |
| 1624 texture_manager1_.reset(new TextureManager( | 2126 texture_manager1_.reset( |
| 1625 memory_tracker1_, feature_info_.get(), | 2127 new TextureManager(memory_tracker1_.get(), |
| 1626 TextureManagerTest::kMaxTextureSize, | 2128 feature_info_.get(), |
| 1627 TextureManagerTest::kMaxCubeMapTextureSize)); | 2129 TextureManagerTest::kMaxTextureSize, |
| 2130 TextureManagerTest::kMaxCubeMapTextureSize)); |
| 1628 memory_tracker2_ = new CountingMemoryTracker; | 2131 memory_tracker2_ = new CountingMemoryTracker; |
| 1629 texture_manager2_.reset(new TextureManager( | 2132 texture_manager2_.reset( |
| 1630 memory_tracker2_, feature_info_.get(), | 2133 new TextureManager(memory_tracker2_.get(), |
| 1631 TextureManagerTest::kMaxTextureSize, | 2134 feature_info_.get(), |
| 1632 TextureManagerTest::kMaxCubeMapTextureSize)); | 2135 TextureManagerTest::kMaxTextureSize, |
| 2136 TextureManagerTest::kMaxCubeMapTextureSize)); |
| 1633 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 2137 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); |
| 1634 texture_manager1_->Initialize(); | 2138 texture_manager1_->Initialize(); |
| 1635 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); | 2139 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), ""); |
| 1636 texture_manager2_->Initialize(); | 2140 texture_manager2_->Initialize(); |
| 1637 } | 2141 } |
| 1638 | 2142 |
| 1639 virtual void TearDown() { | 2143 virtual void TearDown() { |
| 1640 texture_manager2_->Destroy(false); | 2144 texture_manager2_->Destroy(false); |
| 1641 texture_manager2_.reset(); | 2145 texture_manager2_.reset(); |
| 1642 texture_manager1_->Destroy(false); | 2146 texture_manager1_->Destroy(false); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1689 // Associate new texture ref to other texture manager, should account for it | 2193 // Associate new texture ref to other texture manager, should account for it |
| 1690 // too. | 2194 // too. |
| 1691 scoped_refptr<TextureRef> ref2 = | 2195 scoped_refptr<TextureRef> ref2 = |
| 1692 texture_manager2_->Consume(20, ref1->texture()); | 2196 texture_manager2_->Consume(20, ref1->texture()); |
| 1693 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); | 2197 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); |
| 1694 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2198 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
| 1695 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2199 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
| 1696 | 2200 |
| 1697 // Make texture renderable but uncleared on one texture manager, should affect | 2201 // Make texture renderable but uncleared on one texture manager, should affect |
| 1698 // other one. | 2202 // other one. |
| 1699 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D); | 2203 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
| 1700 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures()); | 2204 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures()); |
| 1701 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 2205 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
| 1702 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 2206 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
| 1703 EXPECT_TRUE(texture_manager2_->HaveUnrenderableTextures()); | 2207 EXPECT_TRUE(texture_manager2_->HaveUnrenderableTextures()); |
| 1704 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2208 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
| 1705 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2209 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
| 1706 | 2210 |
| 1707 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 2211 texture_manager1_->SetLevelInfo(ref1.get(), |
| 1708 GL_RGBA, GL_UNSIGNED_BYTE, false); | 2212 GL_TEXTURE_2D, |
| 2213 0, |
| 2214 GL_RGBA, |
| 2215 1, |
| 2216 1, |
| 2217 1, |
| 2218 0, |
| 2219 GL_RGBA, |
| 2220 GL_UNSIGNED_BYTE, |
| 2221 false); |
| 1709 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); | 2222 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); |
| 1710 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); | 2223 EXPECT_TRUE(texture_manager1_->HaveUnsafeTextures()); |
| 1711 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); | 2224 EXPECT_TRUE(texture_manager1_->HaveUnclearedMips()); |
| 1712 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); | 2225 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); |
| 1713 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); | 2226 EXPECT_TRUE(texture_manager2_->HaveUnsafeTextures()); |
| 1714 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); | 2227 EXPECT_TRUE(texture_manager2_->HaveUnclearedMips()); |
| 1715 | 2228 |
| 1716 // Make texture cleared on one texture manager, should affect other one. | 2229 // Make texture cleared on one texture manager, should affect other one. |
| 1717 texture_manager1_->SetLevelCleared(ref1, GL_TEXTURE_2D, 0, true); | 2230 texture_manager1_->SetLevelCleared(ref1.get(), GL_TEXTURE_2D, 0, true); |
| 1718 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); | 2231 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); |
| 1719 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); | 2232 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); |
| 1720 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); | 2233 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); |
| 1721 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); | 2234 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); |
| 1722 | 2235 |
| 1723 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 2236 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
| 1724 .Times(1) | 2237 .Times(1) |
| 1725 .RetiresOnSaturation(); | 2238 .RetiresOnSaturation(); |
| 1726 texture_manager1_->RemoveTexture(10); | 2239 texture_manager1_->RemoveTexture(10); |
| 1727 texture_manager2_->RemoveTexture(20); | 2240 texture_manager2_->RemoveTexture(20); |
| 1728 } | 2241 } |
| 1729 | 2242 |
| 1730 TEST_F(SharedTextureTest, FBOCompletenessCheck) { | 2243 TEST_F(SharedTextureTest, FBOCompletenessCheck) { |
| 1731 const GLenum kCompleteValue = GL_FRAMEBUFFER_COMPLETE; | 2244 const GLenum kCompleteValue = GL_FRAMEBUFFER_COMPLETE; |
| 1732 FramebufferManager framebuffer_manager1(1, 1); | 2245 FramebufferManager framebuffer_manager1(1, 1); |
| 1733 texture_manager1_->set_framebuffer_manager(&framebuffer_manager1); | 2246 texture_manager1_->set_framebuffer_manager(&framebuffer_manager1); |
| 1734 FramebufferManager framebuffer_manager2(1, 1); | 2247 FramebufferManager framebuffer_manager2(1, 1); |
| 1735 texture_manager2_->set_framebuffer_manager(&framebuffer_manager2); | 2248 texture_manager2_->set_framebuffer_manager(&framebuffer_manager2); |
| 1736 | 2249 |
| 1737 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 2250 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
| 1738 framebuffer_manager1.CreateFramebuffer(10, 10); | 2251 framebuffer_manager1.CreateFramebuffer(10, 10); |
| 1739 scoped_refptr<Framebuffer> framebuffer1 = | 2252 scoped_refptr<Framebuffer> framebuffer1 = |
| 1740 framebuffer_manager1.GetFramebuffer(10); | 2253 framebuffer_manager1.GetFramebuffer(10); |
| 1741 framebuffer1->AttachTexture(GL_COLOR_ATTACHMENT0, ref1, GL_TEXTURE_2D, 0); | 2254 framebuffer1->AttachTexture( |
| 1742 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1)); | 2255 GL_COLOR_ATTACHMENT0, ref1.get(), GL_TEXTURE_2D, 0); |
| 2256 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
| 1743 EXPECT_NE(kCompleteValue, framebuffer1->IsPossiblyComplete()); | 2257 EXPECT_NE(kCompleteValue, framebuffer1->IsPossiblyComplete()); |
| 1744 | 2258 |
| 1745 // Make FBO complete in manager 1. | 2259 // Make FBO complete in manager 1. |
| 1746 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D); | 2260 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
| 1747 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 2261 texture_manager1_->SetLevelInfo(ref1.get(), |
| 1748 GL_RGBA, GL_UNSIGNED_BYTE, true); | 2262 GL_TEXTURE_2D, |
| 2263 0, |
| 2264 GL_RGBA, |
| 2265 1, |
| 2266 1, |
| 2267 1, |
| 2268 0, |
| 2269 GL_RGBA, |
| 2270 GL_UNSIGNED_BYTE, |
| 2271 true); |
| 1749 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); | 2272 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); |
| 1750 framebuffer_manager1.MarkAsComplete(framebuffer1); | 2273 framebuffer_manager1.MarkAsComplete(framebuffer1.get()); |
| 1751 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1)); | 2274 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
| 1752 | 2275 |
| 1753 // Share texture with manager 2. | 2276 // Share texture with manager 2. |
| 1754 scoped_refptr<TextureRef> ref2 = | 2277 scoped_refptr<TextureRef> ref2 = |
| 1755 texture_manager2_->Consume(20, ref1->texture()); | 2278 texture_manager2_->Consume(20, ref1->texture()); |
| 1756 framebuffer_manager2.CreateFramebuffer(20, 20); | 2279 framebuffer_manager2.CreateFramebuffer(20, 20); |
| 1757 scoped_refptr<Framebuffer> framebuffer2 = | 2280 scoped_refptr<Framebuffer> framebuffer2 = |
| 1758 framebuffer_manager2.GetFramebuffer(20); | 2281 framebuffer_manager2.GetFramebuffer(20); |
| 1759 framebuffer2->AttachTexture(GL_COLOR_ATTACHMENT0, ref2, GL_TEXTURE_2D, 0); | 2282 framebuffer2->AttachTexture( |
| 1760 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2)); | 2283 GL_COLOR_ATTACHMENT0, ref2.get(), GL_TEXTURE_2D, 0); |
| 2284 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
| 1761 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); | 2285 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); |
| 1762 framebuffer_manager2.MarkAsComplete(framebuffer2); | 2286 framebuffer_manager2.MarkAsComplete(framebuffer2.get()); |
| 1763 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2)); | 2287 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
| 1764 | 2288 |
| 1765 // Change level for texture, both FBOs should be marked incomplete | 2289 // Change level for texture, both FBOs should be marked incomplete |
| 1766 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, | 2290 texture_manager1_->SetLevelInfo(ref1.get(), |
| 1767 GL_RGBA, GL_UNSIGNED_BYTE, true); | 2291 GL_TEXTURE_2D, |
| 1768 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1)); | 2292 0, |
| 2293 GL_RGBA, |
| 2294 1, |
| 2295 1, |
| 2296 1, |
| 2297 0, |
| 2298 GL_RGBA, |
| 2299 GL_UNSIGNED_BYTE, |
| 2300 true); |
| 2301 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
| 1769 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); | 2302 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); |
| 1770 framebuffer_manager1.MarkAsComplete(framebuffer1); | 2303 framebuffer_manager1.MarkAsComplete(framebuffer1.get()); |
| 1771 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1)); | 2304 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1.get())); |
| 1772 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2)); | 2305 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
| 1773 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); | 2306 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); |
| 1774 framebuffer_manager2.MarkAsComplete(framebuffer2); | 2307 framebuffer_manager2.MarkAsComplete(framebuffer2.get()); |
| 1775 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2)); | 2308 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2.get())); |
| 1776 | 2309 |
| 1777 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)) | 2310 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)) |
| 1778 .Times(2) | 2311 .Times(2) |
| 1779 .RetiresOnSaturation(); | 2312 .RetiresOnSaturation(); |
| 1780 framebuffer_manager1.RemoveFramebuffer(10); | 2313 framebuffer_manager1.RemoveFramebuffer(10); |
| 1781 framebuffer_manager2.RemoveFramebuffer(20); | 2314 framebuffer_manager2.RemoveFramebuffer(20); |
| 1782 EXPECT_CALL(*gl_, DeleteTextures(1, _)) | 2315 EXPECT_CALL(*gl_, DeleteTextures(1, _)) |
| 1783 .Times(1) | 2316 .Times(1) |
| 1784 .RetiresOnSaturation(); | 2317 .RetiresOnSaturation(); |
| 1785 texture_manager1_->RemoveTexture(10); | 2318 texture_manager1_->RemoveTexture(10); |
| 1786 texture_manager2_->RemoveTexture(20); | 2319 texture_manager2_->RemoveTexture(20); |
| 1787 } | 2320 } |
| 1788 | 2321 |
| 1789 TEST_F(SharedTextureTest, Memory) { | 2322 TEST_F(SharedTextureTest, Memory) { |
| 1790 size_t initial_memory1 = memory_tracker1_->GetSize(MemoryTracker::kUnmanaged); | 2323 size_t initial_memory1 = memory_tracker1_->GetSize(MemoryTracker::kUnmanaged); |
| 1791 size_t initial_memory2 = memory_tracker2_->GetSize(MemoryTracker::kUnmanaged); | 2324 size_t initial_memory2 = memory_tracker2_->GetSize(MemoryTracker::kUnmanaged); |
| 1792 | 2325 |
| 1793 // Newly created texture is unrenderable. | 2326 // Newly created texture is unrenderable. |
| 1794 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); | 2327 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); |
| 1795 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D); | 2328 texture_manager1_->SetTarget(ref1.get(), GL_TEXTURE_2D); |
| 1796 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 10, 10, 1, 0, | 2329 texture_manager1_->SetLevelInfo(ref1.get(), |
| 1797 GL_RGBA, GL_UNSIGNED_BYTE, false); | 2330 GL_TEXTURE_2D, |
| 2331 0, |
| 2332 GL_RGBA, |
| 2333 10, |
| 2334 10, |
| 2335 1, |
| 2336 0, |
| 2337 GL_RGBA, |
| 2338 GL_UNSIGNED_BYTE, |
| 2339 false); |
| 1798 | 2340 |
| 1799 EXPECT_LT(0u, ref1->texture()->estimated_size()); | 2341 EXPECT_LT(0u, ref1->texture()->estimated_size()); |
| 1800 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), | 2342 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), |
| 1801 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged)); | 2343 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged)); |
| 1802 | 2344 |
| 1803 // Associate new texture ref to other texture manager, it doesn't account for | 2345 // Associate new texture ref to other texture manager, it doesn't account for |
| 1804 // the texture memory, the first memory tracker still has it. | 2346 // the texture memory, the first memory tracker still has it. |
| 1805 scoped_refptr<TextureRef> ref2 = | 2347 scoped_refptr<TextureRef> ref2 = |
| 1806 texture_manager2_->Consume(20, ref1->texture()); | 2348 texture_manager2_->Consume(20, ref1->texture()); |
| 1807 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), | 2349 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1821 .Times(1) | 2363 .Times(1) |
| 1822 .RetiresOnSaturation(); | 2364 .RetiresOnSaturation(); |
| 1823 ref2 = NULL; | 2365 ref2 = NULL; |
| 1824 texture_manager2_->RemoveTexture(20); | 2366 texture_manager2_->RemoveTexture(20); |
| 1825 EXPECT_EQ(initial_memory2, | 2367 EXPECT_EQ(initial_memory2, |
| 1826 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged)); | 2368 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged)); |
| 1827 } | 2369 } |
| 1828 | 2370 |
| 1829 } // namespace gles2 | 2371 } // namespace gles2 |
| 1830 } // namespace gpu | 2372 } // namespace gpu |
| OLD | NEW |