summaryrefslogtreecommitdiffstats
path: root/android_webview/native/aw_contents.cc
diff options
context:
space:
mode:
authorleandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-20 20:23:28 +0000
committerleandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-20 20:23:28 +0000
commit2bae06b326dedf29d7b04380173beaf5d9f203ab (patch)
tree3852fdf4954861ca43d6169ce386250bfc1ffffb /android_webview/native/aw_contents.cc
parente7146cef7148efeaa5b22404e1e3f94aec14749f (diff)
downloadchromium_src-2bae06b326dedf29d7b04380173beaf5d9f203ab.zip
chromium_src-2bae06b326dedf29d7b04380173beaf5d9f203ab.tar.gz
chromium_src-2bae06b326dedf29d7b04380173beaf5d9f203ab.tar.bz2
[Android WebView] Add a system property to disable OpenGL state restoration in the draw functor.
Add support to disable GL state restoration in Android GL functor calls when the webview.chromium_no_gl_restore property is set to "true". BUG=164140 Review URL: https://chromiumcodereview.appspot.com/11636038 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@174221 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/native/aw_contents.cc')
-rw-r--r--android_webview/native/aw_contents.cc90
1 files changed, 49 insertions, 41 deletions
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 4373b2b..267f6f3 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"
@@ -347,58 +349,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.";
+ } 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);
+ }
// ---------------------------------------------------------------------------
}