// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_GL_SCOPED_BINDERS_H_ #define UI_GL_SCOPED_BINDERS_H_ #include "base/macros.h" #include "ui/gl/gl_export.h" namespace gfx { class GLStateRestorer; class GL_EXPORT ScopedFrameBufferBinder { public: explicit ScopedFrameBufferBinder(unsigned int fbo); ~ScopedFrameBufferBinder(); private: // Whenever possible we prefer to use the current GLContext's // GLStateRestorer to maximize driver compabitility. GLStateRestorer* state_restorer_; // Failing that we use GL calls to save and restore state. int old_fbo_; DISALLOW_COPY_AND_ASSIGN(ScopedFrameBufferBinder); }; class GL_EXPORT ScopedActiveTexture { public: ScopedActiveTexture(unsigned int texture); ~ScopedActiveTexture(); private: // TODO(dcastagna): Use GLStateRestorer. int old_texture_; DISALLOW_COPY_AND_ASSIGN(ScopedActiveTexture); }; class GL_EXPORT ScopedTextureBinder { public: ScopedTextureBinder(unsigned int target, unsigned int id); ~ScopedTextureBinder(); private: // Whenever possible we prefer to use the current GLContext's // GLStateRestorer to maximize driver compabitility. GLStateRestorer* state_restorer_; // Failing that we use GL calls to save and restore state. int target_; int old_id_; DISALLOW_COPY_AND_ASSIGN(ScopedTextureBinder); }; class GL_EXPORT ScopedUseProgram { public: ScopedUseProgram(unsigned int program); ~ScopedUseProgram(); private: // TODO(dcastagna): Use GLStateRestorer. int old_program_; DISALLOW_COPY_AND_ASSIGN(ScopedUseProgram); }; class GL_EXPORT ScopedVertexAttribArray { public: ScopedVertexAttribArray(unsigned int index, int size, unsigned int type, char normalized, int stride, const void* pointer); ~ScopedVertexAttribArray(); private: // TODO(dcastagna): Use GLStateRestorer. int buffer_; int enabled_; int index_; int size_; int type_; int normalized_; int stride_; void* pointer_; DISALLOW_COPY_AND_ASSIGN(ScopedVertexAttribArray); }; class GL_EXPORT ScopedBufferBinder { public: ScopedBufferBinder(unsigned int target, unsigned int index); ~ScopedBufferBinder(); private: // TODO(dcastagna): Use GLStateRestorer. int target_; int old_id_; DISALLOW_COPY_AND_ASSIGN(ScopedBufferBinder); }; class GL_EXPORT ScopedViewport { public: ScopedViewport(int x, int y, int width, int height); ~ScopedViewport(); private: int data_[4] = {}; DISALLOW_COPY_AND_ASSIGN(ScopedViewport); }; class GL_EXPORT ScopedVertexAttribPointer { public: ScopedVertexAttribPointer(unsigned index, int size, unsigned type, char normalized, int stride, const void* pointer); ~ScopedVertexAttribPointer(); private: DISALLOW_COPY_AND_ASSIGN(ScopedVertexAttribPointer); }; class GL_EXPORT ScopedColorMask { public: ScopedColorMask(char red, char green, char blue, char alpha); ~ScopedColorMask(); private: unsigned char colors_[4] = {}; DISALLOW_COPY_AND_ASSIGN(ScopedColorMask); }; class GL_EXPORT ScopedCapability { public: ScopedCapability(unsigned capability, unsigned char enabled); ~ScopedCapability(); private: unsigned capability_; unsigned char enabled_; DISALLOW_COPY_AND_ASSIGN(ScopedCapability); }; } // namespace gfx #endif // UI_GL_SCOPED_BINDERS_H_