OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 6963 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6974 glFramebufferRenderbufferEXT( | 6974 glFramebufferRenderbufferEXT( |
6975 target, GL_DEPTH_ATTACHMENT, renderbuffertarget, service_id); | 6975 target, GL_DEPTH_ATTACHMENT, renderbuffertarget, service_id); |
6976 glFramebufferRenderbufferEXT( | 6976 glFramebufferRenderbufferEXT( |
6977 target, GL_STENCIL_ATTACHMENT, renderbuffertarget, service_id); | 6977 target, GL_STENCIL_ATTACHMENT, renderbuffertarget, service_id); |
6978 } else { | 6978 } else { |
6979 glFramebufferRenderbufferEXT( | 6979 glFramebufferRenderbufferEXT( |
6980 target, attachment, renderbuffertarget, service_id); | 6980 target, attachment, renderbuffertarget, service_id); |
6981 } | 6981 } |
6982 GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer"); | 6982 GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer"); |
6983 if (error == GL_NO_ERROR) { | 6983 if (error == GL_NO_ERROR) { |
6984 framebuffer->AttachRenderbuffer(attachment, renderbuffer); | 6984 if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { |
6985 framebuffer->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer); | |
6986 framebuffer->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer); | |
6987 } else { | |
6988 framebuffer->AttachRenderbuffer(attachment, renderbuffer); | |
6989 } | |
6985 } | 6990 } |
6986 if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) { | 6991 if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) { |
6987 framebuffer_state_.clear_state_dirty = true; | 6992 framebuffer_state_.clear_state_dirty = true; |
6988 } | 6993 } |
6989 OnFboChanged(); | 6994 OnFboChanged(); |
6990 } | 6995 } |
6991 | 6996 |
6992 void GLES2DecoderImpl::DoDisable(GLenum cap) { | 6997 void GLES2DecoderImpl::DoDisable(GLenum cap) { |
6993 if (SetCapabilityState(cap, false)) { | 6998 if (SetCapabilityState(cap, false)) { |
6994 if (cap == GL_PRIMITIVE_RESTART_FIXED_INDEX && | 6999 if (cap == GL_PRIMITIVE_RESTART_FIXED_INDEX && |
(...skipping 4200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
11195 GL_FRAMEBUFFER_COMPLETE) { | 11200 GL_FRAMEBUFFER_COMPLETE) { |
11196 return false; | 11201 return false; |
11197 } | 11202 } |
11198 glClearStencil(0); | 11203 glClearStencil(0); |
11199 state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask); | 11204 state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask); |
11200 state_.SetDeviceStencilMaskSeparate(GL_BACK, kDefaultStencilMask); | 11205 state_.SetDeviceStencilMaskSeparate(GL_BACK, kDefaultStencilMask); |
11201 glClearDepth(1.0f); | 11206 glClearDepth(1.0f); |
11202 state_.SetDeviceDepthMask(GL_TRUE); | 11207 state_.SetDeviceDepthMask(GL_TRUE); |
11203 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, true); | 11208 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, true); |
11204 glScissor(xoffset, yoffset, width, height); | 11209 glScissor(xoffset, yoffset, width, height); |
11205 glClear(GL_DEPTH_BUFFER_BIT | (have_stencil ? GL_STENCIL_BUFFER_BIT : 0)); | 11210 if (format != GL_DEPTH_STENCIL) { |
11206 | 11211 glClear(GL_DEPTH_BUFFER_BIT | (have_stencil ? GL_STENCIL_BUFFER_BIT : 0)); |
11212 } else { | |
11213 // When format is DEPTH_STENCIL, only clear the uncleared part. | |
11214 GLbitfield clear_bits = 0; | |
11215 if (!texture->IsLevelCleared(target, level, GL_DEPTH_ATTACHMENT)) | |
11216 clear_bits |= GL_DEPTH_BUFFER_BIT; | |
11217 if (have_stencil && !texture->IsLevelCleared(target, level, | |
qiankun
2016/07/14 06:48:21
new line after &&
| |
11218 GL_STENCIL_ATTACHMENT)) | |
11219 clear_bits |= GL_STENCIL_BUFFER_BIT; | |
11220 glClear(clear_bits); | |
11221 } | |
11207 RestoreClearState(); | 11222 RestoreClearState(); |
11208 | 11223 |
11209 glDeleteFramebuffersEXT(1, &fb); | 11224 glDeleteFramebuffersEXT(1, &fb); |
11210 Framebuffer* framebuffer = | 11225 Framebuffer* framebuffer = |
11211 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT); | 11226 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT); |
11212 GLuint fb_service_id = | 11227 GLuint fb_service_id = |
11213 framebuffer ? framebuffer->service_id() : GetBackbufferServiceId(); | 11228 framebuffer ? framebuffer->service_id() : GetBackbufferServiceId(); |
11214 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fb_service_id); | 11229 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fb_service_id); |
11215 return true; | 11230 return true; |
11216 } | 11231 } |
(...skipping 5889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
17106 } | 17121 } |
17107 | 17122 |
17108 // Include the auto-generated part of this file. We split this because it means | 17123 // Include the auto-generated part of this file. We split this because it means |
17109 // we can easily edit the non-auto generated parts right here in this file | 17124 // we can easily edit the non-auto generated parts right here in this file |
17110 // instead of having to edit some template or the code generator. | 17125 // instead of having to edit some template or the code generator. |
17111 #include "base/macros.h" | 17126 #include "base/macros.h" |
17112 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 17127 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
17113 | 17128 |
17114 } // namespace gles2 | 17129 } // namespace gles2 |
17115 } // namespace gpu | 17130 } // namespace gpu |
OLD | NEW |