| Index: cc/resource_provider.cc
|
| diff --git a/cc/resource_provider.cc b/cc/resource_provider.cc
|
| index 9f208af335811554168e1213c6c903810362df6a..c885901939c34ff171abed24d7dc868ee0c48c93 100644
|
| --- a/cc/resource_provider.cc
|
| +++ b/cc/resource_provider.cc
|
| @@ -60,11 +60,12 @@ ResourceProvider::Resource::Resource()
|
| , markedForDeletion(false)
|
| , size()
|
| , format(0)
|
| + , filter(0)
|
| , type(static_cast<ResourceType>(0))
|
| {
|
| }
|
|
|
| -ResourceProvider::Resource::Resource(unsigned textureId, int pool, const gfx::Size& size, GLenum format)
|
| +ResourceProvider::Resource::Resource(unsigned textureId, int pool, const gfx::Size& size, GLenum format, GLenum filter)
|
| : glId(textureId)
|
| , glPixelBufferId(0)
|
| , pixels(0)
|
| @@ -77,11 +78,12 @@ ResourceProvider::Resource::Resource(unsigned textureId, int pool, const gfx::Si
|
| , markedForDeletion(false)
|
| , size(size)
|
| , format(format)
|
| + , filter(filter)
|
| , type(GLTexture)
|
| {
|
| }
|
|
|
| -ResourceProvider::Resource::Resource(uint8_t* pixels, int pool, const gfx::Size& size, GLenum format)
|
| +ResourceProvider::Resource::Resource(uint8_t* pixels, int pool, const gfx::Size& size, GLenum format, GLenum filter)
|
| : glId(0)
|
| , glPixelBufferId(0)
|
| , pixels(pixels)
|
| @@ -94,6 +96,7 @@ ResourceProvider::Resource::Resource(uint8_t* pixels, int pool, const gfx::Size&
|
| , markedForDeletion(false)
|
| , size(size)
|
| , format(format)
|
| + , filter(filter)
|
| , type(Bitmap)
|
| {
|
| }
|
| @@ -177,7 +180,7 @@ ResourceProvider::ResourceId ResourceProvider::createGLTexture(int pool, const g
|
| GLC(context3d, context3d->texImage2D(GL_TEXTURE_2D, 0, format, size.width(), size.height(), 0, format, GL_UNSIGNED_BYTE, 0));
|
|
|
| ResourceId id = m_nextId++;
|
| - Resource resource(textureId, pool, size, format);
|
| + Resource resource(textureId, pool, size, format, GL_LINEAR);
|
| m_resources[id] = resource;
|
| return id;
|
| }
|
| @@ -189,7 +192,7 @@ ResourceProvider::ResourceId ResourceProvider::createBitmap(int pool, const gfx:
|
| uint8_t* pixels = new uint8_t[size.width() * size.height() * 4];
|
|
|
| ResourceId id = m_nextId++;
|
| - Resource resource(pixels, pool, size, GL_RGBA);
|
| + Resource resource(pixels, pool, size, GL_RGBA, GL_LINEAR);
|
| m_resources[id] = resource;
|
| return id;
|
| }
|
| @@ -207,7 +210,7 @@ ResourceProvider::ResourceId ResourceProvider::createResourceFromExternalTexture
|
| GLC(context3d, context3d->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
|
|
|
| ResourceId id = m_nextId++;
|
| - Resource resource(textureId, 0, gfx::Size(), 0);
|
| + Resource resource(textureId, 0, gfx::Size(), 0, GL_LINEAR);
|
| resource.external = true;
|
| m_resources[id] = resource;
|
| return id;
|
| @@ -424,6 +427,12 @@ ResourceProvider::ScopedReadLockGL::~ScopedReadLockGL()
|
| m_resourceProvider->unlockForRead(m_resourceId);
|
| }
|
|
|
| +ResourceProvider::ScopedSamplerGL::ScopedSamplerGL(ResourceProvider* resourceProvider, ResourceProvider::ResourceId resourceId, GLenum target, GLenum filter)
|
| + : ScopedReadLockGL(resourceProvider, resourceId)
|
| +{
|
| + resourceProvider->bindForSampling(resourceId, target, filter);
|
| +}
|
| +
|
| ResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL(ResourceProvider* resourceProvider, ResourceProvider::ResourceId resourceId)
|
| : m_resourceProvider(resourceProvider)
|
| , m_resourceId(resourceId)
|
| @@ -616,7 +625,7 @@ void ResourceProvider::receiveFromChild(int child, const TransferableResourceLis
|
| GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, textureId));
|
| GLC(context3d, context3d->consumeTextureCHROMIUM(GL_TEXTURE_2D, it->mailbox.name));
|
| ResourceId id = m_nextId++;
|
| - Resource resource(textureId, childInfo.pool, it->size, it->format);
|
| + Resource resource(textureId, childInfo.pool, it->size, it->format, it->filter);
|
| resource.mailbox.setName(it->mailbox.name);
|
| m_resources[id] = resource;
|
| childInfo.parentToChildMap[id] = it->id;
|
| @@ -662,6 +671,7 @@ bool ResourceProvider::transferResource(WebGraphicsContext3D* context, ResourceI
|
| return false;
|
| resource->id = id;
|
| resource->format = source->format;
|
| + resource->filter = source->filter;
|
| resource->size = source->size;
|
|
|
| if (source->mailbox.isZero()) {
|
| @@ -835,4 +845,22 @@ void ResourceProvider::setPixelsFromBuffer(ResourceId id)
|
| }
|
| }
|
|
|
| +void ResourceProvider::bindForSampling(ResourceProvider::ResourceId resourceId, GLenum target, GLenum filter)
|
| +{
|
| + DCHECK(m_threadChecker.CalledOnValidThread());
|
| + WebGraphicsContext3D* context3d = m_context->context3D();
|
| + ResourceMap::iterator it = m_resources.find(resourceId);
|
| + DCHECK(it != m_resources.end());
|
| + Resource* resource = &it->second;
|
| + DCHECK(resource->lockForReadCount);
|
| + DCHECK(!resource->lockedForWrite);
|
| +
|
| + GLC(context3d, context3d->bindTexture(target, resource->glId));
|
| + if (filter != resource->filter) {
|
| + GLC(context3d, context3d->texParameteri(target, GL_TEXTURE_MIN_FILTER, filter));
|
| + GLC(context3d, context3d->texParameteri(target, GL_TEXTURE_MAG_FILTER, filter));
|
| + resource->filter = filter;
|
| + }
|
| +}
|
| +
|
| } // namespace cc
|
|
|