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

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

Issue 1052153002: Use the desktop GL core profile on Linux when ES3 support is requested. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added link to bug in TODO. Created 5 years, 8 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
« no previous file with comments | « ui/gl/gl_context_x11.cc ('k') | ui/gl/gl_surface_x11.cc » ('j') | 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 #include <vector> 5 #include <vector>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/threading/thread_restrictions.h" 9 #include "base/threading/thread_restrictions.h"
10 #include "ui/gl/gl_bindings.h" 10 #include "ui/gl/gl_bindings.h"
(...skipping 25 matching lines...) Expand all
36 #else 36 #else
37 const char kGLLibraryName[] = "libGL.so.1"; 37 const char kGLLibraryName[] = "libGL.so.1";
38 #endif 38 #endif
39 39
40 const char kGLESv2LibraryName[] = "libGLESv2.so.2"; 40 const char kGLESv2LibraryName[] = "libGLESv2.so.2";
41 const char kEGLLibraryName[] = "libEGL.so.1"; 41 const char kEGLLibraryName[] = "libEGL.so.1";
42 42
43 } // namespace 43 } // namespace
44 44
45 void GetAllowedGLImplementations(std::vector<GLImplementation>* impls) { 45 void GetAllowedGLImplementations(std::vector<GLImplementation>* impls) {
46 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
47 switches::kEnableUnsafeES3APIs)) {
48 impls->push_back(kGLImplementationDesktopGLCoreProfile);
49 }
46 impls->push_back(kGLImplementationDesktopGL); 50 impls->push_back(kGLImplementationDesktopGL);
47 impls->push_back(kGLImplementationEGLGLES2); 51 impls->push_back(kGLImplementationEGLGLES2);
48 impls->push_back(kGLImplementationOSMesaGL); 52 impls->push_back(kGLImplementationOSMesaGL);
49 } 53 }
50 54
51 bool InitializeStaticGLBindings(GLImplementation implementation) { 55 bool InitializeStaticGLBindings(GLImplementation implementation) {
52 // Prevent reinitialization with a different implementation. Once the gpu 56 // Prevent reinitialization with a different implementation. Once the gpu
53 // unit tests have initialized with kGLImplementationMock, we don't want to 57 // unit tests have initialized with kGLImplementationMock, we don't want to
54 // later switch to another GL implementation. 58 // later switch to another GL implementation.
55 DCHECK_EQ(kGLImplementationNone, GetGLImplementation()); 59 DCHECK_EQ(kGLImplementationNone, GetGLImplementation());
56 60
57 // Allow the main thread or another to initialize these bindings 61 // Allow the main thread or another to initialize these bindings
58 // after instituting restrictions on I/O. Going forward they will 62 // after instituting restrictions on I/O. Going forward they will
59 // likely be used in the browser process on most platforms. The 63 // likely be used in the browser process on most platforms. The
60 // one-time initialization cost is small, between 2 and 5 ms. 64 // one-time initialization cost is small, between 2 and 5 ms.
61 base::ThreadRestrictions::ScopedAllowIO allow_io; 65 base::ThreadRestrictions::ScopedAllowIO allow_io;
62 66
63 switch (implementation) { 67 switch (implementation) {
64 case kGLImplementationOSMesaGL: 68 case kGLImplementationOSMesaGL:
65 return InitializeStaticGLBindingsOSMesaGL(); 69 return InitializeStaticGLBindingsOSMesaGL();
66 case kGLImplementationDesktopGL: { 70 case kGLImplementationDesktopGL:
71 case kGLImplementationDesktopGLCoreProfile: {
67 base::NativeLibrary library = NULL; 72 base::NativeLibrary library = NULL;
68 const base::CommandLine* command_line = 73 const base::CommandLine* command_line =
69 base::CommandLine::ForCurrentProcess(); 74 base::CommandLine::ForCurrentProcess();
70 75
71 if (command_line->HasSwitch(switches::kTestGLLib)) 76 if (command_line->HasSwitch(switches::kTestGLLib))
72 library = LoadLibraryAndPrintError( 77 library = LoadLibraryAndPrintError(
73 command_line->GetSwitchValueASCII(switches::kTestGLLib).c_str()); 78 command_line->GetSwitchValueASCII(switches::kTestGLLib).c_str());
74 79
75 if (!library) { 80 if (!library) {
76 library = LoadLibraryAndPrintError(kGLLibraryName); 81 library = LoadLibraryAndPrintError(kGLLibraryName);
77 } 82 }
78 83
79 if (!library) 84 if (!library)
80 return false; 85 return false;
81 86
82 GLGetProcAddressProc get_proc_address = 87 GLGetProcAddressProc get_proc_address =
83 reinterpret_cast<GLGetProcAddressProc>( 88 reinterpret_cast<GLGetProcAddressProc>(
84 base::GetFunctionPointerFromNativeLibrary( 89 base::GetFunctionPointerFromNativeLibrary(
85 library, "glXGetProcAddress")); 90 library, "glXGetProcAddress"));
86 if (!get_proc_address) { 91 if (!get_proc_address) {
87 LOG(ERROR) << "glxGetProcAddress not found."; 92 LOG(ERROR) << "glxGetProcAddress not found.";
88 base::UnloadNativeLibrary(library); 93 base::UnloadNativeLibrary(library);
89 return false; 94 return false;
90 } 95 }
91 96
92 SetGLGetProcAddressProc(get_proc_address); 97 SetGLGetProcAddressProc(get_proc_address);
93 AddGLNativeLibrary(library); 98 AddGLNativeLibrary(library);
94 SetGLImplementation(kGLImplementationDesktopGL); 99 SetGLImplementation(implementation);
95 100
96 InitializeStaticGLBindingsGL(); 101 InitializeStaticGLBindingsGL();
97 InitializeStaticGLBindingsGLX(); 102 InitializeStaticGLBindingsGLX();
98 break; 103 break;
99 } 104 }
100 case kGLImplementationEGLGLES2: { 105 case kGLImplementationEGLGLES2: {
101 base::NativeLibrary gles_library = 106 base::NativeLibrary gles_library =
102 LoadLibraryAndPrintError(kGLESv2LibraryName); 107 LoadLibraryAndPrintError(kGLESv2LibraryName);
103 if (!gles_library) 108 if (!gles_library)
104 return false; 109 return false;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 } 149 }
145 150
146 151
147 return true; 152 return true;
148 } 153 }
149 154
150 bool InitializeDynamicGLBindings(GLImplementation implementation, 155 bool InitializeDynamicGLBindings(GLImplementation implementation,
151 GLContext* context) { 156 GLContext* context) {
152 switch (implementation) { 157 switch (implementation) {
153 case kGLImplementationOSMesaGL: 158 case kGLImplementationOSMesaGL:
154 case kGLImplementationDesktopGL: 159 case kGLImplementationDesktopGL:
160 case kGLImplementationDesktopGLCoreProfile:
155 case kGLImplementationEGLGLES2: 161 case kGLImplementationEGLGLES2:
156 InitializeDynamicGLBindingsGL(context); 162 InitializeDynamicGLBindingsGL(context);
157 break; 163 break;
158 case kGLImplementationMockGL: 164 case kGLImplementationMockGL:
159 if (!context) { 165 if (!context) {
160 scoped_refptr<GLContextStubWithExtensions> mock_context( 166 scoped_refptr<GLContextStubWithExtensions> mock_context(
161 new GLContextStubWithExtensions()); 167 new GLContextStubWithExtensions());
162 mock_context->SetGLVersionString("3.0"); 168 mock_context->SetGLVersionString("3.0");
163 InitializeDynamicGLBindingsGL(mock_context.get()); 169 InitializeDynamicGLBindingsGL(mock_context.get());
164 } else 170 } else
(...skipping 19 matching lines...) Expand all
184 ClearGLBindingsGLX(); 190 ClearGLBindingsGLX();
185 ClearGLBindingsOSMESA(); 191 ClearGLBindingsOSMESA();
186 SetGLImplementation(kGLImplementationNone); 192 SetGLImplementation(kGLImplementationNone);
187 193
188 UnloadGLNativeLibraries(); 194 UnloadGLNativeLibraries();
189 } 195 }
190 196
191 bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info) { 197 bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info) {
192 switch (GetGLImplementation()) { 198 switch (GetGLImplementation()) {
193 case kGLImplementationDesktopGL: 199 case kGLImplementationDesktopGL:
200 case kGLImplementationDesktopGLCoreProfile:
194 return GetGLWindowSystemBindingInfoGLX(info); 201 return GetGLWindowSystemBindingInfoGLX(info);
195 case kGLImplementationEGLGLES2: 202 case kGLImplementationEGLGLES2:
196 return GetGLWindowSystemBindingInfoEGL(info); 203 return GetGLWindowSystemBindingInfoEGL(info);
197 default: 204 default:
198 return false; 205 return false;
199 } 206 }
200 return false; 207 return false;
201 } 208 }
202 209
203 } // namespace gfx 210 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gl/gl_context_x11.cc ('k') | ui/gl/gl_surface_x11.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698