OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gl/gl_surface.h" | 5 #include "ui/gl/gl_surface.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
12 #include "base/memory/scoped_vector.h" | 12 #include "base/memory/scoped_vector.h" |
13 #include "base/memory/weak_ptr.h" | 13 #include "base/memory/weak_ptr.h" |
14 #include "base/threading/worker_pool.h" | 14 #include "base/threading/worker_pool.h" |
15 #include "ui/gfx/native_widget_types.h" | 15 #include "ui/gfx/native_widget_types.h" |
16 #include "ui/gl/gl_context.h" | 16 #include "ui/gl/gl_context.h" |
17 #include "ui/gl/gl_image.h" | 17 #include "ui/gl/gl_image.h" |
18 #include "ui/gl/gl_image_linux_dma_buffer.h" | 18 #include "ui/gl/gl_image_ozone_native_pixmap.h" |
19 #include "ui/gl/gl_implementation.h" | 19 #include "ui/gl/gl_implementation.h" |
20 #include "ui/gl/gl_surface_egl.h" | 20 #include "ui/gl/gl_surface_egl.h" |
21 #include "ui/gl/gl_surface_osmesa.h" | 21 #include "ui/gl/gl_surface_osmesa.h" |
22 #include "ui/gl/gl_surface_stub.h" | 22 #include "ui/gl/gl_surface_stub.h" |
23 #include "ui/gl/scoped_binders.h" | 23 #include "ui/gl/scoped_binders.h" |
24 #include "ui/gl/scoped_make_current.h" | 24 #include "ui/gl/scoped_make_current.h" |
25 #include "ui/ozone/public/native_pixmap.h" | 25 #include "ui/ozone/public/native_pixmap.h" |
26 #include "ui/ozone/public/ozone_platform.h" | 26 #include "ui/ozone/public/ozone_platform.h" |
27 #include "ui/ozone/public/surface_factory_ozone.h" | 27 #include "ui/ozone/public/surface_factory_ozone.h" |
28 #include "ui/ozone/public/surface_ozone_egl.h" | 28 #include "ui/ozone/public/surface_ozone_egl.h" |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 // GLSurface: | 421 // GLSurface: |
422 unsigned int GetBackingFrameBufferObject() override; | 422 unsigned int GetBackingFrameBufferObject() override; |
423 bool OnMakeCurrent(GLContext* context) override; | 423 bool OnMakeCurrent(GLContext* context) override; |
424 bool Resize(const gfx::Size& size) override; | 424 bool Resize(const gfx::Size& size) override; |
425 bool SupportsPostSubBuffer() override; | 425 bool SupportsPostSubBuffer() override; |
426 gfx::SwapResult SwapBuffers() override; | 426 gfx::SwapResult SwapBuffers() override; |
427 bool SwapBuffersAsync(const SwapCompletionCallback& callback) override; | 427 bool SwapBuffersAsync(const SwapCompletionCallback& callback) override; |
428 void Destroy() override; | 428 void Destroy() override; |
429 | 429 |
430 private: | 430 private: |
431 class SurfaceImage : public GLImageLinuxDMABuffer { | |
432 public: | |
433 SurfaceImage(const gfx::Size& size, unsigned internalformat); | |
434 | |
435 bool Initialize(scoped_refptr<ui::NativePixmap> pixmap, | |
436 gfx::GpuMemoryBuffer::Format format); | |
437 bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget, | |
438 int z_order, | |
439 gfx::OverlayTransform transform, | |
440 const gfx::Rect& bounds_rect, | |
441 const gfx::RectF& crop_rect) override; | |
442 | |
443 private: | |
444 ~SurfaceImage() override; | |
445 | |
446 scoped_refptr<ui::NativePixmap> pixmap_; | |
447 }; | |
448 | |
449 ~GLSurfaceOzoneSurfacelessSurfaceImpl() override; | 431 ~GLSurfaceOzoneSurfacelessSurfaceImpl() override; |
450 | 432 |
451 void BindFramebuffer(); | 433 void BindFramebuffer(); |
452 bool CreatePixmaps(); | 434 bool CreatePixmaps(); |
453 | 435 |
454 GLuint fbo_; | 436 GLuint fbo_; |
455 GLuint textures_[2]; | 437 GLuint textures_[2]; |
456 scoped_refptr<GLImage> images_[2]; | 438 scoped_refptr<GLImage> images_[2]; |
457 int current_surface_; | 439 int current_surface_; |
458 DISALLOW_COPY_AND_ASSIGN(GLSurfaceOzoneSurfacelessSurfaceImpl); | 440 DISALLOW_COPY_AND_ASSIGN(GLSurfaceOzoneSurfacelessSurfaceImpl); |
459 }; | 441 }; |
460 | 442 |
461 GLSurfaceOzoneSurfacelessSurfaceImpl::SurfaceImage::SurfaceImage( | |
462 const gfx::Size& size, | |
463 unsigned internalformat) | |
464 : GLImageLinuxDMABuffer(size, internalformat) { | |
465 } | |
466 | |
467 bool GLSurfaceOzoneSurfacelessSurfaceImpl::SurfaceImage::Initialize( | |
468 scoped_refptr<ui::NativePixmap> pixmap, | |
469 gfx::GpuMemoryBuffer::Format format) { | |
470 base::FileDescriptor handle(pixmap->GetDmaBufFd(), false); | |
471 if (!GLImageLinuxDMABuffer::Initialize(handle, format, | |
472 pixmap->GetDmaBufPitch())) | |
473 return false; | |
474 pixmap_ = pixmap; | |
475 return true; | |
476 } | |
477 bool GLSurfaceOzoneSurfacelessSurfaceImpl::SurfaceImage::ScheduleOverlayPlane( | |
478 gfx::AcceleratedWidget widget, | |
479 int z_order, | |
480 gfx::OverlayTransform transform, | |
481 const gfx::Rect& bounds_rect, | |
482 const gfx::RectF& crop_rect) { | |
483 return pixmap_->ScheduleOverlayPlane(widget, z_order, transform, bounds_rect, | |
484 crop_rect); | |
485 } | |
486 | |
487 GLSurfaceOzoneSurfacelessSurfaceImpl::SurfaceImage::~SurfaceImage() { | |
488 } | |
489 | |
490 GLSurfaceOzoneSurfacelessSurfaceImpl::GLSurfaceOzoneSurfacelessSurfaceImpl( | 443 GLSurfaceOzoneSurfacelessSurfaceImpl::GLSurfaceOzoneSurfacelessSurfaceImpl( |
491 scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface, | 444 scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface, |
492 AcceleratedWidget widget) | 445 AcceleratedWidget widget) |
493 : GLSurfaceOzoneSurfaceless(ozone_surface.Pass(), widget), | 446 : GLSurfaceOzoneSurfaceless(ozone_surface.Pass(), widget), |
494 fbo_(0), | 447 fbo_(0), |
495 current_surface_(0) { | 448 current_surface_(0) { |
496 for (auto& texture : textures_) | 449 for (auto& texture : textures_) |
497 texture = 0; | 450 texture = 0; |
498 } | 451 } |
499 | 452 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 return true; | 539 return true; |
587 for (size_t i = 0; i < arraysize(textures_); i++) { | 540 for (size_t i = 0; i < arraysize(textures_); i++) { |
588 scoped_refptr<ui::NativePixmap> pixmap = | 541 scoped_refptr<ui::NativePixmap> pixmap = |
589 ui::OzonePlatform::GetInstance() | 542 ui::OzonePlatform::GetInstance() |
590 ->GetSurfaceFactoryOzone() | 543 ->GetSurfaceFactoryOzone() |
591 ->CreateNativePixmap(widget_, GetSize(), | 544 ->CreateNativePixmap(widget_, GetSize(), |
592 ui::SurfaceFactoryOzone::BGRA_8888, | 545 ui::SurfaceFactoryOzone::BGRA_8888, |
593 ui::SurfaceFactoryOzone::SCANOUT); | 546 ui::SurfaceFactoryOzone::SCANOUT); |
594 if (!pixmap) | 547 if (!pixmap) |
595 return false; | 548 return false; |
596 scoped_refptr<SurfaceImage> image = | 549 scoped_refptr<GLImageOzoneNativePixmap> image = |
597 new SurfaceImage(GetSize(), GL_BGRA_EXT); | 550 new GLImageOzoneNativePixmap(GetSize(), GL_BGRA_EXT); |
598 if (!image->Initialize(pixmap, gfx::GpuMemoryBuffer::Format::BGRA_8888)) | 551 if (!image->Initialize(pixmap.get(), |
| 552 gfx::GpuMemoryBuffer::Format::BGRA_8888)) |
599 return false; | 553 return false; |
600 images_[i] = image; | 554 images_[i] = image; |
601 // Bind image to texture. | 555 // Bind image to texture. |
602 ScopedTextureBinder binder(GL_TEXTURE_2D, textures_[i]); | 556 ScopedTextureBinder binder(GL_TEXTURE_2D, textures_[i]); |
603 if (!images_[i]->BindTexImage(GL_TEXTURE_2D)) | 557 if (!images_[i]->BindTexImage(GL_TEXTURE_2D)) |
604 return false; | 558 return false; |
605 } | 559 } |
606 return true; | 560 return true; |
607 } | 561 } |
608 | 562 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
727 } | 681 } |
728 } | 682 } |
729 | 683 |
730 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { | 684 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { |
731 return ui::OzonePlatform::GetInstance() | 685 return ui::OzonePlatform::GetInstance() |
732 ->GetSurfaceFactoryOzone() | 686 ->GetSurfaceFactoryOzone() |
733 ->GetNativeDisplay(); | 687 ->GetNativeDisplay(); |
734 } | 688 } |
735 | 689 |
736 } // namespace gfx | 690 } // namespace gfx |
OLD | NEW |