#include <vector>
#include "base/basictypes.h"
#include "ui/gl/gl_bindings.h"
namespace gfx {
class GLContext;
}
namespace android_webview {
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_;
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;
};
std::vector<TextureBindings> texture_bindings_;
DISALLOW_COPY_AND_ASSIGN(ScopedAppGLStateRestore);
};
}