| 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/context_state.h" | 5 #include "gpu/command_buffer/service/context_state.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <cmath> | 9 #include <cmath> |
| 10 | 10 |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 } | 214 } |
| 215 | 215 |
| 216 ContextState::ContextState(FeatureInfo* feature_info, | 216 ContextState::ContextState(FeatureInfo* feature_info, |
| 217 ErrorStateClient* error_state_client, | 217 ErrorStateClient* error_state_client, |
| 218 Logger* logger) | 218 Logger* logger) |
| 219 : active_texture_unit(0), | 219 : active_texture_unit(0), |
| 220 bound_renderbuffer_valid(false), | 220 bound_renderbuffer_valid(false), |
| 221 pack_reverse_row_order(false), | 221 pack_reverse_row_order(false), |
| 222 ignore_cached_state(false), | 222 ignore_cached_state(false), |
| 223 fbo_binding_for_scissor_workaround_dirty(false), | 223 fbo_binding_for_scissor_workaround_dirty(false), |
| 224 framebuffer_srgb_(false), | |
| 225 feature_info_(feature_info), | 224 feature_info_(feature_info), |
| 226 error_state_(ErrorState::Create(error_state_client, logger)) { | 225 error_state_(ErrorState::Create(error_state_client, logger)) { |
| 227 Initialize(); | 226 Initialize(); |
| 228 } | 227 } |
| 229 | 228 |
| 230 ContextState::~ContextState() { | 229 ContextState::~ContextState() { |
| 231 } | 230 } |
| 232 | 231 |
| 233 void ContextState::SetLineWidthBounds(GLfloat min, GLfloat max) { | 232 void ContextState::SetLineWidthBounds(GLfloat min, GLfloat max) { |
| 234 line_width_min_ = min; | 233 line_width_min_ = min; |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 | 497 |
| 499 void ContextState::RestoreState(const ContextState* prev_state) { | 498 void ContextState::RestoreState(const ContextState* prev_state) { |
| 500 RestoreAllTextureUnitBindings(prev_state); | 499 RestoreAllTextureUnitBindings(prev_state); |
| 501 RestoreVertexAttribs(); | 500 RestoreVertexAttribs(); |
| 502 RestoreBufferBindings(); | 501 RestoreBufferBindings(); |
| 503 RestoreRenderbufferBindings(); | 502 RestoreRenderbufferBindings(); |
| 504 RestoreProgramSettings(prev_state, true); | 503 RestoreProgramSettings(prev_state, true); |
| 505 RestoreIndexedUniformBufferBindings(prev_state); | 504 RestoreIndexedUniformBufferBindings(prev_state); |
| 506 RestoreGlobalState(prev_state); | 505 RestoreGlobalState(prev_state); |
| 507 | 506 |
| 508 if (!prev_state) { | 507 // FRAMEBUFFER_SRGB will be restored lazily at render time. |
| 509 if (feature_info_->feature_flags().desktop_srgb_support) { | 508 framebuffer_srgb_valid_ = false; |
| 510 framebuffer_srgb_ = false; | |
| 511 glDisable(GL_FRAMEBUFFER_SRGB); | |
| 512 } | |
| 513 } else if (framebuffer_srgb_ != prev_state->framebuffer_srgb_) { | |
| 514 // FRAMEBUFFER_SRGB will be restored lazily at render time. | |
| 515 framebuffer_srgb_ = prev_state->framebuffer_srgb_; | |
| 516 } | |
| 517 } | 509 } |
| 518 | 510 |
| 519 ErrorState* ContextState::GetErrorState() { | 511 ErrorState* ContextState::GetErrorState() { |
| 520 return error_state_.get(); | 512 return error_state_.get(); |
| 521 } | 513 } |
| 522 | 514 |
| 523 void ContextState::EnableDisable(GLenum pname, bool enable) const { | 515 void ContextState::EnableDisable(GLenum pname, bool enable) const { |
| 524 if (pname == GL_PRIMITIVE_RESTART_FIXED_INDEX && | 516 if (pname == GL_PRIMITIVE_RESTART_FIXED_INDEX && |
| 525 feature_info_->feature_flags().emulate_primitive_restart_fixed_index) { | 517 feature_info_->feature_flags().emulate_primitive_restart_fixed_index) { |
| 526 // GLES2DecoderImpl::DoDrawElements can handle this situation | 518 // GLES2DecoderImpl::DoDrawElements can handle this situation |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 PixelStoreParams params; | 691 PixelStoreParams params; |
| 700 params.alignment = unpack_alignment; | 692 params.alignment = unpack_alignment; |
| 701 params.row_length = unpack_row_length; | 693 params.row_length = unpack_row_length; |
| 702 if (dimension == k3D) { | 694 if (dimension == k3D) { |
| 703 params.image_height = unpack_image_height; | 695 params.image_height = unpack_image_height; |
| 704 } | 696 } |
| 705 return params; | 697 return params; |
| 706 } | 698 } |
| 707 | 699 |
| 708 void ContextState::EnableDisableFramebufferSRGB(bool enable) { | 700 void ContextState::EnableDisableFramebufferSRGB(bool enable) { |
| 709 if (framebuffer_srgb_ == enable) | 701 if (framebuffer_srgb_valid_ && framebuffer_srgb_ == enable) |
| 710 return; | 702 return; |
| 711 EnableDisable(GL_FRAMEBUFFER_SRGB, enable); | 703 EnableDisable(GL_FRAMEBUFFER_SRGB, enable); |
| 712 framebuffer_srgb_ = enable; | 704 framebuffer_srgb_ = enable; |
| 705 framebuffer_srgb_valid_ = true; |
| 713 } | 706 } |
| 714 | 707 |
| 715 void ContextState::InitStateManual(const ContextState*) const { | 708 void ContextState::InitStateManual(const ContextState*) const { |
| 716 // Here we always reset the states whether it's different from previous ones. | 709 // Here we always reset the states whether it's different from previous ones. |
| 717 // We have very limited states here; also, once we switch to MANGLE, MANGLE | 710 // We have very limited states here; also, once we switch to MANGLE, MANGLE |
| 718 // will opmitize this. | 711 // will opmitize this. |
| 719 UpdatePackParameters(); | 712 UpdatePackParameters(); |
| 720 UpdateUnpackParameters(); | 713 UpdateUnpackParameters(); |
| 721 } | 714 } |
| 722 | 715 |
| 723 // Include the auto-generated part of this file. We split this because it means | 716 // Include the auto-generated part of this file. We split this because it means |
| 724 // we can easily edit the non-auto generated parts right here in this file | 717 // we can easily edit the non-auto generated parts right here in this file |
| 725 // instead of having to edit some template or the code generator. | 718 // instead of having to edit some template or the code generator. |
| 726 #include "gpu/command_buffer/service/context_state_impl_autogen.h" | 719 #include "gpu/command_buffer/service/context_state_impl_autogen.h" |
| 727 | 720 |
| 728 } // namespace gles2 | 721 } // namespace gles2 |
| 729 } // namespace gpu | 722 } // namespace gpu |
| OLD | NEW |