| Index: ui/gl/scoped_binders.cc
|
| diff --git a/ui/gl/scoped_binders.cc b/ui/gl/scoped_binders.cc
|
| index bb2b290105622a9823b49b284d6bbd72aa6f36bc..4480f8030ca78cd5d0707280b348d0c3c99438f9 100644
|
| --- a/ui/gl/scoped_binders.cc
|
| +++ b/ui/gl/scoped_binders.cc
|
| @@ -29,6 +29,16 @@ ScopedFrameBufferBinder::~ScopedFrameBufferBinder() {
|
| }
|
| }
|
|
|
| +ScopedActiveTexture::ScopedActiveTexture(unsigned int texture)
|
| + : old_texture_(-1) {
|
| + glGetIntegerv(GL_ACTIVE_TEXTURE, &old_texture_);
|
| + glActiveTexture(texture);
|
| +}
|
| +
|
| +ScopedActiveTexture::~ScopedActiveTexture() {
|
| + glActiveTexture(old_texture_);
|
| +}
|
| +
|
| ScopedTextureBinder::ScopedTextureBinder(unsigned int target, unsigned int id)
|
| : state_restorer_(!GLContext::GetCurrent()
|
| ? NULL
|
| @@ -47,8 +57,11 @@ ScopedTextureBinder::ScopedTextureBinder(unsigned int target, unsigned int id)
|
| case GL_TEXTURE_EXTERNAL_OES:
|
| target_getter = GL_TEXTURE_BINDING_EXTERNAL_OES;
|
| break;
|
| + case GL_TEXTURE_RECTANGLE_ARB:
|
| + target_getter = GL_TEXTURE_BINDING_RECTANGLE_ARB;
|
| + break;
|
| default:
|
| - NOTIMPLEMENTED() << "Target not part of OpenGL ES 2.0 spec.";
|
| + NOTIMPLEMENTED() << " Target not supported.";
|
| }
|
| glGetIntegerv(target_getter, &old_id_);
|
| }
|
| @@ -65,4 +78,102 @@ ScopedTextureBinder::~ScopedTextureBinder() {
|
| }
|
| }
|
|
|
| +ScopedUseProgram::ScopedUseProgram(unsigned int program) : old_program_(-1) {
|
| + glGetIntegerv(GL_CURRENT_PROGRAM, &old_program_);
|
| + glUseProgram(program);
|
| +}
|
| +
|
| +ScopedUseProgram::~ScopedUseProgram() {
|
| + glUseProgram(old_program_);
|
| +}
|
| +
|
| +ScopedVertexAttribArray::ScopedVertexAttribArray(unsigned int index,
|
| + int size,
|
| + unsigned int type,
|
| + char normalized,
|
| + int stride,
|
| + const void* pointer)
|
| + : buffer_(0),
|
| + enabled_(GL_FALSE),
|
| + index_(index),
|
| + size_(-1),
|
| + type_(-1),
|
| + normalized_(GL_FALSE),
|
| + stride_(0),
|
| + pointer_(0) {
|
| + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, &buffer_);
|
| + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &enabled_);
|
| + glEnableVertexAttribArray(index);
|
| +
|
| + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_SIZE, &size_);
|
| + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_TYPE, &type_);
|
| + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &normalized_);
|
| + glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_STRIDE, &stride_);
|
| + glGetVertexAttribPointerv(index, GL_VERTEX_ATTRIB_ARRAY_POINTER, &pointer_);
|
| +
|
| + glVertexAttribPointer(index, size, type, normalized, stride, pointer);
|
| +}
|
| +
|
| +ScopedVertexAttribArray::~ScopedVertexAttribArray() {
|
| + ScopedBufferBinder buffer_binder(GL_ARRAY_BUFFER, buffer_);
|
| + glVertexAttribPointer(index_, size_, type_, normalized_, stride_, pointer_);
|
| + if (enabled_ == GL_FALSE) {
|
| + glDisableVertexAttribArray(index_);
|
| + }
|
| +}
|
| +
|
| +ScopedBufferBinder::ScopedBufferBinder(unsigned int target, unsigned int id)
|
| + : target_(target), old_id_(-1) {
|
| + GLenum target_getter = 0;
|
| + switch (target) {
|
| + case GL_ARRAY_BUFFER:
|
| + target_getter = GL_ARRAY_BUFFER_BINDING;
|
| + break;
|
| + default:
|
| + NOTIMPLEMENTED() << " Target not supported.";
|
| + }
|
| + glGetIntegerv(target_getter, &old_id_);
|
| + glBindBuffer(target_, id);
|
| +}
|
| +
|
| +ScopedBufferBinder::~ScopedBufferBinder() {
|
| + glBindBuffer(target_, old_id_);
|
| +}
|
| +
|
| +ScopedViewport::ScopedViewport(int x, int y, int width, int height) {
|
| + glGetIntegerv(GL_VIEWPORT, data_);
|
| + glViewport(x, y, width, height);
|
| +}
|
| +
|
| +ScopedViewport::~ScopedViewport() {
|
| + glViewport(data_[0], data_[1], data_[2], data_[3]);
|
| +}
|
| +
|
| +ScopedColorMask::ScopedColorMask(char red, char green, char blue, char alpha) {
|
| + glGetBooleanv(GL_COLOR_WRITEMASK, colors_);
|
| + glColorMask(red, green, blue, alpha);
|
| +}
|
| +
|
| +ScopedColorMask::~ScopedColorMask() {
|
| + glColorMask(colors_[0], colors_[1], colors_[2], colors_[3]);
|
| +}
|
| +
|
| +ScopedCapability::ScopedCapability(unsigned capability, unsigned char enabled)
|
| + : capability_(capability) {
|
| + enabled_ = glIsEnabled(capability_);
|
| + if (enabled == GL_TRUE) {
|
| + glEnable(capability);
|
| + } else {
|
| + glDisable(capability);
|
| + }
|
| +}
|
| +
|
| +ScopedCapability::~ScopedCapability() {
|
| + if (enabled_ == GL_TRUE) {
|
| + glEnable(capability_);
|
| + } else {
|
| + glDisable(capability_);
|
| + }
|
| +}
|
| +
|
| } // namespace gfx
|
|
|