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