Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: android_webview/browser/scoped_app_gl_state_restore.cc

Issue 1564703005: Implement external stencil for Android WebView (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase, fix pixel tests Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/browser/scoped_app_gl_state_restore.h" 5 #include "android_webview/browser/scoped_app_gl_state_restore.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 bool g_globals_initialized = false; 65 bool g_globals_initialized = false;
66 GLint g_gl_max_texture_units = 0; 66 GLint g_gl_max_texture_units = 0;
67 bool g_supports_oes_vertex_array_object = false; 67 bool g_supports_oes_vertex_array_object = false;
68 68
69 } // namespace 69 } // namespace
70 70
71 namespace internal { 71 namespace internal {
72 72
73 class ScopedAppGLStateRestoreImpl { 73 class ScopedAppGLStateRestoreImpl {
74 public: 74 public:
75 ScopedAppGLStateRestoreImpl(ScopedAppGLStateRestore::CallMode mode); 75 explicit ScopedAppGLStateRestoreImpl(ScopedAppGLStateRestore::CallMode mode);
76 ~ScopedAppGLStateRestoreImpl(); 76 ~ScopedAppGLStateRestoreImpl();
77 77
78 bool stencil_enabled() const { return stencil_test_; } 78 StencilState stencil_state() const { return stencil_state_; }
79 GLint framebuffer_binding_ext() const { return framebuffer_binding_ext_; } 79 GLint framebuffer_binding_ext() const { return framebuffer_binding_ext_; }
80 80
81 private: 81 private:
82 const ScopedAppGLStateRestore::CallMode mode_; 82 const ScopedAppGLStateRestore::CallMode mode_;
83 83
84 GLint pack_alignment_; 84 GLint pack_alignment_;
85 GLint unpack_alignment_; 85 GLint unpack_alignment_;
86 86
87 struct { 87 struct {
88 GLint enabled; 88 GLint enabled;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 GLboolean blend_enabled_; 128 GLboolean blend_enabled_;
129 GLint blend_src_rgb_; 129 GLint blend_src_rgb_;
130 GLint blend_src_alpha_; 130 GLint blend_src_alpha_;
131 GLint blend_dest_rgb_; 131 GLint blend_dest_rgb_;
132 GLint blend_dest_alpha_; 132 GLint blend_dest_alpha_;
133 GLint active_texture_; 133 GLint active_texture_;
134 GLint viewport_[4]; 134 GLint viewport_[4];
135 GLboolean scissor_test_; 135 GLboolean scissor_test_;
136 GLint scissor_box_[4]; 136 GLint scissor_box_[4];
137 137
138 GLboolean stencil_test_; 138 StencilState stencil_state_;
139 GLint stencil_front_func_;
140 GLint stencil_front_ref_;
141 GLint stencil_front_mask_;
142 GLint stencil_back_func_;
143 GLint stencil_back_ref_;
144 GLint stencil_back_mask_;
145 GLint stencil_clear_;
146 GLint stencil_front_writemask_;
147 GLint stencil_back_writemask_;
148 GLint stencil_front_fail_op_;
149 GLint stencil_front_z_fail_op_;
150 GLint stencil_front_z_pass_op_;
151 GLint stencil_back_fail_op_;
152 GLint stencil_back_z_fail_op_;
153 GLint stencil_back_z_pass_op_;
154 139
155 GLint framebuffer_binding_ext_; 140 GLint framebuffer_binding_ext_;
156 141
157 struct TextureBindings { 142 struct TextureBindings {
158 GLint texture_2d; 143 GLint texture_2d;
159 GLint texture_cube_map; 144 GLint texture_cube_map;
160 GLint texture_external_oes; 145 GLint texture_external_oes;
161 // TODO(boliu): TEXTURE_RECTANGLE_ARB 146 // TODO(boliu): TEXTURE_RECTANGLE_ARB
162 }; 147 };
163 148
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 glGetFloatv(GL_SAMPLE_COVERAGE_VALUE, &sample_coverage_value_); 217 glGetFloatv(GL_SAMPLE_COVERAGE_VALUE, &sample_coverage_value_);
233 glGetBooleanv(GL_SAMPLE_COVERAGE_INVERT, &sample_coverage_invert_); 218 glGetBooleanv(GL_SAMPLE_COVERAGE_INVERT, &sample_coverage_invert_);
234 glGetIntegerv(GL_BLEND_EQUATION_RGB, &blend_equation_rgb_); 219 glGetIntegerv(GL_BLEND_EQUATION_RGB, &blend_equation_rgb_);
235 glGetIntegerv(GL_BLEND_EQUATION_ALPHA, &blend_equation_alpha_); 220 glGetIntegerv(GL_BLEND_EQUATION_ALPHA, &blend_equation_alpha_);
236 221
237 glGetBooleanv(GL_DITHER, &enable_dither_); 222 glGetBooleanv(GL_DITHER, &enable_dither_);
238 glGetBooleanv(GL_POLYGON_OFFSET_FILL, &enable_polygon_offset_fill_); 223 glGetBooleanv(GL_POLYGON_OFFSET_FILL, &enable_polygon_offset_fill_);
239 glGetBooleanv(GL_SAMPLE_ALPHA_TO_COVERAGE, &enable_sample_alpha_to_coverage_); 224 glGetBooleanv(GL_SAMPLE_ALPHA_TO_COVERAGE, &enable_sample_alpha_to_coverage_);
240 glGetBooleanv(GL_SAMPLE_COVERAGE, &enable_sample_coverage_); 225 glGetBooleanv(GL_SAMPLE_COVERAGE, &enable_sample_coverage_);
241 226
242 glGetBooleanv(GL_STENCIL_TEST, &stencil_test_); 227 glGetBooleanv(GL_STENCIL_TEST, &stencil_state_.stencil_test_enabled);
243 glGetIntegerv(GL_STENCIL_FUNC, &stencil_front_func_); 228 glGetIntegerv(GL_STENCIL_FUNC, &stencil_state_.stencil_front_func);
244 glGetIntegerv(GL_STENCIL_VALUE_MASK, &stencil_front_mask_); 229 glGetIntegerv(GL_STENCIL_VALUE_MASK, &stencil_state_.stencil_front_mask);
245 glGetIntegerv(GL_STENCIL_REF, &stencil_front_ref_); 230 glGetIntegerv(GL_STENCIL_REF, &stencil_state_.stencil_front_ref);
246 glGetIntegerv(GL_STENCIL_BACK_FUNC, &stencil_back_func_); 231 glGetIntegerv(GL_STENCIL_BACK_FUNC, &stencil_state_.stencil_back_func);
247 glGetIntegerv(GL_STENCIL_BACK_VALUE_MASK, &stencil_back_mask_); 232 glGetIntegerv(GL_STENCIL_BACK_VALUE_MASK, &stencil_state_.stencil_back_mask);
248 glGetIntegerv(GL_STENCIL_BACK_REF, &stencil_back_ref_); 233 glGetIntegerv(GL_STENCIL_BACK_REF, &stencil_state_.stencil_back_ref);
249 glGetIntegerv(GL_STENCIL_CLEAR_VALUE, &stencil_clear_); 234 glGetIntegerv(GL_STENCIL_CLEAR_VALUE, &stencil_state_.stencil_clear);
250 glGetIntegerv(GL_STENCIL_WRITEMASK, &stencil_front_writemask_); 235 glGetIntegerv(GL_STENCIL_WRITEMASK, &stencil_state_.stencil_front_writemask);
251 glGetIntegerv(GL_STENCIL_BACK_WRITEMASK, &stencil_back_writemask_); 236 glGetIntegerv(GL_STENCIL_BACK_WRITEMASK,
252 glGetIntegerv(GL_STENCIL_FAIL, &stencil_front_fail_op_); 237 &stencil_state_.stencil_back_writemask);
253 glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, &stencil_front_z_fail_op_); 238 glGetIntegerv(GL_STENCIL_FAIL, &stencil_state_.stencil_front_fail_op);
254 glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS, &stencil_front_z_pass_op_); 239 glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL,
255 glGetIntegerv(GL_STENCIL_BACK_FAIL, &stencil_back_fail_op_); 240 &stencil_state_.stencil_front_z_fail_op);
256 glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_FAIL, &stencil_back_z_fail_op_); 241 glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS,
257 glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_PASS, &stencil_back_z_pass_op_); 242 &stencil_state_.stencil_front_z_pass_op);
243 glGetIntegerv(GL_STENCIL_BACK_FAIL, &stencil_state_.stencil_back_fail_op);
244 glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_FAIL,
245 &stencil_state_.stencil_back_z_fail_op);
246 glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_PASS,
247 &stencil_state_.stencil_back_z_pass_op);
258 248
259 glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &framebuffer_binding_ext_); 249 glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &framebuffer_binding_ext_);
260 250
261 glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture_); 251 glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture_);
262 252
263 texture_bindings_.resize(g_gl_max_texture_units); 253 texture_bindings_.resize(g_gl_max_texture_units);
264 for (int ii = 0; ii < g_gl_max_texture_units; ++ii) { 254 for (int ii = 0; ii < g_gl_max_texture_units; ++ii) {
265 glActiveTexture(GL_TEXTURE0 + ii); 255 glActiveTexture(GL_TEXTURE0 + ii);
266 TextureBindings& bindings = texture_bindings_[ii]; 256 TextureBindings& bindings = texture_bindings_[ii];
267 glGetIntegerv(GL_TEXTURE_BINDING_2D, &bindings.texture_2d); 257 glGetIntegerv(GL_TEXTURE_BINDING_2D, &bindings.texture_2d);
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 385
396 glViewport(viewport_[0], viewport_[1], viewport_[2], viewport_[3]); 386 glViewport(viewport_[0], viewport_[1], viewport_[2], viewport_[3]);
397 387
398 GLEnableDisable(GL_SCISSOR_TEST, scissor_test_); 388 GLEnableDisable(GL_SCISSOR_TEST, scissor_test_);
399 389
400 glScissor( 390 glScissor(
401 scissor_box_[0], scissor_box_[1], scissor_box_[2], scissor_box_[3]); 391 scissor_box_[0], scissor_box_[1], scissor_box_[2], scissor_box_[3]);
402 break; 392 break;
403 } 393 }
404 394
405 GLEnableDisable(GL_STENCIL_TEST, stencil_test_); 395 GLEnableDisable(GL_STENCIL_TEST, stencil_state_.stencil_test_enabled);
406 glStencilFuncSeparate( 396 glStencilFuncSeparate(GL_FRONT, stencil_state_.stencil_front_func,
407 GL_FRONT, stencil_front_func_, stencil_front_mask_, stencil_front_ref_); 397 stencil_state_.stencil_front_mask,
408 glStencilFuncSeparate( 398 stencil_state_.stencil_front_ref);
409 GL_BACK, stencil_back_func_, stencil_back_mask_, stencil_back_ref_); 399 glStencilFuncSeparate(GL_BACK, stencil_state_.stencil_back_func,
410 glClearStencil(stencil_clear_); 400 stencil_state_.stencil_back_mask,
411 glStencilMaskSeparate(GL_FRONT, stencil_front_writemask_); 401 stencil_state_.stencil_back_ref);
412 glStencilMaskSeparate(GL_BACK, stencil_back_writemask_); 402 glClearStencil(stencil_state_.stencil_clear);
413 glStencilOpSeparate(GL_FRONT, 403 glStencilMaskSeparate(GL_FRONT, stencil_state_.stencil_front_writemask);
414 stencil_front_fail_op_, 404 glStencilMaskSeparate(GL_BACK, stencil_state_.stencil_back_writemask);
415 stencil_front_z_fail_op_, 405 glStencilOpSeparate(GL_FRONT, stencil_state_.stencil_front_fail_op,
416 stencil_front_z_pass_op_); 406 stencil_state_.stencil_front_z_fail_op,
417 glStencilOpSeparate(GL_BACK, 407 stencil_state_.stencil_front_z_pass_op);
418 stencil_back_fail_op_, 408 glStencilOpSeparate(GL_BACK, stencil_state_.stencil_back_fail_op,
419 stencil_back_z_fail_op_, 409 stencil_state_.stencil_back_z_fail_op,
420 stencil_back_z_pass_op_); 410 stencil_state_.stencil_back_z_pass_op);
421 411
422 // Do not leak GLError out of chromium. 412 // Do not leak GLError out of chromium.
423 ClearGLErrors(true, "Chromium GLError"); 413 ClearGLErrors(true, "Chromium GLError");
424 } 414 }
425 415
426 } // namespace internal 416 } // namespace internal
427 417
428 ScopedAppGLStateRestore::ScopedAppGLStateRestore(CallMode mode) 418 ScopedAppGLStateRestore::ScopedAppGLStateRestore(CallMode mode)
429 : impl_(new internal::ScopedAppGLStateRestoreImpl(mode)) { 419 : impl_(new internal::ScopedAppGLStateRestoreImpl(mode)) {
430 } 420 }
431 421
432 ScopedAppGLStateRestore::~ScopedAppGLStateRestore() {} 422 ScopedAppGLStateRestore::~ScopedAppGLStateRestore() {}
433 423
434 bool ScopedAppGLStateRestore::stencil_enabled() const { 424 StencilState ScopedAppGLStateRestore::stencil_state() const {
435 return impl_->stencil_enabled(); 425 return impl_->stencil_state();
436 } 426 }
437 int ScopedAppGLStateRestore::framebuffer_binding_ext() const { 427 int ScopedAppGLStateRestore::framebuffer_binding_ext() const {
438 return impl_->framebuffer_binding_ext(); 428 return impl_->framebuffer_binding_ext();
439 } 429 }
440 430
441 } // namespace android_webview 431 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/scoped_app_gl_state_restore.h ('k') | android_webview/browser/shared_renderer_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698