• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
stencil_enabled()27   bool stencil_enabled() const { return stencil_test_; }
framebuffer_binding_ext()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