diff options
Diffstat (limited to 'gpu/command_buffer/service/gpu_scheduler_linux.cc')
-rw-r--r-- | gpu/command_buffer/service/gpu_scheduler_linux.cc | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/gpu/command_buffer/service/gpu_scheduler_linux.cc b/gpu/command_buffer/service/gpu_scheduler_linux.cc new file mode 100644 index 0000000..48ed470 --- /dev/null +++ b/gpu/command_buffer/service/gpu_scheduler_linux.cc @@ -0,0 +1,67 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "gpu/command_buffer/service/gpu_scheduler.h" +#include "ui/gfx/gl/gl_context.h" + +using ::base::SharedMemory; + +namespace gpu { + +bool GpuScheduler::Initialize( + gfx::PluginWindowHandle window, + const gfx::Size& size, + const gles2::DisallowedExtensions& disallowed_extensions, + const char* allowed_extensions, + const std::vector<int32>& attribs, + GpuScheduler* parent, + uint32 parent_texture_id) { + // Get the parent decoder and the GLContext to share IDs with, if any. + gles2::GLES2Decoder* parent_decoder = NULL; + gfx::GLContext* parent_context = NULL; + void* parent_handle = NULL; + if (parent) { + parent_decoder = parent->decoder_.get(); + DCHECK(parent_decoder); + + parent_context = parent_decoder->GetGLContext(); + DCHECK(parent_context); + } + + // Create either a view or pbuffer based GLContext. + scoped_ptr<gfx::GLContext> context; + if (window) { + DCHECK(!parent_handle); + + // TODO(apatrick): support multisampling. + context.reset(gfx::GLContext::CreateViewGLContext(window, false)); + } else { + context.reset(gfx::GLContext::CreateOffscreenGLContext(parent_context)); + } + + if (!context.get()) { + LOG(ERROR) << "GpuScheduler::Initialize failed"; + return false; + } + + return InitializeCommon(context.release(), + size, + disallowed_extensions, + allowed_extensions, + attribs, + parent_decoder, + parent_texture_id); +} + +void GpuScheduler::Destroy() { + DestroyCommon(); +} + +void GpuScheduler::WillSwapBuffers() { + if (wrapped_swap_buffers_callback_.get()) { + wrapped_swap_buffers_callback_->Run(); + } +} + +} // namespace gpu |