// Copyright (c) 2012 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 "content/common/gpu/image_transport_surface.h" #include "content/common/gpu/child_window_surface_win.h" #include "content/common/gpu/pass_through_image_transport_surface.h" #include "ui/gfx/native_widget_types.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_surface_egl.h" #include "ui/gl/vsync_provider_win.h" namespace content { // static scoped_refptr ImageTransportSurface::CreateNativeSurface( GpuChannelManager* manager, GpuCommandBufferStub* stub, gpu::SurfaceHandle surface_handle, gfx::GLSurface::Format format) { DCHECK_NE(surface_handle, gpu::kNullSurfaceHandle); scoped_refptr surface; if (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2 && gfx::GLSurfaceEGL::IsDirectCompositionSupported()) { scoped_refptr egl_surface( new ChildWindowSurfaceWin(manager, surface_handle)); surface = egl_surface; // TODO(jbauman): Get frame statistics from DirectComposition scoped_ptr vsync_provider( new gfx::VSyncProviderWin(surface_handle)); if (!egl_surface->Initialize(std::move(vsync_provider))) return nullptr; } else { surface = gfx::GLSurface::CreateViewGLSurface(surface_handle); if (!surface) return nullptr; } return scoped_refptr(new PassThroughImageTransportSurface( manager, stub, surface.get())); } } // namespace content