15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gl_state_restorer_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GLStateRestorerImpl::GLStateRestorerImpl( 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtr<gles2::GLES2Decoder> decoder) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : decoder_(decoder) { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLStateRestorerImpl::~GLStateRestorerImpl() { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool GLStateRestorerImpl::IsInitialized() { 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(decoder_.get()); 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return decoder_->initialized(); 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void GLStateRestorerImpl::RestoreState(const gfx::GLStateRestorer* prev_state) { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(decoder_.get()); 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GLStateRestorerImpl* restorer_impl = 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<const GLStateRestorerImpl*>(prev_state); 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) decoder_->RestoreState( 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) restorer_impl ? restorer_impl->GetContextState() : NULL); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void GLStateRestorerImpl::RestoreAllTextureUnitBindings() { 33a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) DCHECK(decoder_.get()); 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) decoder_->RestoreAllTextureUnitBindings(NULL); 35a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 36a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid GLStateRestorerImpl::RestoreActiveTextureUnitBinding(unsigned int target) { 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK(decoder_.get()); 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch decoder_->RestoreActiveTextureUnitBinding(target); 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 42a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void GLStateRestorerImpl::RestoreFramebufferBindings() { 43a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) DCHECK(decoder_.get()); 44a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) decoder_->RestoreFramebufferBindings(); 45a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 46a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const gles2::ContextState* GLStateRestorerImpl::GetContextState() const { 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(decoder_.get()); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return decoder_->GetContextState(); 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gpu 53