| Index: gpu/command_buffer/service/context_state.cc
|
| diff --git a/gpu/command_buffer/service/context_state.cc b/gpu/command_buffer/service/context_state.cc
|
| index 88358ef80f9ba7bcd34bba26b3758251cee36391..f046872a72ff9887d9bbb89de3b807c46a195c6e 100644
|
| --- a/gpu/command_buffer/service/context_state.cc
|
| +++ b/gpu/command_buffer/service/context_state.cc
|
| @@ -46,6 +46,38 @@ GLuint GetArbServiceId(const TextureUnit& unit) {
|
| ? unit.bound_texture_rectangle_arb->service_id() : 0;
|
| }
|
|
|
| +GLuint GetServiceId(const TextureUnit& unit, GLuint target) {
|
| + switch (target) {
|
| + case GL_TEXTURE_2D:
|
| + return Get2dServiceId(unit);
|
| + case GL_TEXTURE_CUBE_MAP:
|
| + return GetCubeServiceId(unit);
|
| + case GL_TEXTURE_RECTANGLE_ARB:
|
| + return GetArbServiceId(unit);
|
| + case GL_TEXTURE_EXTERNAL_OES:
|
| + return GetOesServiceId(unit);
|
| + default:
|
| + NOTREACHED();
|
| + return 0;
|
| + }
|
| +}
|
| +
|
| +bool TargetIsSupported(const FeatureInfo* feature_info, GLuint target) {
|
| + switch (target) {
|
| + case GL_TEXTURE_2D:
|
| + return true;
|
| + case GL_TEXTURE_CUBE_MAP:
|
| + return true;
|
| + case GL_TEXTURE_RECTANGLE_ARB:
|
| + return feature_info->feature_flags().arb_texture_rectangle;
|
| + case GL_TEXTURE_EXTERNAL_OES:
|
| + return feature_info->feature_flags().oes_egl_image_external;
|
| + default:
|
| + NOTREACHED();
|
| + return false;
|
| + }
|
| +}
|
| +
|
| } // anonymous namespace.
|
|
|
| TextureUnit::TextureUnit()
|
| @@ -147,6 +179,13 @@ void ContextState::RestoreAllTextureUnitBindings(
|
| RestoreActiveTexture();
|
| }
|
|
|
| +void ContextState::RestoreActiveTextureUnitBinding(unsigned int target) const {
|
| + DCHECK_LT(active_texture_unit, texture_units.size());
|
| + const TextureUnit& texture_unit = texture_units[active_texture_unit];
|
| + if (TargetIsSupported(feature_info_, target))
|
| + glBindTexture(target, GetServiceId(texture_unit, target));
|
| +}
|
| +
|
| void ContextState::RestoreAttribute(GLuint attrib_index) const {
|
| const VertexAttrib* attrib =
|
| vertex_attrib_manager->GetVertexAttrib(attrib_index);
|
|
|