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

Unified Diff: ui/gl/gl_surface_ozone.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gl/gl_surface_egl.cc ('k') | ui/native_theme/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gl/gl_surface_ozone.cc
diff --git a/ui/gl/gl_surface_ozone.cc b/ui/gl/gl_surface_ozone.cc
deleted file mode 100644
index eecd06413876bdbceb9b0d7a50c26c5f40eb6559..0000000000000000000000000000000000000000
--- a/ui/gl/gl_surface_ozone.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright 2014 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 "ui/gl/gl_surface.h"
-
-#include "base/logging.h"
-#include "base/memory/ref_counted.h"
-#include "ui/gfx/native_widget_types.h"
-#include "ui/gl/gl_context.h"
-#include "ui/gl/gl_image.h"
-#include "ui/gl/gl_implementation.h"
-#include "ui/gl/gl_surface_egl.h"
-#include "ui/gl/gl_surface_osmesa.h"
-#include "ui/gl/gl_surface_stub.h"
-#include "ui/gl/scoped_make_current.h"
-#include "ui/ozone/public/surface_factory_ozone.h"
-#include "ui/ozone/public/surface_ozone_egl.h"
-
-namespace gfx {
-
-namespace {
-
-// A thin wrapper around GLSurfaceEGL that owns the EGLNativeWindow
-class GL_EXPORT GLSurfaceOzoneEGL : public NativeViewGLSurfaceEGL {
- public:
- GLSurfaceOzoneEGL(scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface,
- AcceleratedWidget widget)
- : NativeViewGLSurfaceEGL(ozone_surface->GetNativeWindow()),
- ozone_surface_(ozone_surface.Pass()),
- widget_(widget) {}
-
- bool Initialize() override {
- return Initialize(ozone_surface_->CreateVSyncProvider());
- }
- bool Resize(const gfx::Size& size) override {
- if (!ozone_surface_->ResizeNativeWindow(size)) {
- if (!ReinitializeNativeSurface() ||
- !ozone_surface_->ResizeNativeWindow(size))
- return false;
- }
-
- return NativeViewGLSurfaceEGL::Resize(size);
- }
- bool SwapBuffers() override {
- if (!NativeViewGLSurfaceEGL::SwapBuffers())
- return false;
-
- return ozone_surface_->OnSwapBuffers();
- }
- bool ScheduleOverlayPlane(int z_order,
- OverlayTransform transform,
- GLImage* image,
- const Rect& bounds_rect,
- const RectF& crop_rect) override {
- return image->ScheduleOverlayPlane(
- widget_, z_order, transform, bounds_rect, crop_rect);
- }
-
- private:
- using NativeViewGLSurfaceEGL::Initialize;
-
- ~GLSurfaceOzoneEGL() override {
- Destroy(); // EGL surface must be destroyed before SurfaceOzone
- }
-
- bool ReinitializeNativeSurface() {
- scoped_ptr<ui::ScopedMakeCurrent> scoped_make_current;
- GLContext* current_context = GLContext::GetCurrent();
- bool was_current =
- current_context && current_context->IsCurrent(this);
- if (was_current) {
- scoped_make_current.reset(
- new ui::ScopedMakeCurrent(current_context, this));
- }
-
- Destroy();
- ozone_surface_ =
- ui::SurfaceFactoryOzone::GetInstance()->CreateEGLSurfaceForWidget(
- widget_).Pass();
- if (!ozone_surface_) {
- LOG(ERROR) << "Failed to create native surface.";
- return false;
- }
-
- window_ = ozone_surface_->GetNativeWindow();
- if (!Initialize()) {
- LOG(ERROR) << "Failed to initialize.";
- return false;
- }
-
- return true;
- }
-
- // The native surface. Deleting this is allowed to free the EGLNativeWindow.
- scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface_;
- AcceleratedWidget widget_;
-
- DISALLOW_COPY_AND_ASSIGN(GLSurfaceOzoneEGL);
-};
-
-class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL {
- public:
- GLSurfaceOzoneSurfaceless(scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface,
- AcceleratedWidget widget)
- : SurfacelessEGL(gfx::Size()),
- ozone_surface_(ozone_surface.Pass()),
- widget_(widget) {}
-
- bool Initialize() override {
- if (!SurfacelessEGL::Initialize())
- return false;
- vsync_provider_ = ozone_surface_->CreateVSyncProvider();
- if (!vsync_provider_)
- return false;
- return true;
- }
- bool Resize(const gfx::Size& size) override {
- if (!ozone_surface_->ResizeNativeWindow(size))
- return false;
-
- return SurfacelessEGL::Resize(size);
- }
- bool SwapBuffers() override {
- // TODO: this should be replaced by a fence when supported by the driver.
- glFlush();
- return ozone_surface_->OnSwapBuffers();
- }
- bool ScheduleOverlayPlane(int z_order,
- OverlayTransform transform,
- GLImage* image,
- const Rect& bounds_rect,
- const RectF& crop_rect) override {
- return image->ScheduleOverlayPlane(
- widget_, z_order, transform, bounds_rect, crop_rect);
- }
- bool IsOffscreen() override { return false; }
- VSyncProvider* GetVSyncProvider() override { return vsync_provider_.get(); }
- bool SupportsPostSubBuffer() override { return true; }
- bool PostSubBuffer(int x, int y, int width, int height) override {
- // The actual sub buffer handling is handled at higher layers.
- SwapBuffers();
- return true;
- }
- bool SwapBuffersAsync(const SwapCompletionCallback& callback) override {
- // TODO: this should be replaced by a fence when supported by the driver.
- glFlush();
- return ozone_surface_->OnSwapBuffersAsync(callback);
- }
- bool PostSubBufferAsync(int x,
- int y,
- int width,
- int height,
- const SwapCompletionCallback& callback) override {
- return SwapBuffersAsync(callback);
- }
-
- private:
- ~GLSurfaceOzoneSurfaceless() override {
- Destroy(); // EGL surface must be destroyed before SurfaceOzone
- }
-
- // The native surface. Deleting this is allowed to free the EGLNativeWindow.
- scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface_;
- AcceleratedWidget widget_;
- scoped_ptr<VSyncProvider> vsync_provider_;
-
- DISALLOW_COPY_AND_ASSIGN(GLSurfaceOzoneSurfaceless);
-};
-
-} // namespace
-
-// static
-bool GLSurface::InitializeOneOffInternal() {
- switch (GetGLImplementation()) {
- case kGLImplementationEGLGLES2:
- if (!GLSurfaceEGL::InitializeOneOff()) {
- LOG(ERROR) << "GLSurfaceEGL::InitializeOneOff failed.";
- return false;
- }
-
- return true;
- case kGLImplementationOSMesaGL:
- case kGLImplementationMockGL:
- return true;
- default:
- return false;
- }
-}
-
-// static
-scoped_refptr<GLSurface> GLSurface::CreateViewGLSurface(
- gfx::AcceleratedWidget window) {
- if (GetGLImplementation() == kGLImplementationOSMesaGL) {
- scoped_refptr<GLSurface> surface(new GLSurfaceOSMesaHeadless());
- if (!surface->Initialize())
- return NULL;
- return surface;
- }
- DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2);
- if (window != kNullAcceleratedWidget) {
- scoped_refptr<GLSurface> surface;
- if (GLSurfaceEGL::IsEGLSurfacelessContextSupported() &&
- ui::SurfaceFactoryOzone::GetInstance()
- ->CanShowPrimaryPlaneAsOverlay()) {
- scoped_ptr<ui::SurfaceOzoneEGL> surface_ozone =
- ui::SurfaceFactoryOzone::GetInstance()
- ->CreateSurfacelessEGLSurfaceForWidget(window);
- if (!surface_ozone)
- return NULL;
- surface = new GLSurfaceOzoneSurfaceless(surface_ozone.Pass(), window);
- } else {
- scoped_ptr<ui::SurfaceOzoneEGL> surface_ozone =
- ui::SurfaceFactoryOzone::GetInstance()->CreateEGLSurfaceForWidget(
- window);
- if (!surface_ozone)
- return NULL;
-
- surface = new GLSurfaceOzoneEGL(surface_ozone.Pass(), window);
- }
- if (!surface->Initialize())
- return NULL;
- return surface;
- } else {
- scoped_refptr<GLSurface> surface = new GLSurfaceStub();
- if (surface->Initialize())
- return surface;
- }
- return NULL;
-}
-
-// static
-scoped_refptr<GLSurface> GLSurface::CreateOffscreenGLSurface(
- const gfx::Size& size) {
- switch (GetGLImplementation()) {
- case kGLImplementationOSMesaGL: {
- scoped_refptr<GLSurface> surface(
- new GLSurfaceOSMesa(OSMesaSurfaceFormatBGRA, size));
- if (!surface->Initialize())
- return NULL;
-
- return surface;
- }
- case kGLImplementationEGLGLES2: {
- scoped_refptr<GLSurface> surface;
- if (GLSurfaceEGL::IsEGLSurfacelessContextSupported() &&
- (size.width() == 0 && size.height() == 0)) {
- surface = new SurfacelessEGL(size);
- } else
- surface = new PbufferGLSurfaceEGL(size);
-
- if (!surface->Initialize())
- return NULL;
- return surface;
- }
- default:
- NOTREACHED();
- return NULL;
- }
-}
-
-EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() {
- return ui::SurfaceFactoryOzone::GetInstance()->GetNativeDisplay();
-}
-
-} // namespace gfx
« no previous file with comments | « ui/gl/gl_surface_egl.cc ('k') | ui/native_theme/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698