scoped_app_gl_state_restore.h revision bb1529ce867d8845a77ec7cdf3e3003ef1771a40
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
10namespace gfx {
11class GLContext;
12}
13
14namespace android_webview {
15
16// This class is not thread safe and should only be used on the UI thread.
17class ScopedAppGLStateRestore {
18 public:
19  enum CallMode {
20    MODE_DRAW,
21    MODE_DETACH_FROM_WINDOW
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