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 extern "C" { | 5 extern "C" { |
6 #include <X11/Xlib.h> | 6 #include <X11/Xlib.h> |
7 } | 7 } |
8 | 8 |
9 #include "ui/gl/gl_surface_glx.h" | 9 #include "ui/gl/gl_surface_glx.h" |
10 | 10 |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "ui/gfx/x/x11_types.h" | 27 #include "ui/gfx/x/x11_types.h" |
28 #include "ui/gl/gl_bindings.h" | 28 #include "ui/gl/gl_bindings.h" |
29 #include "ui/gl/gl_implementation.h" | 29 #include "ui/gl/gl_implementation.h" |
30 #include "ui/gl/sync_control_vsync_provider.h" | 30 #include "ui/gl/sync_control_vsync_provider.h" |
31 | 31 |
32 namespace gfx { | 32 namespace gfx { |
33 | 33 |
34 namespace { | 34 namespace { |
35 | 35 |
36 Display* g_display = nullptr; | 36 Display* g_display = nullptr; |
| 37 const char* g_glx_extensions = nullptr; |
37 bool g_glx_context_create = false; | 38 bool g_glx_context_create = false; |
38 bool g_glx_create_context_robustness_supported = false; | 39 bool g_glx_create_context_robustness_supported = false; |
39 bool g_glx_texture_from_pixmap_supported = false; | 40 bool g_glx_texture_from_pixmap_supported = false; |
40 bool g_glx_oml_sync_control_supported = false; | 41 bool g_glx_oml_sync_control_supported = false; |
41 | 42 |
42 // Track support of glXGetMscRateOML separately from GLX_OML_sync_control as a | 43 // Track support of glXGetMscRateOML separately from GLX_OML_sync_control as a |
43 // whole since on some platforms (e.g. crosbug.com/34585), glXGetMscRateOML | 44 // whole since on some platforms (e.g. crosbug.com/34585), glXGetMscRateOML |
44 // always fails even though GLX_OML_sync_control is reported as being supported. | 45 // always fails even though GLX_OML_sync_control is reported as being supported. |
45 bool g_glx_get_msc_rate_oml_supported = false; | 46 bool g_glx_get_msc_rate_oml_supported = false; |
46 | 47 |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 if (!glXQueryVersion(g_display, &major, &minor)) { | 342 if (!glXQueryVersion(g_display, &major, &minor)) { |
342 LOG(ERROR) << "glxQueryVersion failed"; | 343 LOG(ERROR) << "glxQueryVersion failed"; |
343 return false; | 344 return false; |
344 } | 345 } |
345 | 346 |
346 if (major == 1 && minor < 3) { | 347 if (major == 1 && minor < 3) { |
347 LOG(ERROR) << "GLX 1.3 or later is required."; | 348 LOG(ERROR) << "GLX 1.3 or later is required."; |
348 return false; | 349 return false; |
349 } | 350 } |
350 | 351 |
| 352 g_glx_extensions = glXQueryExtensionsString(g_display, 0); |
351 g_glx_context_create = | 353 g_glx_context_create = |
352 HasGLXExtension("GLX_ARB_create_context"); | 354 HasGLXExtension("GLX_ARB_create_context"); |
353 g_glx_create_context_robustness_supported = | 355 g_glx_create_context_robustness_supported = |
354 HasGLXExtension("GLX_ARB_create_context_robustness"); | 356 HasGLXExtension("GLX_ARB_create_context_robustness"); |
355 g_glx_texture_from_pixmap_supported = | 357 g_glx_texture_from_pixmap_supported = |
356 HasGLXExtension("GLX_EXT_texture_from_pixmap"); | 358 HasGLXExtension("GLX_EXT_texture_from_pixmap"); |
357 g_glx_oml_sync_control_supported = | 359 g_glx_oml_sync_control_supported = |
358 HasGLXExtension("GLX_OML_sync_control"); | 360 HasGLXExtension("GLX_OML_sync_control"); |
359 g_glx_get_msc_rate_oml_supported = g_glx_oml_sync_control_supported; | 361 g_glx_get_msc_rate_oml_supported = g_glx_oml_sync_control_supported; |
360 g_glx_sgi_video_sync_supported = | 362 g_glx_sgi_video_sync_supported = |
361 HasGLXExtension("GLX_SGI_video_sync"); | 363 HasGLXExtension("GLX_SGI_video_sync"); |
362 | 364 |
363 if (!g_glx_get_msc_rate_oml_supported && g_glx_sgi_video_sync_supported) | 365 if (!g_glx_get_msc_rate_oml_supported && g_glx_sgi_video_sync_supported) |
364 SGIVideoSyncProviderThreadShim::display_ = gfx::OpenNewXDisplay(); | 366 SGIVideoSyncProviderThreadShim::display_ = gfx::OpenNewXDisplay(); |
365 | 367 |
366 initialized = true; | 368 initialized = true; |
367 return true; | 369 return true; |
368 } | 370 } |
369 | 371 |
370 // static | 372 // static |
371 const char* GLSurfaceGLX::GetGLXExtensions() { | 373 const char* GLSurfaceGLX::GetGLXExtensions() { |
372 return glXQueryExtensionsString(g_display, 0); | 374 return g_glx_extensions; |
373 } | 375 } |
374 | 376 |
375 // static | 377 // static |
376 bool GLSurfaceGLX::HasGLXExtension(const char* name) { | 378 bool GLSurfaceGLX::HasGLXExtension(const char* name) { |
377 return ExtensionsContain(GetGLXExtensions(), name); | 379 return ExtensionsContain(GetGLXExtensions(), name); |
378 } | 380 } |
379 | 381 |
380 // static | 382 // static |
381 bool GLSurfaceGLX::IsCreateContextSupported() { | 383 bool GLSurfaceGLX::IsCreateContextSupported() { |
382 return g_glx_context_create; | 384 return g_glx_context_create; |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 if (!config_) | 636 if (!config_) |
635 config_ = GLSurfaceGLX::GetConfig(window_); | 637 config_ = GLSurfaceGLX::GetConfig(window_); |
636 return config_; | 638 return config_; |
637 } | 639 } |
638 | 640 |
639 UnmappedNativeViewGLSurfaceGLX::~UnmappedNativeViewGLSurfaceGLX() { | 641 UnmappedNativeViewGLSurfaceGLX::~UnmappedNativeViewGLSurfaceGLX() { |
640 Destroy(); | 642 Destroy(); |
641 } | 643 } |
642 | 644 |
643 } // namespace gfx | 645 } // namespace gfx |
OLD | NEW |