Chromium Code Reviews| Index: ui/gl/gl_surface_egl.cc |
| diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc |
| index d0306b4412d6f182559901c2c0459c999b0a1238..cc2086ef712ec223bd45cdf4544b9fc77778ff15 100644 |
| --- a/ui/gl/gl_surface_egl.cc |
| +++ b/ui/gl/gl_surface_egl.cc |
| @@ -239,7 +239,7 @@ bool ValidateEglConfig(EGLDisplay display, |
| return true; |
| } |
| -EGLConfig ChooseConfig(GLSurface::Format format) { |
| +EGLConfig ChooseConfig(GLSurfaceFormat format) { |
| // Choose an EGL configuration. |
| // On X this is only used for PBuffer surfaces. |
| std::vector<EGLint> renderable_types; |
| @@ -249,8 +249,9 @@ EGLConfig ChooseConfig(GLSurface::Format format) { |
| } |
| renderable_types.push_back(EGL_OPENGL_ES2_BIT); |
| - EGLint buffer_size = 32; |
| + EGLint buffer_size = format.GetBufferSize(); |
| EGLint alpha_size = 8; |
| + bool want_rgb565 = buffer_size == 16; |
| #if defined(USE_X11) && !defined(OS_CHROMEOS) |
| // If we're using ANGLE_NULL, we may not have a display, in which case we |
| @@ -262,9 +263,9 @@ EGLConfig ChooseConfig(GLSurface::Format format) { |
| } |
| #endif |
| - EGLint surface_type = (format == GLSurface::SURFACE_SURFACELESS) |
| + EGLint surface_type = (format.IsSurfaceless() |
| ? EGL_DONT_CARE |
| - : EGL_WINDOW_BIT | EGL_PBUFFER_BIT; |
| + : EGL_WINDOW_BIT | EGL_PBUFFER_BIT); |
| for (auto renderable_type : renderable_types) { |
| EGLint config_attribs_8888[] = {EGL_BUFFER_SIZE, |
| @@ -298,7 +299,7 @@ EGLConfig ChooseConfig(GLSurface::Format format) { |
| EGL_NONE}; |
| EGLint* choose_attributes = config_attribs_8888; |
| - if (format == GLSurface::SURFACE_RGB565) { |
| + if (want_rgb565) { |
| choose_attributes = config_attribs_565; |
| } |
| @@ -313,7 +314,7 @@ EGLConfig ChooseConfig(GLSurface::Format format) { |
| } |
| std::unique_ptr<EGLConfig[]> matching_configs(new EGLConfig[num_configs]); |
| - if (format == GLSurface::SURFACE_RGB565) { |
| + if (want_rgb565) { |
| config_size = num_configs; |
| config_data = matching_configs.get(); |
| } |
| @@ -325,7 +326,7 @@ EGLConfig ChooseConfig(GLSurface::Format format) { |
| return config; |
| } |
| - if (format == GLSurface::SURFACE_RGB565) { |
| + if (want_rgb565) { |
| // Because of the EGL config sort order, we have to iterate |
| // through all of them (it'll put higher sum(R,G,B) bits |
| // first with the above attribs). |
| @@ -461,7 +462,7 @@ bool EGLSyncControlVSyncProvider::GetMscRate(int32_t* numerator, |
| GLSurfaceEGL::GLSurfaceEGL() {} |
| -GLSurface::Format GLSurfaceEGL::GetFormat() { |
| +GLSurfaceFormat GLSurfaceEGL::GetFormat() { |
| return format_; |
| } |
| @@ -709,7 +710,7 @@ NativeViewGLSurfaceEGL::NativeViewGLSurfaceEGL(EGLNativeWindowType window) |
| #endif |
| } |
| -bool NativeViewGLSurfaceEGL::Initialize(GLSurface::Format format) { |
| +bool NativeViewGLSurfaceEGL::Initialize(GLSurfaceFormat format) { |
| format_ = format; |
| return Initialize(nullptr); |
| } |
| @@ -1064,21 +1065,18 @@ PbufferGLSurfaceEGL::PbufferGLSurfaceEGL(const gfx::Size& size) |
| size_.SetSize(1, 1); |
| } |
| -bool PbufferGLSurfaceEGL::Initialize() { |
| - GLSurface::Format format = SURFACE_DEFAULT; |
| +bool PbufferGLSurfaceEGL::Initialize(GLSurfaceFormat format) { |
| + EGLSurface old_surface = surface_; |
| + |
| #if defined(OS_ANDROID) |
| // This is to allow context virtualization which requires on- and offscreen |
| // to use a compatible config. We expect the client to request RGB565 |
| // onscreen surface also for this to work (with the exception of |
| // fullscreen video). |
| - if (base::SysInfo::IsLowEndDevice()) |
| - format = SURFACE_RGB565; |
| + if (format.IsDefault() && base::SysInfo::IsLowEndDevice()) |
| + format = GLSurfaceFormat(GLSurfaceFormat::SURFACE_RGB565); |
| #endif |
| - return Initialize(format); |
| -} |
| -bool PbufferGLSurfaceEGL::Initialize(GLSurface::Format format) { |
| - EGLSurface old_surface = surface_; |
| format_ = format; |
| EGLDisplay display = GetDisplay(); |
| @@ -1201,14 +1199,13 @@ PbufferGLSurfaceEGL::~PbufferGLSurfaceEGL() { |
| SurfacelessEGL::SurfacelessEGL(const gfx::Size& size) |
| : size_(size) { |
| - format_ = GLSurface::SURFACE_SURFACELESS; |
| + format_ = GLSurfaceFormat(GLSurfaceFormat::SURFACE_SURFACELESS); |
| } |
| -bool SurfacelessEGL::Initialize() { |
| - return Initialize(SURFACE_SURFACELESS); |
| -} |
| - |
| -bool SurfacelessEGL::Initialize(GLSurface::Format format) { |
| +bool SurfacelessEGL::Initialize(GLSurfaceFormat format) { |
| + if (format.IsDefault()) { |
|
bajones
2017/01/04 22:31:55
This feels weird, though I can certainly see how y
klausw
2017/01/05 00:55:13
Changed to set surfaceless unconditionally.
|
| + format = GLSurfaceFormat(GLSurfaceFormat::SURFACE_SURFACELESS); |
| + } |
| format_ = format; |
| return true; |
| } |