Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(918)

Side by Side Diff: ui/gl/gl_surface_ozone.cc

Issue 2047283003: Move GLSurface creation from //ui/gl to //ui/gl/init. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gl_context
Patch Set: Fix Ozone CreateViewGLSurface logic. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/gl/gl_surface_ozone.h ('k') | ui/gl/gl_surface_wgl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_ozone.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <vector>
10
9 #include "base/bind.h" 11 #include "base/bind.h"
10 #include "base/callback.h" 12 #include "base/callback.h"
11 #include "base/location.h" 13 #include "base/location.h"
12 #include "base/logging.h" 14 #include "base/logging.h"
13 #include "base/macros.h" 15 #include "base/macros.h"
14 #include "base/memory/ref_counted.h"
15 #include "base/memory/scoped_vector.h" 16 #include "base/memory/scoped_vector.h"
16 #include "base/memory/weak_ptr.h" 17 #include "base/memory/weak_ptr.h"
17 #include "base/threading/worker_pool.h" 18 #include "base/threading/worker_pool.h"
18 #include "ui/gfx/native_widget_types.h"
19 #include "ui/gl/egl_util.h" 19 #include "ui/gl/egl_util.h"
20 #include "ui/gl/gl_context.h" 20 #include "ui/gl/gl_context.h"
21 #include "ui/gl/gl_image.h" 21 #include "ui/gl/gl_image.h"
22 #include "ui/gl/gl_image_ozone_native_pixmap.h" 22 #include "ui/gl/gl_image_ozone_native_pixmap.h"
23 #include "ui/gl/gl_implementation.h" 23 #include "ui/gl/gl_implementation.h"
24 #include "ui/gl/gl_surface_egl.h" 24 #include "ui/gl/gl_surface_egl.h"
25 #include "ui/gl/gl_surface_osmesa.h" 25 #include "ui/gl/gl_surface_osmesa.h"
26 #include "ui/gl/gl_surface_overlay.h" 26 #include "ui/gl/gl_surface_overlay.h"
27 #include "ui/gl/gl_surface_stub.h" 27 #include "ui/gl/gl_surface_stub.h"
28 #include "ui/gl/scoped_binders.h" 28 #include "ui/gl/scoped_binders.h"
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 images_[i]->Destroy(true); 645 images_[i]->Destroy(true);
646 images_[i] = image; 646 images_[i] = image;
647 // Bind image to texture. 647 // Bind image to texture.
648 ScopedTextureBinder binder(GL_TEXTURE_2D, textures_[i]); 648 ScopedTextureBinder binder(GL_TEXTURE_2D, textures_[i]);
649 if (!images_[i]->BindTexImage(GL_TEXTURE_2D)) 649 if (!images_[i]->BindTexImage(GL_TEXTURE_2D))
650 return false; 650 return false;
651 } 651 }
652 return true; 652 return true;
653 } 653 }
654 654
655 } // namespace
656
655 scoped_refptr<GLSurface> CreateViewGLSurfaceOzone( 657 scoped_refptr<GLSurface> CreateViewGLSurfaceOzone(
656 gfx::AcceleratedWidget window) { 658 gfx::AcceleratedWidget window) {
657 std::unique_ptr<ui::SurfaceOzoneEGL> surface_ozone = 659 std::unique_ptr<ui::SurfaceOzoneEGL> surface_ozone =
658 ui::OzonePlatform::GetInstance() 660 ui::OzonePlatform::GetInstance()
659 ->GetSurfaceFactoryOzone() 661 ->GetSurfaceFactoryOzone()
660 ->CreateEGLSurfaceForWidget(window); 662 ->CreateEGLSurfaceForWidget(window);
661 if (!surface_ozone) 663 if (!surface_ozone)
662 return nullptr; 664 return nullptr;
663 scoped_refptr<GLSurface> surface = 665 return InitializeGLSurface(
664 new GLSurfaceOzoneEGL(std::move(surface_ozone), window); 666 new GLSurfaceOzoneEGL(std::move(surface_ozone), window));
665 if (!surface->Initialize())
666 return nullptr;
667 return surface;
668 } 667 }
669 668
670 scoped_refptr<GLSurface> CreateViewGLSurfaceOzoneSurfacelessSurfaceImpl( 669 scoped_refptr<GLSurface> CreateViewGLSurfaceOzoneSurfaceless(
671 gfx::AcceleratedWidget window) { 670 gfx::AcceleratedWidget window) {
672 std::unique_ptr<ui::SurfaceOzoneEGL> surface_ozone = 671 std::unique_ptr<ui::SurfaceOzoneEGL> surface_ozone =
673 ui::OzonePlatform::GetInstance() 672 ui::OzonePlatform::GetInstance()
674 ->GetSurfaceFactoryOzone() 673 ->GetSurfaceFactoryOzone()
675 ->CreateSurfacelessEGLSurfaceForWidget(window); 674 ->CreateSurfacelessEGLSurfaceForWidget(window);
676 if (!surface_ozone) 675 if (!surface_ozone)
677 return nullptr; 676 return nullptr;
678 scoped_refptr<GLSurface> surface = new GLSurfaceOzoneSurfacelessSurfaceImpl( 677 return InitializeGLSurface(
679 std::move(surface_ozone), window); 678 new GLSurfaceOzoneSurfaceless(std::move(surface_ozone), window));
680 if (!surface->Initialize())
681 return nullptr;
682 return surface;
683 } 679 }
684 680
685 } // namespace 681 scoped_refptr<GLSurface> CreateViewGLSurfaceOzoneSurfacelessSurfaceImpl(
686
687 // static
688 scoped_refptr<GLSurface> GLSurface::CreateSurfacelessViewGLSurface(
689 gfx::AcceleratedWidget window) { 682 gfx::AcceleratedWidget window) {
690 if (GetGLImplementation() == kGLImplementationEGLGLES2 && 683 std::unique_ptr<ui::SurfaceOzoneEGL> surface_ozone =
691 window != gfx::kNullAcceleratedWidget && 684 ui::OzonePlatform::GetInstance()
692 GLSurfaceEGL::IsEGLSurfacelessContextSupported()) { 685 ->GetSurfaceFactoryOzone()
693 std::unique_ptr<ui::SurfaceOzoneEGL> surface_ozone = 686 ->CreateSurfacelessEGLSurfaceForWidget(window);
694 ui::OzonePlatform::GetInstance() 687 if (!surface_ozone)
695 ->GetSurfaceFactoryOzone() 688 return nullptr;
696 ->CreateSurfacelessEGLSurfaceForWidget(window); 689 return InitializeGLSurface(new GLSurfaceOzoneSurfacelessSurfaceImpl(
697 if (!surface_ozone) 690 std::move(surface_ozone), window));
698 return nullptr;
699 scoped_refptr<GLSurface> surface;
700 surface = new GLSurfaceOzoneSurfaceless(std::move(surface_ozone), window);
701 if (surface->Initialize())
702 return surface;
703 }
704
705 return nullptr;
706 }
707
708 // static
709 scoped_refptr<GLSurface> GLSurface::CreateViewGLSurface(
710 gfx::AcceleratedWidget window) {
711 if (GetGLImplementation() == kGLImplementationOSMesaGL) {
712 scoped_refptr<GLSurface> surface(new GLSurfaceOSMesaHeadless());
713 if (!surface->Initialize())
714 return nullptr;
715 return surface;
716 }
717 if ((window != gfx::kNullAcceleratedWidget) &&
718 (GetGLImplementation() == kGLImplementationEGLGLES2)) {
719 scoped_refptr<GLSurface> surface;
720 if (GLSurfaceEGL::IsEGLSurfacelessContextSupported())
721 surface = CreateViewGLSurfaceOzoneSurfacelessSurfaceImpl(window);
722 if (!surface)
723 surface = CreateViewGLSurfaceOzone(window);
724 return surface;
725 } else {
726 DCHECK_EQ(GetGLImplementation(), kGLImplementationMockGL);
727 scoped_refptr<GLSurface> surface = new GLSurfaceStub();
728 if (surface->Initialize())
729 return surface;
730 }
731 return nullptr;
732 }
733
734 // static
735 scoped_refptr<GLSurface> GLSurface::CreateOffscreenGLSurface(
736 const gfx::Size& size) {
737 switch (GetGLImplementation()) {
738 case kGLImplementationOSMesaGL: {
739 scoped_refptr<GLSurface> surface(
740 new GLSurfaceOSMesa(SURFACE_OSMESA_BGRA, size));
741 if (!surface->Initialize())
742 return nullptr;
743
744 return surface;
745 }
746 case kGLImplementationEGLGLES2: {
747 scoped_refptr<GLSurface> surface;
748 if (GLSurfaceEGL::IsEGLSurfacelessContextSupported() &&
749 (size.width() == 0 && size.height() == 0)) {
750 surface = new SurfacelessEGL(size);
751 } else {
752 surface = new PbufferGLSurfaceEGL(size);
753 }
754
755 if (!surface->Initialize())
756 return nullptr;
757 return surface;
758 }
759 case kGLImplementationMockGL:
760 return new GLSurfaceStub;
761 default:
762 NOTREACHED();
763 return nullptr;
764 }
765 } 691 }
766 692
767 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { 693 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() {
768 return ui::OzonePlatform::GetInstance() 694 return ui::OzonePlatform::GetInstance()
769 ->GetSurfaceFactoryOzone() 695 ->GetSurfaceFactoryOzone()
770 ->GetNativeDisplay(); 696 ->GetNativeDisplay();
771 } 697 }
772 698
773 } // namespace gl 699 } // namespace gl
OLDNEW
« no previous file with comments | « ui/gl/gl_surface_ozone.h ('k') | ui/gl/gl_surface_wgl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698