- add sources.
[platform/framework/web/crosswalk.git] / src / android_webview / browser / scoped_app_gl_state_restore.h
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