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

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

Issue 1054883004: Revert of 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: 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 }
50 impls->push_back(kGLImplementationDesktopGL); 46 impls->push_back(kGLImplementationDesktopGL);
51 impls->push_back(kGLImplementationEGLGLES2); 47 impls->push_back(kGLImplementationEGLGLES2);
52 impls->push_back(kGLImplementationOSMesaGL); 48 impls->push_back(kGLImplementationOSMesaGL);
53 } 49 }
54 50
55 bool InitializeStaticGLBindings(GLImplementation implementation) { 51 bool InitializeStaticGLBindings(GLImplementation implementation) {
56 // Prevent reinitialization with a different implementation. Once the gpu 52 // Prevent reinitialization with a different implementation. Once the gpu
57 // unit tests have initialized with kGLImplementationMock, we don't want to 53 // unit tests have initialized with kGLImplementationMock, we don't want to
58 // later switch to another GL implementation. 54 // later switch to another GL implementation.
59 DCHECK_EQ(kGLImplementationNone, GetGLImplementation()); 55 DCHECK_EQ(kGLImplementationNone, GetGLImplementation());
60 56
61 // Allow the main thread or another to initialize these bindings 57 // Allow the main thread or another to initialize these bindings
62 // after instituting restrictions on I/O. Going forward they will 58 // after instituting restrictions on I/O. Going forward they will
63 // likely be used in the browser process on most platforms. The 59 // likely be used in the browser process on most platforms. The
64 // one-time initialization cost is small, between 2 and 5 ms. 60 // one-time initialization cost is small, between 2 and 5 ms.
65 base::ThreadRestrictions::ScopedAllowIO allow_io; 61 base::ThreadRestrictions::ScopedAllowIO allow_io;
66 62
67 switch (implementation) { 63 switch (implementation) {
68 case kGLImplementationOSMesaGL: 64 case kGLImplementationOSMesaGL:
69 return InitializeStaticGLBindingsOSMesaGL(); 65 return InitializeStaticGLBindingsOSMesaGL();
70 case kGLImplementationDesktopGL: 66 case kGLImplementationDesktopGL: {
71 case kGLImplementationDesktopGLCoreProfile: {
72 base::NativeLibrary library = NULL; 67 base::NativeLibrary library = NULL;
73 const base::CommandLine* command_line = 68 const base::CommandLine* command_line =
74 base::CommandLine::ForCurrentProcess(); 69 base::CommandLine::ForCurrentProcess();
75 70
76 if (command_line->HasSwitch(switches::kTestGLLib)) 71 if (command_line->HasSwitch(switches::kTestGLLib))
77 library = LoadLibraryAndPrintError( 72 library = LoadLibraryAndPrintError(
78 command_line->GetSwitchValueASCII(switches::kTestGLLib).c_str()); 73 command_line->GetSwitchValueASCII(switches::kTestGLLib).c_str());
79 74
80 if (!library) { 75 if (!library) {
81 library = LoadLibraryAndPrintError(kGLLibraryName); 76 library = LoadLibraryAndPrintError(kGLLibraryName);
82 } 77 }
83 78
84 if (!library) 79 if (!library)
85 return false; 80 return false;
86 81
87 GLGetProcAddressProc get_proc_address = 82 GLGetProcAddressProc get_proc_address =
88 reinterpret_cast<GLGetProcAddressProc>( 83 reinterpret_cast<GLGetProcAddressProc>(
89 base::GetFunctionPointerFromNativeLibrary( 84 base::GetFunctionPointerFromNativeLibrary(
90 library, "glXGetProcAddress")); 85 library, "glXGetProcAddress"));
91 if (!get_proc_address) { 86 if (!get_proc_address) {
92 LOG(ERROR) << "glxGetProcAddress not found."; 87 LOG(ERROR) << "glxGetProcAddress not found.";
93 base::UnloadNativeLibrary(library); 88 base::UnloadNativeLibrary(library);
94 return false; 89 return false;
95 } 90 }
96 91
97 SetGLGetProcAddressProc(get_proc_address); 92 SetGLGetProcAddressProc(get_proc_address);
98 AddGLNativeLibrary(library); 93 AddGLNativeLibrary(library);
99 SetGLImplementation(implementation); 94 SetGLImplementation(kGLImplementationDesktopGL);
100 95
101 InitializeStaticGLBindingsGL(); 96 InitializeStaticGLBindingsGL();
102 InitializeStaticGLBindingsGLX(); 97 InitializeStaticGLBindingsGLX();
103 break; 98 break;
104 } 99 }
105 case kGLImplementationEGLGLES2: { 100 case kGLImplementationEGLGLES2: {
106 base::NativeLibrary gles_library = 101 base::NativeLibrary gles_library =
107 LoadLibraryAndPrintError(kGLESv2LibraryName); 102 LoadLibraryAndPrintError(kGLESv2LibraryName);
108 if (!gles_library) 103 if (!gles_library)
109 return false; 104 return false;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 } 144 }
150 145
151 146
152 return true; 147 return true;
153 } 148 }
154 149
155 bool InitializeDynamicGLBindings(GLImplementation implementation, 150 bool InitializeDynamicGLBindings(GLImplementation implementation,
156 GLContext* context) { 151 GLContext* context) {
157 switch (implementation) { 152 switch (implementation) {
158 case kGLImplementationOSMesaGL: 153 case kGLImplementationOSMesaGL:
159 case kGLImplementationDesktopGL: 154 case kGLImplementationDesktopGL:
160 case kGLImplementationDesktopGLCoreProfile:
161 case kGLImplementationEGLGLES2: 155 case kGLImplementationEGLGLES2:
162 InitializeDynamicGLBindingsGL(context); 156 InitializeDynamicGLBindingsGL(context);
163 break; 157 break;
164 case kGLImplementationMockGL: 158 case kGLImplementationMockGL:
165 if (!context) { 159 if (!context) {
166 scoped_refptr<GLContextStubWithExtensions> mock_context( 160 scoped_refptr<GLContextStubWithExtensions> mock_context(
167 new GLContextStubWithExtensions()); 161 new GLContextStubWithExtensions());
168 mock_context->SetGLVersionString("3.0"); 162 mock_context->SetGLVersionString("3.0");
169 InitializeDynamicGLBindingsGL(mock_context.get()); 163 InitializeDynamicGLBindingsGL(mock_context.get());
170 } else 164 } else
(...skipping 19 matching lines...) Expand all
190 ClearGLBindingsGLX(); 184 ClearGLBindingsGLX();
191 ClearGLBindingsOSMESA(); 185 ClearGLBindingsOSMESA();
192 SetGLImplementation(kGLImplementationNone); 186 SetGLImplementation(kGLImplementationNone);
193 187
194 UnloadGLNativeLibraries(); 188 UnloadGLNativeLibraries();
195 } 189 }
196 190
197 bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info) { 191 bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info) {
198 switch (GetGLImplementation()) { 192 switch (GetGLImplementation()) {
199 case kGLImplementationDesktopGL: 193 case kGLImplementationDesktopGL:
200 case kGLImplementationDesktopGLCoreProfile:
201 return GetGLWindowSystemBindingInfoGLX(info); 194 return GetGLWindowSystemBindingInfoGLX(info);
202 case kGLImplementationEGLGLES2: 195 case kGLImplementationEGLGLES2:
203 return GetGLWindowSystemBindingInfoEGL(info); 196 return GetGLWindowSystemBindingInfoEGL(info);
204 default: 197 default:
205 return false; 198 return false;
206 } 199 }
207 return false; 200 return false;
208 } 201 }
209 202
210 } // namespace gfx 203 } // 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