OLD | NEW |
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 #include "ui/gl/gl_surface_egl.h" | 5 #include "ui/gl/gl_surface_egl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 | 141 |
142 display_attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); | 142 display_attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); |
143 display_attribs.push_back(platform_type); | 143 display_attribs.push_back(platform_type); |
144 | 144 |
145 if (warpDevice) { | 145 if (warpDevice) { |
146 display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE); | 146 display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE); |
147 display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE); | 147 display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE); |
148 } | 148 } |
149 | 149 |
150 #if defined(USE_X11) && !defined(OS_CHROMEOS) | 150 #if defined(USE_X11) && !defined(OS_CHROMEOS) |
151 Visual* visual; | 151 // ANGLE_NULL doesn't use the visual, and may run without X11 where we can't |
152 ui::XVisualManager::GetInstance()->ChooseVisualForWindow( | 152 // get it anyway. |
153 true, &visual, nullptr, nullptr, nullptr); | 153 if (platform_type != EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE) { |
154 display_attribs.push_back(EGL_X11_VISUAL_ID_ANGLE); | 154 Visual* visual; |
155 display_attribs.push_back(static_cast<EGLint>(XVisualIDFromVisual(visual))); | 155 ui::XVisualManager::GetInstance()->ChooseVisualForWindow( |
| 156 true, &visual, nullptr, nullptr, nullptr); |
| 157 display_attribs.push_back(EGL_X11_VISUAL_ID_ANGLE); |
| 158 display_attribs.push_back(static_cast<EGLint>(XVisualIDFromVisual(visual))); |
| 159 } |
156 #endif | 160 #endif |
157 | 161 |
158 display_attribs.push_back(EGL_NONE); | 162 display_attribs.push_back(EGL_NONE); |
159 | 163 |
160 return eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, | 164 return eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, |
161 reinterpret_cast<void*>(native_display), | 165 reinterpret_cast<void*>(native_display), |
162 &display_attribs[0]); | 166 &display_attribs[0]); |
163 } | 167 } |
164 | 168 |
165 EGLDisplay GetDisplayFromType(DisplayType display_type, | 169 EGLDisplay GetDisplayFromType(DisplayType display_type, |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 240 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
237 switches::kDisableES3GLContext)) { | 241 switches::kDisableES3GLContext)) { |
238 renderable_types.push_back(EGL_OPENGL_ES3_BIT); | 242 renderable_types.push_back(EGL_OPENGL_ES3_BIT); |
239 } | 243 } |
240 renderable_types.push_back(EGL_OPENGL_ES2_BIT); | 244 renderable_types.push_back(EGL_OPENGL_ES2_BIT); |
241 | 245 |
242 EGLint buffer_size = 32; | 246 EGLint buffer_size = 32; |
243 EGLint alpha_size = 8; | 247 EGLint alpha_size = 8; |
244 | 248 |
245 #if defined(USE_X11) && !defined(OS_CHROMEOS) | 249 #if defined(USE_X11) && !defined(OS_CHROMEOS) |
246 ui::XVisualManager::GetInstance()->ChooseVisualForWindow( | 250 // If we're using ANGLE_NULL, we may not have a display, in which case we |
247 true, nullptr, &buffer_size, nullptr, nullptr); | 251 // can't use XVisualManager. |
248 alpha_size = buffer_size == 32 ? 8 : 0; | 252 if (g_native_display) { |
| 253 ui::XVisualManager::GetInstance()->ChooseVisualForWindow( |
| 254 true, nullptr, &buffer_size, nullptr, nullptr); |
| 255 alpha_size = buffer_size == 32 ? 8 : 0; |
| 256 } |
249 #endif | 257 #endif |
250 | 258 |
251 EGLint surface_type = (format == GLSurface::SURFACE_SURFACELESS) | 259 EGLint surface_type = (format == GLSurface::SURFACE_SURFACELESS) |
252 ? EGL_DONT_CARE | 260 ? EGL_DONT_CARE |
253 : EGL_WINDOW_BIT | EGL_PBUFFER_BIT; | 261 : EGL_WINDOW_BIT | EGL_PBUFFER_BIT; |
254 | 262 |
255 for (auto renderable_type : renderable_types) { | 263 for (auto renderable_type : renderable_types) { |
256 EGLint config_attribs_8888[] = {EGL_BUFFER_SIZE, | 264 EGLint config_attribs_8888[] = {EGL_BUFFER_SIZE, |
257 buffer_size, | 265 buffer_size, |
258 EGL_ALPHA_SIZE, | 266 EGL_ALPHA_SIZE, |
(...skipping 957 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1216 } | 1224 } |
1217 | 1225 |
1218 void* SurfacelessEGL::GetShareHandle() { | 1226 void* SurfacelessEGL::GetShareHandle() { |
1219 return NULL; | 1227 return NULL; |
1220 } | 1228 } |
1221 | 1229 |
1222 SurfacelessEGL::~SurfacelessEGL() { | 1230 SurfacelessEGL::~SurfacelessEGL() { |
1223 } | 1231 } |
1224 | 1232 |
1225 } // namespace gl | 1233 } // namespace gl |
OLD | NEW |