1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include <vector> 6 7 #include "base/basictypes.h" 8 #include "ui/gl/gl_bindings.h" 9 10 namespace gfx { 11 class GLContext; 12 } 13 14 namespace android_webview { 15 16 // This class is not thread safe and should only be used on the UI thread. 17 class ScopedAppGLStateRestore { 18 public: 19 enum CallMode { 20 MODE_DRAW, 21 MODE_RESOURCE_MANAGEMENT, 22 }; 23 24 ScopedAppGLStateRestore(CallMode mode); 25 ~ScopedAppGLStateRestore(); 26 27 bool stencil_enabled() const { return stencil_test_; } 28 GLint framebuffer_binding_ext() const { return framebuffer_binding_ext_; } 29 30 private: 31 const CallMode mode_; 32 33 GLint pack_alignment_; 34 GLint unpack_alignment_; 35 36 struct { 37 GLint enabled; 38 GLint size; 39 GLint type; 40 GLint normalized; 41 GLint stride; 42 GLvoid* pointer; 43 } vertex_attrib_[3]; 44 45 GLint vertex_array_buffer_binding_; 46 GLint index_array_buffer_binding_; 47 48 GLboolean depth_test_; 49 GLboolean cull_face_; 50 GLint cull_face_mode_; 51 GLboolean color_mask_[4]; 52 GLfloat color_clear_[4]; 53 GLfloat depth_clear_; 54 GLint current_program_; 55 GLint depth_func_; 56 GLboolean depth_mask_; 57 GLfloat depth_rage_[2]; 58 GLint front_face_; 59 GLint hint_generate_mipmap_; 60 GLfloat line_width_; 61 GLfloat polygon_offset_factor_; 62 GLfloat polygon_offset_units_; 63 GLfloat sample_coverage_value_; 64 GLboolean sample_coverage_invert_; 65 66 GLboolean enable_dither_; 67 GLboolean enable_polygon_offset_fill_; 68 GLboolean enable_sample_alpha_to_coverage_; 69 GLboolean enable_sample_coverage_; 70 71 // Not saved/restored in MODE_DRAW. 72 GLboolean blend_enabled_; 73 GLint blend_src_rgb_; 74 GLint blend_src_alpha_; 75 GLint blend_dest_rgb_; 76 GLint blend_dest_alpha_; 77 GLint active_texture_; 78 GLint viewport_[4]; 79 GLboolean scissor_test_; 80 GLint scissor_box_[4]; 81 82 GLboolean stencil_test_; 83 GLint stencil_func_; 84 GLint stencil_mask_; 85 GLint stencil_ref_; 86 87 GLint framebuffer_binding_ext_; 88 89 struct TextureBindings { 90 GLint texture_2d; 91 GLint texture_cube_map; 92 GLint texture_external_oes; 93 // TODO(boliu): TEXTURE_RECTANGLE_ARB 94 }; 95 96 std::vector<TextureBindings> texture_bindings_; 97 98 DISALLOW_COPY_AND_ASSIGN(ScopedAppGLStateRestore); 99 }; 100 101 } // namespace android_webview 102