Chromium Code Reviews| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
| index 6df7f6a2f816a89bb6e37149101e0a60c27a2da4..21b4c80ac5b4e6a2dc03901803b7e2bcf2d5b91a 100644 |
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
| @@ -6981,7 +6981,12 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer( |
| } |
| GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer"); |
| if (error == GL_NO_ERROR) { |
| - framebuffer->AttachRenderbuffer(attachment, renderbuffer); |
| + if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { |
| + framebuffer->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer); |
| + framebuffer->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer); |
| + } else { |
| + framebuffer->AttachRenderbuffer(attachment, renderbuffer); |
| + } |
| } |
| if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) { |
| framebuffer_state_.clear_state_dirty = true; |
| @@ -11202,8 +11207,18 @@ bool GLES2DecoderImpl::ClearLevel(Texture* texture, |
| state_.SetDeviceDepthMask(GL_TRUE); |
| state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, true); |
| glScissor(xoffset, yoffset, width, height); |
| - glClear(GL_DEPTH_BUFFER_BIT | (have_stencil ? GL_STENCIL_BUFFER_BIT : 0)); |
| - |
| + if (format != GL_DEPTH_STENCIL) { |
| + glClear(GL_DEPTH_BUFFER_BIT | (have_stencil ? GL_STENCIL_BUFFER_BIT : 0)); |
| + } else { |
| + // When format is DEPTH_STENCIL, only clear the uncleared part. |
| + GLbitfield clear_bits = 0; |
| + if (!texture->IsLevelCleared(target, level, GL_DEPTH_ATTACHMENT)) |
| + clear_bits |= GL_DEPTH_BUFFER_BIT; |
| + if (have_stencil && !texture->IsLevelCleared(target, level, |
|
qiankun
2016/07/14 06:48:21
new line after &&
|
| + GL_STENCIL_ATTACHMENT)) |
| + clear_bits |= GL_STENCIL_BUFFER_BIT; |
| + glClear(clear_bits); |
| + } |
| RestoreClearState(); |
| glDeleteFramebuffersEXT(1, &fb); |