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

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

Issue 17932004: Support ozone=1 compositor_unittests with OSMesa (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: include order version Created 7 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « ui/gl/gl_implementation_x11.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // This include must be here so that the includes provided transitively
6 // by gl_surface_egl.h don't make it impossible to compile this code.
7 #include "third_party/mesa/src/include/GL/osmesa.h"
8
5 #include "ui/gl/gl_surface_egl.h" 9 #include "ui/gl/gl_surface_egl.h"
6 10
7 #if defined(OS_ANDROID) 11 #if defined(OS_ANDROID)
8 #include <android/native_window_jni.h> 12 #include <android/native_window_jni.h>
9 #endif 13 #endif
10 14
11 #include "base/logging.h" 15 #include "base/logging.h"
12 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
13 #include "base/message_loop.h" 17 #include "base/message_loop.h"
14 #include "build/build_config.h" 18 #include "build/build_config.h"
15 #include "ui/gl/egl_util.h" 19 #include "ui/gl/egl_util.h"
16 #include "ui/gl/gl_context.h" 20 #include "ui/gl/gl_context.h"
17 #include "ui/gl/gl_implementation.h" 21 #include "ui/gl/gl_implementation.h"
22 #include "ui/gl/gl_surface_osmesa.h"
18 #include "ui/gl/gl_surface_stub.h" 23 #include "ui/gl/gl_surface_stub.h"
19 #include "ui/gl/scoped_make_current.h" 24 #include "ui/gl/scoped_make_current.h"
20 25
21 #if defined(USE_X11) 26 #if defined(USE_X11)
22 extern "C" { 27 extern "C" {
23 #include <X11/Xlib.h> 28 #include <X11/Xlib.h>
24 } 29 }
25 #endif 30 #endif
26 31
27 #if defined (USE_OZONE) 32 #if defined (USE_OZONE)
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 return handle; 560 return handle;
556 #endif 561 #endif
557 } 562 }
558 563
559 PbufferGLSurfaceEGL::~PbufferGLSurfaceEGL() { 564 PbufferGLSurfaceEGL::~PbufferGLSurfaceEGL() {
560 Destroy(); 565 Destroy();
561 } 566 }
562 567
563 #if defined(ANDROID) || defined(USE_OZONE) 568 #if defined(ANDROID) || defined(USE_OZONE)
564 569
570 // A thin subclass of |GLSurfaceOSMesa| that can be used in place
571 // of a native hardware-provided surface when a native surface
572 // provider is not available.
573 class GLSurfaceOSMesaHeadless : public GLSurfaceOSMesa {
574 public:
575 explicit GLSurfaceOSMesaHeadless(gfx::AcceleratedWidget window);
576
577 virtual bool IsOffscreen() OVERRIDE;
578 virtual bool SwapBuffers() OVERRIDE;
579
580 protected:
581 virtual ~GLSurfaceOSMesaHeadless();
582
583 private:
584
585 DISALLOW_COPY_AND_ASSIGN(GLSurfaceOSMesaHeadless);
586 };
587
588 bool GLSurfaceOSMesaHeadless::IsOffscreen() { return false; }
589
590 bool GLSurfaceOSMesaHeadless::SwapBuffers() { return true; }
591
592 GLSurfaceOSMesaHeadless::GLSurfaceOSMesaHeadless(gfx::AcceleratedWidget window)
593 : GLSurfaceOSMesa(OSMESA_BGRA, gfx::Size(1, 1)) {
594 DCHECK(window);
595 }
596
597 GLSurfaceOSMesaHeadless::~GLSurfaceOSMesaHeadless() { Destroy(); }
598
565 // static 599 // static
566 bool GLSurface::InitializeOneOffInternal() { 600 bool GLSurface::InitializeOneOffInternal() {
601 if (GetGLImplementation() == kGLImplementationOSMesaGL) {
602 return true;
603 }
567 DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2); 604 DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2);
568 605
569 if (!GLSurfaceEGL::InitializeOneOff()) { 606 if (!GLSurfaceEGL::InitializeOneOff()) {
570 LOG(ERROR) << "GLSurfaceEGL::InitializeOneOff failed."; 607 LOG(ERROR) << "GLSurfaceEGL::InitializeOneOff failed.";
571 return false; 608 return false;
572 } 609 }
573 return true; 610 return true;
574 } 611 }
575 612
576 // static 613 // static
577 scoped_refptr<GLSurface> 614 scoped_refptr<GLSurface>
578 GLSurface::CreateViewGLSurface(gfx::AcceleratedWidget window) { 615 GLSurface::CreateViewGLSurface(gfx::AcceleratedWidget window) {
616
617 if (GetGLImplementation() == kGLImplementationOSMesaGL) {
618 scoped_refptr<GLSurface> surface(new GLSurfaceOSMesaHeadless(window));
619 if (!surface->Initialize())
620 return NULL;
621 return surface;
622 }
579 DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2); 623 DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2);
580 if (window) { 624 if (window) {
581 scoped_refptr<NativeViewGLSurfaceEGL> surface; 625 scoped_refptr<NativeViewGLSurfaceEGL> surface;
582 VSyncProvider* sync_provider = NULL; 626 VSyncProvider* sync_provider = NULL;
583 #if defined(USE_OZONE) 627 #if defined(USE_OZONE)
584 window = ui::SurfaceFactoryOzone::GetInstance()->RealizeAcceleratedWidget( 628 window = ui::SurfaceFactoryOzone::GetInstance()->RealizeAcceleratedWidget(
585 window); 629 window);
586 sync_provider = 630 sync_provider =
587 ui::SurfaceFactoryOzone::GetInstance()->GetVSyncProvider(window); 631 ui::SurfaceFactoryOzone::GetInstance()->GetVSyncProvider(window);
588 #endif 632 #endif
589 surface = new NativeViewGLSurfaceEGL(window); 633 surface = new NativeViewGLSurfaceEGL(window);
590 if(surface->Initialize(sync_provider)) 634 if(surface->Initialize(sync_provider))
591 return surface; 635 return surface;
592 } else { 636 } else {
593 scoped_refptr<GLSurface> surface = new GLSurfaceStub(); 637 scoped_refptr<GLSurface> surface = new GLSurfaceStub();
594 if (surface->Initialize()) 638 if (surface->Initialize())
595 return surface; 639 return surface;
596 } 640 }
597 return NULL; 641 return NULL;
598 } 642 }
599 643
600 // static 644 // static
601 scoped_refptr<GLSurface> 645 scoped_refptr<GLSurface>
602 GLSurface::CreateOffscreenGLSurface(const gfx::Size& size) { 646 GLSurface::CreateOffscreenGLSurface(const gfx::Size& size) {
603 switch (GetGLImplementation()) { 647 switch (GetGLImplementation()) {
648 case kGLImplementationOSMesaGL: {
649 scoped_refptr<GLSurface> surface(new GLSurfaceOSMesa(1, size));
650 if (!surface->Initialize())
651 return NULL;
652
653 return surface;
654 }
604 case kGLImplementationEGLGLES2: { 655 case kGLImplementationEGLGLES2: {
605 scoped_refptr<PbufferGLSurfaceEGL> surface( 656 scoped_refptr<PbufferGLSurfaceEGL> surface(
606 new PbufferGLSurfaceEGL(size)); 657 new PbufferGLSurfaceEGL(size));
607 if (!surface->Initialize()) 658 if (!surface->Initialize())
608 return NULL; 659 return NULL;
609 return surface; 660 return surface;
610 } 661 }
611 default: 662 default:
612 NOTREACHED(); 663 NOTREACHED();
613 return NULL; 664 return NULL;
614 } 665 }
615 } 666 }
616 667
617 #endif 668 #endif
618 669
619 } // namespace gfx 670 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gl/gl_implementation_x11.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698