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

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

Issue 19787007: [Android WebView] More App GL state save/restore (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « android_webview/browser/scoped_app_gl_state_restore.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "ui/gl/gl_context.h" 8 #include "ui/gl/gl_context.h"
9 #include "ui/gl/gl_surface_stub.h" 9 #include "ui/gl/gl_surface_stub.h"
10 10
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 glGetVertexAttribiv( 82 glGetVertexAttribiv(
83 i, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &vertex_attrib_[i].normalized); 83 i, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &vertex_attrib_[i].normalized);
84 glGetVertexAttribiv( 84 glGetVertexAttribiv(
85 i, GL_VERTEX_ATTRIB_ARRAY_STRIDE, &vertex_attrib_[i].stride); 85 i, GL_VERTEX_ATTRIB_ARRAY_STRIDE, &vertex_attrib_[i].stride);
86 glGetVertexAttribPointerv( 86 glGetVertexAttribPointerv(
87 i, GL_VERTEX_ATTRIB_ARRAY_POINTER, &vertex_attrib_[i].pointer); 87 i, GL_VERTEX_ATTRIB_ARRAY_POINTER, &vertex_attrib_[i].pointer);
88 } 88 }
89 89
90 glGetBooleanv(GL_DEPTH_TEST, &depth_test_); 90 glGetBooleanv(GL_DEPTH_TEST, &depth_test_);
91 glGetBooleanv(GL_CULL_FACE, &cull_face_); 91 glGetBooleanv(GL_CULL_FACE, &cull_face_);
92 glGetIntegerv(GL_CULL_FACE_MODE, &cull_face_mode_);
92 glGetBooleanv(GL_COLOR_WRITEMASK, color_mask_); 93 glGetBooleanv(GL_COLOR_WRITEMASK, color_mask_);
93 glGetBooleanv(GL_BLEND, &blend_enabled_);
94 glGetIntegerv(GL_BLEND_SRC_RGB, &blend_src_rgb_);
95 glGetIntegerv(GL_BLEND_SRC_ALPHA, &blend_src_alpha_);
96 glGetIntegerv(GL_BLEND_DST_RGB, &blend_dest_rgb_);
97 glGetIntegerv(GL_BLEND_DST_ALPHA, &blend_dest_alpha_);
98 glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture_);
99 glGetIntegerv(GL_VIEWPORT, viewport_);
100 glGetBooleanv(GL_SCISSOR_TEST, &scissor_test_);
101 glGetIntegerv(GL_SCISSOR_BOX, scissor_box_);
102 glGetIntegerv(GL_CURRENT_PROGRAM, &current_program_); 94 glGetIntegerv(GL_CURRENT_PROGRAM, &current_program_);
95 glGetFloatv(GL_COLOR_CLEAR_VALUE, color_clear_);
96 glGetFloatv(GL_DEPTH_CLEAR_VALUE, &depth_clear_);
97 glGetIntegerv(GL_STENCIL_CLEAR_VALUE, &stencil_clear_value_);
98 glGetIntegerv(GL_STENCIL_CLEAR_VALUE, &stencil_clear_value_);
joth 2013/07/23 05:52:57 you got this one twice.
boliu 2013/07/23 20:41:24 Done.
99 glGetIntegerv(GL_DEPTH_FUNC, &depth_func_);
100 glGetBooleanv(GL_DEPTH_WRITEMASK, &depth_mask_);
101 glGetFloatv(GL_DEPTH_RANGE, depth_rage_);
102 glGetIntegerv(GL_FRONT_FACE, &front_face_);
103 glGetIntegerv(GL_GENERATE_MIPMAP_HINT, &hint_generate_mipmap_);
104 glGetFloatv(GL_LINE_WIDTH, &line_width_);
105 glGetFloatv(GL_POLYGON_OFFSET_FACTOR, &polygon_offset_factor_);
106 glGetFloatv(GL_POLYGON_OFFSET_UNITS, &polygon_offset_units_);
107 glGetFloatv(GL_SAMPLE_COVERAGE_VALUE, &sample_coverage_value_);
108 glGetBooleanv(GL_SAMPLE_COVERAGE_INVERT, &sample_coverage_invert_);
109 glGetIntegerv(GL_STENCIL_FUNC, &stencil_front_func_);
110 glGetIntegerv(GL_STENCIL_REF, &stencil_front_ref_);
111 glGetIntegerv(GL_STENCIL_VALUE_MASK, &stencil_front_mask_);
112 glGetIntegerv(GL_STENCIL_BACK_FUNC, &stencil_back_func_);
113 glGetIntegerv(GL_STENCIL_BACK_REF, &stencil_back_ref_);
114 glGetIntegerv(GL_STENCIL_BACK_VALUE_MASK, &stencil_back_mask_);
115 glGetIntegerv(GL_STENCIL_WRITEMASK, &stencil_front_writemask_);
116 glGetIntegerv(GL_STENCIL_BACK_WRITEMASK, &stencil_back_writemask_);
117 glGetIntegerv(GL_STENCIL_FAIL, &stencil_front_fail_op_);
118 glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, &stencil_front_z_fail_op_);
119 glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS, &stencil_front_z_pass_op_);
120 glGetIntegerv(GL_STENCIL_BACK_FAIL, &stencil_back_fail_op_);
121 glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_FAIL, &stencil_back_z_fail_op_);
122 glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_PASS, &stencil_back_z_pass_op_);
joth 2013/07/23 05:52:57 Lets chat this through with aelias. Stencil should
boliu 2013/07/23 20:41:24 Let's just not restore stencil here for now then.
123
124 glGetBooleanv(GL_DITHER, &enable_dither_);
125 glGetBooleanv(GL_POLYGON_OFFSET_FILL, &enable_polygon_offset_fill_);
126 glGetBooleanv(GL_SAMPLE_ALPHA_TO_COVERAGE, &enable_sample_alpha_to_coverage_);
127 glGetBooleanv(GL_SAMPLE_COVERAGE, &enable_sample_coverage_);
128 glGetBooleanv(GL_STENCIL_TEST, &enable_stencil_test_);
103 } 129 }
104 130
105 ScopedAppGLStateRestore::~ScopedAppGLStateRestore() { 131 ScopedAppGLStateRestore::~ScopedAppGLStateRestore() {
106 MakeAppContextCurrent(); 132 MakeAppContextCurrent();
107 133
108 glBindBuffer(GL_ARRAY_BUFFER, vertex_array_buffer_binding_); 134 glBindBuffer(GL_ARRAY_BUFFER, vertex_array_buffer_binding_);
109 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_array_buffer_binding_); 135 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_array_buffer_binding_);
110 136
111 glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_external_oes_binding_); 137 glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_external_oes_binding_);
112 glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment_); 138 glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment_);
(...skipping 18 matching lines...) Expand all
131 glEnable(GL_DEPTH_TEST); 157 glEnable(GL_DEPTH_TEST);
132 } else { 158 } else {
133 glDisable(GL_DEPTH_TEST); 159 glDisable(GL_DEPTH_TEST);
134 } 160 }
135 161
136 if (cull_face_) { 162 if (cull_face_) {
137 glEnable(GL_CULL_FACE); 163 glEnable(GL_CULL_FACE);
138 } else { 164 } else {
139 glDisable(GL_CULL_FACE); 165 glDisable(GL_CULL_FACE);
140 } 166 }
167 glCullFace(cull_face_mode_);
141 168
142 glColorMask(color_mask_[0], color_mask_[1], color_mask_[2], color_mask_[3]); 169 glColorMask(color_mask_[0], color_mask_[1], color_mask_[2], color_mask_[3]);
143 170
144 if (blend_enabled_) { 171 glUseProgram(current_program_);
145 glEnable(GL_BLEND);
146 } else {
147 glDisable(GL_BLEND);
148 }
149 172
150 glBlendFuncSeparate( 173 glClearColor(
151 blend_src_rgb_, blend_dest_rgb_, blend_src_alpha_, blend_dest_alpha_); 174 color_clear_[0], color_clear_[1], color_clear_[2], color_clear_[3]);
152 glActiveTexture(active_texture_); 175 glClearDepth(depth_clear_);
176 glClearStencil(stencil_clear_value_);
177 glDepthFunc(depth_func_);
178 glDepthMask(depth_mask_);
179 glDepthRange(depth_rage_[0], depth_rage_[1]);
180 glFrontFace(front_face_);
181 glHint(GL_GENERATE_MIPMAP_HINT, hint_generate_mipmap_);
182 // TODO(boliu): GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES ??
183 glLineWidth(line_width_);
184 glPolygonOffset(polygon_offset_factor_, polygon_offset_units_);
185 glSampleCoverage(sample_coverage_value_, sample_coverage_invert_);
186 glStencilFuncSeparate(
187 GL_FRONT, stencil_front_func_, stencil_front_ref_, stencil_front_mask_);
188 glStencilFuncSeparate(
189 GL_BACK, stencil_back_func_, stencil_back_ref_, stencil_back_mask_);
190 glStencilMaskSeparate(GL_FRONT, stencil_front_writemask_);
191 glStencilMaskSeparate(GL_BACK, stencil_back_writemask_);
192 glStencilOpSeparate(GL_FRONT,
193 stencil_front_fail_op_,
194 stencil_front_z_fail_op_,
195 stencil_front_z_pass_op_);
196 glStencilOpSeparate(GL_BACK,
197 stencil_back_fail_op_,
198 stencil_back_z_fail_op_,
199 stencil_back_z_pass_op_);
153 200
154 glViewport(viewport_[0], viewport_[1], viewport_[2], viewport_[3]); 201 if (enable_dither_)
202 glEnable(GL_DITHER);
203 else
204 glDisable(GL_DITHER);
155 205
156 if (scissor_test_) { 206 if (enable_polygon_offset_fill_)
157 glEnable(GL_SCISSOR_TEST); 207 glEnable(GL_POLYGON_OFFSET_FILL);
158 } else { 208 else
159 glDisable(GL_SCISSOR_TEST); 209 glDisable(GL_POLYGON_OFFSET_FILL);
160 }
161 210
162 glScissor( 211 if (enable_sample_alpha_to_coverage_)
163 scissor_box_[0], scissor_box_[1], scissor_box_[2], scissor_box_[3]); 212 glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);
213 else
214 glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
164 215
165 glUseProgram(current_program_); 216 if (enable_sample_coverage_)
217 glEnable(GL_SAMPLE_COVERAGE);
218 else
219 glDisable(GL_SAMPLE_COVERAGE);
220
221 if (enable_stencil_test_)
222 glEnable(GL_STENCIL_TEST);
223 else
224 glDisable(GL_STENCIL_TEST);
166 } 225 }
167 226
168 } // namespace android_webview 227 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/scoped_app_gl_state_restore.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698