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 "ui/gl/gl_image.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/debug/trace_event.h"
8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/gl/gl_image_shm.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_image_stub.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_implementation.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<GLImage> GLImage::CreateGLImage(gfx::PluginWindowHandle window) {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TRACE_EVENT0("gpu", "GLImage::CreateGLImage");
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (GetGLImplementation()) {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case kGLImplementationOSMesaGL:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case kGLImplementationDesktopGL:
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case kGLImplementationAppleGL:
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return NULL;
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case kGLImplementationMockGL:
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return new GLImageStub;
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    default:
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      NOTREACHED();
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return NULL;
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_refptr<GLImage> GLImage::CreateGLImageForGpuMemoryBuffer(
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    gfx::GpuMemoryBufferHandle buffer, gfx::Size size) {
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TRACE_EVENT0("gpu", "GLImage::CreateGLImageForGpuMemoryBuffer");
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (GetGLImplementation()) {
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case kGLImplementationOSMesaGL:
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case kGLImplementationDesktopGL:
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case kGLImplementationAppleGL:
36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      switch (buffer.type) {
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        case SHARED_MEMORY_BUFFER: {
38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          scoped_refptr<GLImageShm> image(new GLImageShm(size));
39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          if (!image->Initialize(buffer))
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)            return NULL;
41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          return image;
43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        }
44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        default:
45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          NOTREACHED();
46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          return NULL;
47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      }
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case kGLImplementationMockGL:
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return new GLImageStub;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return NULL;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gfx
57