// Copyright 2013 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. #include #include "base/basictypes.h" #include "ui/gl/gl_bindings.h" namespace gfx { class GLContext; } namespace android_webview { // This class is not thread safe and should only be used on the UI thread. class ScopedAppGLStateRestore { public: enum CallMode { MODE_DRAW, MODE_RESOURCE_MANAGEMENT, }; ScopedAppGLStateRestore(CallMode mode); ~ScopedAppGLStateRestore(); bool stencil_enabled() const { return stencil_test_; } GLint framebuffer_binding_ext() const { return framebuffer_binding_ext_; } private: const CallMode mode_; GLint pack_alignment_; GLint unpack_alignment_; struct { GLint enabled; GLint size; GLint type; GLint normalized; GLint stride; GLvoid* pointer; } vertex_attrib_[3]; GLint vertex_array_buffer_binding_; GLint index_array_buffer_binding_; GLboolean depth_test_; GLboolean cull_face_; GLint cull_face_mode_; GLboolean color_mask_[4]; GLfloat color_clear_[4]; GLfloat depth_clear_; GLint current_program_; GLint depth_func_; GLboolean depth_mask_; GLfloat depth_rage_[2]; GLint front_face_; GLint hint_generate_mipmap_; GLfloat line_width_; GLfloat polygon_offset_factor_; GLfloat polygon_offset_units_; GLfloat sample_coverage_value_; GLboolean sample_coverage_invert_; GLboolean enable_dither_; GLboolean enable_polygon_offset_fill_; GLboolean enable_sample_alpha_to_coverage_; GLboolean enable_sample_coverage_; // Not saved/restored in MODE_DRAW. GLboolean blend_enabled_; GLint blend_src_rgb_; GLint blend_src_alpha_; GLint blend_dest_rgb_; GLint blend_dest_alpha_; GLint active_texture_; GLint viewport_[4]; GLboolean scissor_test_; GLint scissor_box_[4]; GLboolean stencil_test_; GLint stencil_func_; GLint stencil_mask_; GLint stencil_ref_; GLint framebuffer_binding_ext_; struct TextureBindings { GLint texture_2d; GLint texture_cube_map; GLint texture_external_oes; // TODO(boliu): TEXTURE_RECTANGLE_ARB }; std::vector texture_bindings_; DISALLOW_COPY_AND_ASSIGN(ScopedAppGLStateRestore); }; } // namespace android_webview