diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-29 01:34:07 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-29 01:34:07 +0000 |
commit | 1f839859a98e63038df8f3252e01daedf63f68f1 (patch) | |
tree | d3741a9c70285c7d3b9758319ecd0f0f4723b4eb /android_webview | |
parent | 8876310adb585c1639c64b50432793f2ac35a513 (diff) | |
download | chromium_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.cc | 25 |
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, ¤t_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_; |