| 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 <stdio.h> | 7 #include <stdio.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <list> | 10 #include <list> |
| (...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 virtual void AddProcessingCommandsTime(base::TimeDelta) OVERRIDE; | 579 virtual void AddProcessingCommandsTime(base::TimeDelta) OVERRIDE; |
| 580 | 580 |
| 581 // Restores the current state to the user's settings. | 581 // Restores the current state to the user's settings. |
| 582 void RestoreCurrentFramebufferBindings(); | 582 void RestoreCurrentFramebufferBindings(); |
| 583 void RestoreCurrentRenderbufferBindings(); | 583 void RestoreCurrentRenderbufferBindings(); |
| 584 void RestoreCurrentTexture2DBindings(); | 584 void RestoreCurrentTexture2DBindings(); |
| 585 | 585 |
| 586 // Sets DEPTH_TEST, STENCIL_TEST and color mask for the current framebuffer. | 586 // Sets DEPTH_TEST, STENCIL_TEST and color mask for the current framebuffer. |
| 587 void ApplyDirtyState(); | 587 void ApplyDirtyState(); |
| 588 | 588 |
| 589 // Reapply the texture parameters to the given texture. | |
| 590 void BindAndApplyTextureParameters(TextureManager::TextureInfo* info); | |
| 591 | |
| 592 // These check the state of the currently bound framebuffer or the | 589 // These check the state of the currently bound framebuffer or the |
| 593 // backbuffer if no framebuffer is bound. | 590 // backbuffer if no framebuffer is bound. |
| 594 bool BoundFramebufferHasColorAttachmentWithAlpha(); | 591 bool BoundFramebufferHasColorAttachmentWithAlpha(); |
| 595 bool BoundFramebufferHasDepthAttachment(); | 592 bool BoundFramebufferHasDepthAttachment(); |
| 596 bool BoundFramebufferHasStencilAttachment(); | 593 bool BoundFramebufferHasStencilAttachment(); |
| 597 | 594 |
| 598 virtual error::ContextLostReason GetContextLostReason() OVERRIDE; | 595 virtual error::ContextLostReason GetContextLostReason() OVERRIDE; |
| 599 | 596 |
| 600 private: | 597 private: |
| 601 friend class ScopedGLErrorSuppressor; | 598 friend class ScopedGLErrorSuppressor; |
| (...skipping 2956 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3558 GL_BACK, have_stencil ? state_.stencil_back_writemask : 0); | 3555 GL_BACK, have_stencil ? state_.stencil_back_writemask : 0); |
| 3559 EnableDisable( | 3556 EnableDisable( |
| 3560 GL_STENCIL_TEST, state_.enable_flags.stencil_test && have_stencil); | 3557 GL_STENCIL_TEST, state_.enable_flags.stencil_test && have_stencil); |
| 3561 EnableDisable(GL_CULL_FACE, state_.enable_flags.cull_face); | 3558 EnableDisable(GL_CULL_FACE, state_.enable_flags.cull_face); |
| 3562 EnableDisable(GL_SCISSOR_TEST, state_.enable_flags.scissor_test); | 3559 EnableDisable(GL_SCISSOR_TEST, state_.enable_flags.scissor_test); |
| 3563 EnableDisable(GL_BLEND, state_.enable_flags.blend); | 3560 EnableDisable(GL_BLEND, state_.enable_flags.blend); |
| 3564 clear_state_dirty_ = false; | 3561 clear_state_dirty_ = false; |
| 3565 } | 3562 } |
| 3566 } | 3563 } |
| 3567 | 3564 |
| 3568 void GLES2DecoderImpl::BindAndApplyTextureParameters( | |
| 3569 TextureManager::TextureInfo* info) { | |
| 3570 glBindTexture(info->target(), info->service_id()); | |
| 3571 glTexParameteri(info->target(), GL_TEXTURE_MIN_FILTER, info->min_filter()); | |
| 3572 glTexParameteri(info->target(), GL_TEXTURE_MAG_FILTER, info->mag_filter()); | |
| 3573 glTexParameteri(info->target(), GL_TEXTURE_WRAP_S, info->wrap_s()); | |
| 3574 glTexParameteri(info->target(), GL_TEXTURE_WRAP_T, info->wrap_t()); | |
| 3575 } | |
| 3576 | |
| 3577 GLuint GLES2DecoderImpl::GetBackbufferServiceId() const { | 3565 GLuint GLES2DecoderImpl::GetBackbufferServiceId() const { |
| 3578 return (offscreen_target_frame_buffer_.get()) ? | 3566 return (offscreen_target_frame_buffer_.get()) ? |
| 3579 offscreen_target_frame_buffer_->id() : | 3567 offscreen_target_frame_buffer_->id() : |
| 3580 (surface_ ? surface_->GetBackingFrameBufferObject() : 0); | 3568 (surface_ ? surface_->GetBackingFrameBufferObject() : 0); |
| 3581 } | 3569 } |
| 3582 | 3570 |
| 3583 void GLES2DecoderImpl::RestoreState() const { | 3571 void GLES2DecoderImpl::RestoreState() const { |
| 3584 state_.RestoreState(); | 3572 state_.RestoreState(); |
| 3585 | 3573 |
| 3586 // TODO: Restore multisample bindings | 3574 // TODO: Restore multisample bindings |
| (...skipping 6053 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9640 *reinterpret_cast<const MailboxName*>(mailbox), | 9628 *reinterpret_cast<const MailboxName*>(mailbox), |
| 9641 definition, | 9629 definition, |
| 9642 texture_manager())) { | 9630 texture_manager())) { |
| 9643 bool success = texture_manager()->Restore(info, definition); | 9631 bool success = texture_manager()->Restore(info, definition); |
| 9644 DCHECK(success); | 9632 DCHECK(success); |
| 9645 SetGLError(GL_INVALID_OPERATION, | 9633 SetGLError(GL_INVALID_OPERATION, |
| 9646 "glProduceTextureCHROMIUM", "invalid mailbox name"); | 9634 "glProduceTextureCHROMIUM", "invalid mailbox name"); |
| 9647 return; | 9635 return; |
| 9648 } | 9636 } |
| 9649 | 9637 |
| 9650 BindAndApplyTextureParameters(info); | 9638 glBindTexture(info->target(), info->service_id()); |
| 9651 } | 9639 } |
| 9652 | 9640 |
| 9653 void GLES2DecoderImpl::DoConsumeTextureCHROMIUM(GLenum target, | 9641 void GLES2DecoderImpl::DoConsumeTextureCHROMIUM(GLenum target, |
| 9654 const GLbyte* mailbox) { | 9642 const GLbyte* mailbox) { |
| 9655 TextureManager::TextureInfo* info = GetTextureInfoForTarget(target); | 9643 TextureManager::TextureInfo* info = GetTextureInfoForTarget(target); |
| 9656 if (!info) { | 9644 if (!info) { |
| 9657 SetGLError(GL_INVALID_OPERATION, | 9645 SetGLError(GL_INVALID_OPERATION, |
| 9658 "glConsumeTextureCHROMIUM", "unknown texture for target"); | 9646 "glConsumeTextureCHROMIUM", "unknown texture for target"); |
| 9659 return; | 9647 return; |
| 9660 } | 9648 } |
| 9661 | 9649 |
| 9662 scoped_ptr<TextureDefinition> definition( | 9650 scoped_ptr<TextureDefinition> definition( |
| 9663 group_->mailbox_manager()->ConsumeTexture( | 9651 group_->mailbox_manager()->ConsumeTexture( |
| 9664 target, | 9652 target, |
| 9665 *reinterpret_cast<const MailboxName*>(mailbox))); | 9653 *reinterpret_cast<const MailboxName*>(mailbox))); |
| 9666 if (!definition.get()) { | 9654 if (!definition.get()) { |
| 9667 SetGLError(GL_INVALID_OPERATION, | 9655 SetGLError(GL_INVALID_OPERATION, |
| 9668 "glConsumeTextureCHROMIUM", "invalid mailbox name"); | 9656 "glConsumeTextureCHROMIUM", "invalid mailbox name"); |
| 9669 return; | 9657 return; |
| 9670 } | 9658 } |
| 9671 | 9659 |
| 9672 if (!texture_manager()->Restore(info, definition.release())) { | 9660 if (!texture_manager()->Restore(info, definition.release())) { |
| 9673 SetGLError(GL_INVALID_OPERATION, | 9661 SetGLError(GL_INVALID_OPERATION, |
| 9674 "glConsumeTextureCHROMIUM", "invalid texture"); | 9662 "glConsumeTextureCHROMIUM", "invalid texture"); |
| 9675 return; | 9663 return; |
| 9676 } | 9664 } |
| 9677 | 9665 |
| 9678 BindAndApplyTextureParameters(info); | 9666 glBindTexture(info->target(), info->service_id()); |
| 9679 } | 9667 } |
| 9680 | 9668 |
| 9681 void GLES2DecoderImpl::DoInsertEventMarkerEXT( | 9669 void GLES2DecoderImpl::DoInsertEventMarkerEXT( |
| 9682 GLsizei length, const GLchar* marker) { | 9670 GLsizei length, const GLchar* marker) { |
| 9683 if (!marker) { | 9671 if (!marker) { |
| 9684 marker = ""; | 9672 marker = ""; |
| 9685 } | 9673 } |
| 9686 debug_marker_manager_.SetMarker( | 9674 debug_marker_manager_.SetMarker( |
| 9687 length ? std::string(marker, length) : std::string(marker)); | 9675 length ? std::string(marker, length) : std::string(marker)); |
| 9688 } | 9676 } |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10006 return error::kNoError; | 9994 return error::kNoError; |
| 10007 } | 9995 } |
| 10008 | 9996 |
| 10009 // Include the auto-generated part of this file. We split this because it means | 9997 // Include the auto-generated part of this file. We split this because it means |
| 10010 // we can easily edit the non-auto generated parts right here in this file | 9998 // we can easily edit the non-auto generated parts right here in this file |
| 10011 // instead of having to edit some template or the code generator. | 9999 // instead of having to edit some template or the code generator. |
| 10012 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 10000 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
| 10013 | 10001 |
| 10014 } // namespace gles2 | 10002 } // namespace gles2 |
| 10015 } // namespace gpu | 10003 } // namespace gpu |
| OLD | NEW |