Chromium Code Reviews| Index: android_webview/native/aw_contents.cc |
| diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc |
| index c3abd810d484cec2b0be9c55174c77882c0b9697..7bd39f4dbf167a1f2b260e5e6d90f45b10b440c9 100644 |
| --- a/android_webview/native/aw_contents.cc |
| +++ b/android_webview/native/aw_contents.cc |
| @@ -4,6 +4,8 @@ |
| #include "android_webview/native/aw_contents.h" |
| +#include <sys/system_properties.h> |
| + |
| #include "android_webview/browser/aw_browser_main_parts.h" |
| #include "android_webview/browser/net_disk_cache_remover.h" |
| #include "android_webview/browser/renderer_host/aw_render_view_host_ext.h" |
| @@ -340,58 +342,64 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) { |
| // TODO(leandrogracia): remove when crbug.com/164140 is closed. |
| // --------------------------------------------------------------------------- |
| - glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_external_oes_binding); |
| - glBindBuffer(GL_ARRAY_BUFFER, vertex_array_buffer_binding); |
| - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_array_buffer_binding); |
| - |
| - glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment); |
| - glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment); |
| - |
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(vertex_attrib); ++i) { |
| - glVertexAttribPointer(i, vertex_attrib[i].size, |
| - vertex_attrib[i].type, vertex_attrib[i].normalized, |
| - vertex_attrib[i].stride, vertex_attrib[i].pointer); |
| + char no_gl_restore_prop[PROP_VALUE_MAX]; |
| + __system_property_get("webview.chromium_no_gl_restore", no_gl_restore_prop); |
| + if (!strcmp(no_gl_restore_prop, "true")) { |
| + LOG(WARNING) << "Android GL functor not restoring the previous GL state."; |
|
joth
2012/12/20 02:52:18
could just return here instead?
(it maybe just the
Leandro GraciĆ” Gil
2012/12/20 03:32:14
We could, but I'd prefer to keep the block as much
|
| + } else { |
| + glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_external_oes_binding); |
| + glBindBuffer(GL_ARRAY_BUFFER, vertex_array_buffer_binding); |
| + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_array_buffer_binding); |
| + |
| + glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment); |
| + glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment); |
| + |
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(vertex_attrib); ++i) { |
| + glVertexAttribPointer(i, vertex_attrib[i].size, |
| + vertex_attrib[i].type, vertex_attrib[i].normalized, |
| + vertex_attrib[i].stride, vertex_attrib[i].pointer); |
| + |
| + if (vertex_attrib[i].enabled) |
| + glEnableVertexAttribArray(i); |
| + else |
| + glDisableVertexAttribArray(i); |
| + } |
| - if (vertex_attrib[i].enabled) |
| - glEnableVertexAttribArray(i); |
| + if (depth_test) |
| + glEnable(GL_DEPTH_TEST); |
| else |
| - glDisableVertexAttribArray(i); |
| - } |
| - |
| - if (depth_test) |
| - glEnable(GL_DEPTH_TEST); |
| - else |
| - glDisable(GL_DEPTH_TEST); |
| + glDisable(GL_DEPTH_TEST); |
| - if (cull_face) |
| - glEnable(GL_CULL_FACE); |
| - else |
| - glDisable(GL_CULL_FACE); |
| + if (cull_face) |
| + glEnable(GL_CULL_FACE); |
| + else |
| + glDisable(GL_CULL_FACE); |
| - glColorMask(color_mask[0], color_mask[1], color_mask[2], |
| - color_mask[3]); |
| + glColorMask(color_mask[0], color_mask[1], color_mask[2], |
| + color_mask[3]); |
| - if (blend_enabled) |
| - glEnable(GL_BLEND); |
| - else |
| - glDisable(GL_BLEND); |
| + if (blend_enabled) |
| + glEnable(GL_BLEND); |
| + else |
| + glDisable(GL_BLEND); |
| - glBlendFuncSeparate(blend_src_rgb, blend_dest_rgb, |
| - blend_src_alpha, blend_dest_alpha); |
| + glBlendFuncSeparate(blend_src_rgb, blend_dest_rgb, |
| + blend_src_alpha, blend_dest_alpha); |
| - glActiveTexture(active_texture); |
| + glActiveTexture(active_texture); |
| - glViewport(viewport[0], viewport[1], viewport[2], viewport[3]); |
| + glViewport(viewport[0], viewport[1], viewport[2], viewport[3]); |
| - if (scissor_test) |
| - glEnable(GL_SCISSOR_TEST); |
| - else |
| - glDisable(GL_SCISSOR_TEST); |
| + if (scissor_test) |
| + glEnable(GL_SCISSOR_TEST); |
| + else |
| + glDisable(GL_SCISSOR_TEST); |
| - glScissor(scissor_box[0], scissor_box[1], scissor_box[2], |
| - scissor_box[3]); |
| + glScissor(scissor_box[0], scissor_box[1], scissor_box[2], |
| + scissor_box[3]); |
| - glUseProgram(current_program); |
| + glUseProgram(current_program); |
| + } |
| // --------------------------------------------------------------------------- |
| } |