summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-29 01:34:07 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-29 01:34:07 +0000
commit1f839859a98e63038df8f3252e01daedf63f68f1 (patch)
treed3741a9c70285c7d3b9758319ecd0f0f4723b4eb /android_webview
parent8876310adb585c1639c64b50432793f2ac35a513 (diff)
downloadchromium_src-1f839859a98e63038df8f3252e01daedf63f68f1.zip
chromium_src-1f839859a98e63038df8f3252e01daedf63f68f1.tar.gz
chromium_src-1f839859a98e63038df8f3252e01daedf63f68f1.tar.bz2
Fix app gl state restore
GL_ARRAY_BUFFER and GL_ELEMENT_ARRAY_BUFFER could definitely be non-zero, as seen in testing. So always restore 0. Also move them to the last things to be restored. This patch seem to be helping a lot with not destroying app UIs. BUG=230195 NOTRY=true Review URL: https://chromiumcodereview.appspot.com/16096004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202737 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-rw-r--r--android_webview/browser/in_process_renderer/in_process_view_renderer.cc25
1 files changed, 15 insertions, 10 deletions
diff --git a/android_webview/browser/in_process_renderer/in_process_view_renderer.cc b/android_webview/browser/in_process_renderer/in_process_view_renderer.cc
index 6ecdd62..0121f11 100644
--- a/android_webview/browser/in_process_renderer/in_process_view_renderer.cc
+++ b/android_webview/browser/in_process_renderer/in_process_view_renderer.cc
@@ -49,11 +49,20 @@ namespace {
class GLStateRestore {
public:
GLStateRestore() {
+#if !defined(NDEBUG)
+ {
+ GLint vertex_array_buffer_binding;
+ glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &vertex_array_buffer_binding);
+ DCHECK_EQ(0, vertex_array_buffer_binding);
+
+ GLint index_array_buffer_binding;
+ glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING,
+ &index_array_buffer_binding);
+ DCHECK_EQ(0, index_array_buffer_binding);
+ }
+#endif // !defined(NDEBUG)
glGetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES,
&texture_external_oes_binding_);
- glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &vertex_array_buffer_binding_);
- glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING,
- &index_array_buffer_binding_);
glGetIntegerv(GL_PACK_ALIGNMENT, &pack_alignment_);
glGetIntegerv(GL_UNPACK_ALIGNMENT, &unpack_alignment_);
@@ -85,15 +94,10 @@ class GLStateRestore {
glGetBooleanv(GL_SCISSOR_TEST, &scissor_test_);
glGetIntegerv(GL_SCISSOR_BOX, scissor_box_);
glGetIntegerv(GL_CURRENT_PROGRAM, &current_program_);
-
- DCHECK_EQ(0, vertex_array_buffer_binding_);
- DCHECK_EQ(0, index_array_buffer_binding_);
}
~GLStateRestore() {
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_);
@@ -148,12 +152,13 @@ class GLStateRestore {
scissor_box_[0], scissor_box_[1], scissor_box_[2], scissor_box_[3]);
glUseProgram(current_program_);
+
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
private:
GLint texture_external_oes_binding_;
- GLint vertex_array_buffer_binding_;
- GLint index_array_buffer_binding_;
GLint pack_alignment_;
GLint unpack_alignment_;