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

Unified Diff: cc/resources/resource_provider.cc

Issue 22529002: [cc] Allow resources and ui resources to specify wrap mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix typo and add asserts Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 6d6ac9d839871002e9facb7e84546a56bd32be29..c899891c51f4bcec14a7e76b170a74e181fc543c 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -57,10 +57,6 @@ unsigned CreateTextureId(WebGraphicsContext3D* context3d) {
GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
GLC(context3d, context3d->texParameteri(
GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
- GLC(context3d, context3d->texParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
- GLC(context3d, context3d->texParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
return texture_id;
}
@@ -87,6 +83,7 @@ ResourceProvider::Resource::Resource()
filter(0),
image_id(0),
texture_pool(0),
+ wrap_mode(0),
hint(TextureUsageAny),
type(static_cast<ResourceType>(0)) {}
@@ -98,6 +95,7 @@ ResourceProvider::Resource::Resource(
GLenum format,
GLenum filter,
GLenum texture_pool,
+ GLint wrap_mode,
TextureUsageHint hint)
: gl_id(texture_id),
gl_pixel_buffer_id(0),
@@ -119,11 +117,18 @@ ResourceProvider::Resource::Resource(
filter(filter),
image_id(0),
texture_pool(texture_pool),
+ wrap_mode(wrap_mode),
hint(hint),
- type(GLTexture) {}
+ type(GLTexture) {
+ DCHECK(wrap_mode == GL_CLAMP_TO_EDGE || wrap_mode == GL_REPEAT);
+}
ResourceProvider::Resource::Resource(
- uint8_t* pixels, gfx::Size size, GLenum format, GLenum filter)
+ uint8_t* pixels,
+ gfx::Size size,
+ GLenum format,
+ GLenum filter,
+ GLint wrap_mode)
: gl_id(0),
gl_pixel_buffer_id(0),
gl_upload_query_id(0),
@@ -144,8 +149,11 @@ ResourceProvider::Resource::Resource(
filter(filter),
image_id(0),
texture_pool(0),
+ wrap_mode(wrap_mode),
hint(TextureUsageAny),
- type(Bitmap) {}
+ type(Bitmap) {
+ DCHECK(wrap_mode == GL_CLAMP_TO_EDGE || wrap_mode == GL_REPEAT);
+}
ResourceProvider::Child::Child() {}
@@ -197,8 +205,8 @@ ResourceProvider::ResourceId ResourceProvider::CreateResource(
DCHECK(!size.IsEmpty());
switch (default_resource_type_) {
case GLTexture:
- return CreateGLTexture(
- size, format, GL_TEXTURE_POOL_UNMANAGED_CHROMIUM, hint);
+ return CreateGLTexture(size, format, GL_TEXTURE_POOL_UNMANAGED_CHROMIUM,
+ GL_CLAMP_TO_EDGE, hint);
case Bitmap:
DCHECK(format == GL_RGBA);
return CreateBitmap(size);
@@ -215,8 +223,8 @@ ResourceProvider::ResourceId ResourceProvider::CreateManagedResource(
DCHECK(!size.IsEmpty());
switch (default_resource_type_) {
case GLTexture:
- return CreateGLTexture(
- size, format, GL_TEXTURE_POOL_MANAGED_CHROMIUM, hint);
+ return CreateGLTexture(size, format, GL_TEXTURE_POOL_MANAGED_CHROMIUM,
+ GL_CLAMP_TO_EDGE, hint);
case Bitmap:
DCHECK(format == GL_RGBA);
return CreateBitmap(size);
@@ -229,13 +237,17 @@ ResourceProvider::ResourceId ResourceProvider::CreateManagedResource(
}
ResourceProvider::ResourceId ResourceProvider::CreateGLTexture(
- gfx::Size size, GLenum format, GLenum texture_pool, TextureUsageHint hint) {
+ gfx::Size size,
+ GLenum format,
+ GLenum texture_pool,
+ GLint wrap_mode,
+ TextureUsageHint hint) {
DCHECK_LE(size.width(), max_texture_size_);
DCHECK_LE(size.height(), max_texture_size_);
DCHECK(thread_checker_.CalledOnValidThread());
ResourceId id = next_id_++;
- Resource resource(0, size, format, GL_LINEAR, texture_pool, hint);
+ Resource resource(0, size, format, GL_LINEAR, texture_pool, wrap_mode, hint);
resource.allocated = false;
resources_[id] = resource;
return id;
@@ -247,7 +259,7 @@ ResourceProvider::ResourceId ResourceProvider::CreateBitmap(gfx::Size size) {
uint8_t* pixels = new uint8_t[4 * size.GetArea()];
ResourceId id = next_id_++;
- Resource resource(pixels, size, GL_RGBA, GL_LINEAR);
+ Resource resource(pixels, size, GL_RGBA, GL_LINEAR, GL_CLAMP_TO_EDGE);
resource.allocated = true;
resources_[id] = resource;
return id;
@@ -272,7 +284,8 @@ ResourceProvider::CreateResourceFromExternalTexture(
texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
ResourceId id = next_id_++;
- Resource resource(texture_id, gfx::Size(), 0, GL_LINEAR, 0, TextureUsageAny);
+ Resource resource(texture_id, gfx::Size(), 0, GL_LINEAR, 0, GL_CLAMP_TO_EDGE,
+ TextureUsageAny);
resource.external = true;
resource.allocated = true;
resources_[id] = resource;
@@ -287,14 +300,15 @@ ResourceProvider::ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
DCHECK(mailbox.IsValid());
Resource& resource = resources_[id];
if (mailbox.IsTexture()) {
- resource = Resource(0, gfx::Size(), 0, GL_LINEAR, 0, TextureUsageAny);
+ resource = Resource(0, gfx::Size(), 0, GL_LINEAR, 0, GL_CLAMP_TO_EDGE,
+ TextureUsageAny);
} else {
DCHECK(mailbox.IsSharedMemory());
base::SharedMemory* shared_memory = mailbox.shared_memory();
DCHECK(shared_memory->memory());
uint8_t* pixels = reinterpret_cast<uint8_t*>(shared_memory->memory());
resource = Resource(pixels, mailbox.shared_memory_size(),
- GL_RGBA, GL_LINEAR);
+ GL_RGBA, GL_LINEAR, GL_CLAMP_TO_EDGE);
}
resource.external = true;
resource.allocated = true;
@@ -880,7 +894,8 @@ void ResourceProvider::ReceiveFromChild(
it->mailbox.name));
ResourceId id = next_id_++;
Resource resource(
- texture_id, it->size, it->format, it->filter, 0, TextureUsageAny);
+ texture_id, it->size, it->format, it->filter, 0, GL_CLAMP_TO_EDGE,
+ TextureUsageAny);
resource.mailbox.SetName(it->mailbox);
// Don't allocate a texture for a child.
resource.allocated = true;
@@ -1279,6 +1294,10 @@ void ResourceProvider::LazyCreate(Resource* resource) {
DCHECK(context3d);
// Create and set texture properties. Allocation is delayed until needed.
resource->gl_id = CreateTextureId(context3d);
+ GLC(context3d, context3d->texParameteri(
+ GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, resource->wrap_mode));
+ GLC(context3d, context3d->texParameteri(
+ GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, resource->wrap_mode));
GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D,
GL_TEXTURE_POOL_CHROMIUM,
resource->texture_pool));

Powered by Google App Engine
This is Rietveld 408576698