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

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 botched resolve Created 7 years, 3 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
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 9779a546958441a5af186e05e316b4dcc795e1bd..850e02a5b49cbff10cc418cbe965d4d1d89631e0 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -54,21 +54,6 @@ bool IsTextureFormatSupportedForStorage(GLenum format) {
return (format == GL_RGBA || format == GL_BGRA_EXT);
}
-unsigned CreateTextureId(WebGraphicsContext3D* context3d) {
- unsigned texture_id = 0;
- GLC(context3d, texture_id = context3d->createTexture());
- GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, texture_id));
- GLC(context3d, context3d->texParameteri(
- 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;
-}
-
} // namespace
ResourceProvider::Resource::Resource()
@@ -93,6 +78,7 @@ ResourceProvider::Resource::Resource()
filter(0),
image_id(0),
texture_pool(0),
+ wrap_mode(0),
hint(TextureUsageAny),
type(static_cast<ResourceType>(0)) {}
@@ -104,6 +90,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),
@@ -126,11 +113,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),
@@ -152,8 +146,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() {}
@@ -193,13 +190,16 @@ bool ResourceProvider::InUseByConsumer(ResourceId id) {
}
ResourceProvider::ResourceId ResourceProvider::CreateResource(
- gfx::Size size, GLenum format, TextureUsageHint hint) {
+ gfx::Size size, GLenum format, GLint wrap_mode, TextureUsageHint hint) {
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,
+ wrap_mode, hint);
case Bitmap:
+ // The only wrap_mode currently implemented in software mode is
+ // GL_CLAMP_TO_EDGE.
+ // http://crbug.com/284796
DCHECK(format == GL_RGBA);
return CreateBitmap(size);
case InvalidType:
@@ -211,12 +211,12 @@ ResourceProvider::ResourceId ResourceProvider::CreateResource(
}
ResourceProvider::ResourceId ResourceProvider::CreateManagedResource(
- gfx::Size size, GLenum format, TextureUsageHint hint) {
+ gfx::Size size, GLenum format, GLint wrap_mode, TextureUsageHint hint) {
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,
+ wrap_mode, hint);
case Bitmap:
DCHECK(format == GL_RGBA);
return CreateBitmap(size);
@@ -229,13 +229,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 +251,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 +276,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 +292,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;
@@ -884,7 +890,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;
@@ -1242,6 +1249,11 @@ void ResourceProvider::CreateForTesting(ResourceId id) {
LazyCreate(GetResource(id));
}
+GLint ResourceProvider::WrapModeForTesting(ResourceId id) {
+ Resource* resource = GetResource(id);
+ return resource->wrap_mode;
+}
+
void ResourceProvider::LazyCreate(Resource* resource) {
if (resource->type != GLTexture || resource->gl_id != 0)
return;
@@ -1252,8 +1264,18 @@ void ResourceProvider::LazyCreate(Resource* resource) {
WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
+
// Create and set texture properties. Allocation is delayed until needed.
- resource->gl_id = CreateTextureId(context3d);
+ GLC(context3d, resource->gl_id = context3d->createTexture());
+ GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, resource->gl_id));
+ GLC(context3d, context3d->texParameteri(
+ 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, 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));
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698