Commit a4443611 authored by skaslev@chromium.org's avatar skaslev@chromium.org

Added ScopedSetActiveTexture to auto reset activeTexture to GL_TEXTURE0.

R=danakj

Review URL: https://chromiumcodereview.appspot.com/24015002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221667 0039d316-1c4b-4281-b951-d872f2087c98
parent 12091cc1
...@@ -54,6 +54,27 @@ bool IsTextureFormatSupportedForStorage(GLenum format) { ...@@ -54,6 +54,27 @@ bool IsTextureFormatSupportedForStorage(GLenum format) {
return (format == GL_RGBA || format == GL_BGRA_EXT); return (format == GL_RGBA || format == GL_BGRA_EXT);
} }
class ScopedSetActiveTexture {
public:
ScopedSetActiveTexture(WebGraphicsContext3D* context3d, GLenum unit)
: context3d_(context3d), unit_(unit) {
DCHECK_EQ(GL_TEXTURE0, ResourceProvider::GetActiveTextureUnit(context3d_));
if (unit_ != GL_TEXTURE0)
GLC(context3d_, context3d_->activeTexture(unit_));
}
~ScopedSetActiveTexture() {
// Active unit being GL_TEXTURE0 is effectively the ground state.
if (unit_ != GL_TEXTURE0)
GLC(context3d_, context3d_->activeTexture(GL_TEXTURE0));
}
private:
WebGraphicsContext3D* context3d_;
GLenum unit_;
};
} // namespace } // namespace
ResourceProvider::Resource::Resource() ResourceProvider::Resource::Resource()
...@@ -1097,10 +1118,8 @@ void ResourceProvider::BindForSampling(ResourceProvider::ResourceId resource_id, ...@@ -1097,10 +1118,8 @@ void ResourceProvider::BindForSampling(ResourceProvider::ResourceId resource_id,
Resource* resource = &it->second; Resource* resource = &it->second;
DCHECK(resource->lock_for_read_count); DCHECK(resource->lock_for_read_count);
DCHECK(!resource->locked_for_write || resource->set_pixels_completion_forced); DCHECK(!resource->locked_for_write || resource->set_pixels_completion_forced);
DCHECK_EQ(GL_TEXTURE0, GetActiveTextureUnit(context3d));
if (unit != GL_TEXTURE0) ScopedSetActiveTexture scoped_active_tex(context3d, unit);
GLC(context3d, context3d->activeTexture(unit));
GLC(context3d, context3d->bindTexture(target, resource->gl_id)); GLC(context3d, context3d->bindTexture(target, resource->gl_id));
if (filter != resource->filter) { if (filter != resource->filter) {
GLC(context3d, context3d->texParameteri(target, GLC(context3d, context3d->texParameteri(target,
...@@ -1114,10 +1133,6 @@ void ResourceProvider::BindForSampling(ResourceProvider::ResourceId resource_id, ...@@ -1114,10 +1133,6 @@ void ResourceProvider::BindForSampling(ResourceProvider::ResourceId resource_id,
if (resource->image_id) if (resource->image_id)
context3d->bindTexImage2DCHROMIUM(target, resource->image_id); context3d->bindTexImage2DCHROMIUM(target, resource->image_id);
// Active unit being GL_TEXTURE0 is effectively the ground state.
if (unit != GL_TEXTURE0)
GLC(context3d, context3d->activeTexture(GL_TEXTURE0));
} }
void ResourceProvider::UnbindForSampling( void ResourceProvider::UnbindForSampling(
...@@ -1131,13 +1146,8 @@ void ResourceProvider::UnbindForSampling( ...@@ -1131,13 +1146,8 @@ void ResourceProvider::UnbindForSampling(
return; return;
WebGraphicsContext3D* context3d = Context3d(); WebGraphicsContext3D* context3d = Context3d();
DCHECK_EQ(GL_TEXTURE0, GetActiveTextureUnit(context3d)); ScopedSetActiveTexture scoped_active_tex(context3d, unit);
if (unit != GL_TEXTURE0)
GLC(context3d, context3d->activeTexture(unit));
context3d->releaseTexImage2DCHROMIUM(target, resource->image_id); context3d->releaseTexImage2DCHROMIUM(target, resource->image_id);
// Active unit being GL_TEXTURE0 is effectively the ground state.
if (unit != GL_TEXTURE0)
GLC(context3d, context3d->activeTexture(GL_TEXTURE0));
} }
void ResourceProvider::BeginSetPixels(ResourceId id) { void ResourceProvider::BeginSetPixels(ResourceId id) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment