blob: ccc0b5ad0cbb9b83173b26ffc3fc757c9fab0da2 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/gl/scoped_restore_texture.h"
#include "base/notreached.h"
namespace gl {
ScopedRestoreTexture::ScopedRestoreTexture(
gl::GLApi* api,
GLenum target,
GLuint new_binding /*= 0*/)
: api_(api), target_(target) {
DCHECK(target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES ||
target == GL_TEXTURE_RECTANGLE_ANGLE);
GLenum get_target = GL_TEXTURE_BINDING_2D;
switch (target) {
case GL_TEXTURE_2D:
get_target = GL_TEXTURE_BINDING_2D;
break;
case GL_TEXTURE_RECTANGLE_ANGLE:
get_target = GL_TEXTURE_BINDING_RECTANGLE_ANGLE;
break;
case GL_TEXTURE_EXTERNAL_OES:
get_target = GL_TEXTURE_BINDING_EXTERNAL_OES;
break;
default:
NOTREACHED();
}
GLint binding = 0;
api->glGetIntegervFn(get_target, &binding);
prev_binding_ = binding;
if (new_binding) {
api->glBindTextureFn(target, new_binding);
}
}
ScopedRestoreTexture::~ScopedRestoreTexture() {
api_->glBindTextureFn(target_, prev_binding_);
}
} // namespace gl