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 "base/base_paths.h" | 5 #include "base/base_paths.h" |
6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/mac/foundation_util.h" | 8 #include "base/mac/foundation_util.h" |
9 #include "base/native_library.h" | 9 #include "base/native_library.h" |
10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
11 #include "base/threading/thread_restrictions.h" | 11 #include "base/threading/thread_restrictions.h" |
12 #include "ui/gl/gl_bindings.h" | 12 #include "ui/gl/gl_bindings.h" |
13 #include "ui/gl/gl_context_mock_version.h" | |
13 #include "ui/gl/gl_gl_api_implementation.h" | 14 #include "ui/gl/gl_gl_api_implementation.h" |
14 #include "ui/gl/gl_implementation.h" | 15 #include "ui/gl/gl_implementation.h" |
15 #include "ui/gl/gl_osmesa_api_implementation.h" | 16 #include "ui/gl/gl_osmesa_api_implementation.h" |
16 | 17 |
17 namespace gfx { | 18 namespace gfx { |
18 namespace { | 19 namespace { |
19 const char kOpenGLFrameworkPath[] = | 20 const char kOpenGLFrameworkPath[] = |
20 "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"; | 21 "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"; |
21 } // namespace | 22 } // namespace |
22 | 23 |
23 void GetAllowedGLImplementations(std::vector<GLImplementation>* impls) { | 24 void GetAllowedGLImplementations(std::vector<GLImplementation>* impls) { |
24 impls->push_back(kGLImplementationDesktopGL); | 25 impls->push_back(kGLImplementationDesktopGL); |
25 impls->push_back(kGLImplementationAppleGL); | 26 impls->push_back(kGLImplementationAppleGL); |
26 impls->push_back(kGLImplementationOSMesaGL); | 27 impls->push_back(kGLImplementationOSMesaGL); |
27 } | 28 } |
28 | 29 |
29 bool InitializeGLBindings(GLImplementation implementation) { | 30 bool InitializeStaticGLBindings(GLImplementation implementation) { |
30 // Prevent reinitialization with a different implementation. Once the gpu | 31 // Prevent reinitialization with a different implementation. Once the gpu |
31 // unit tests have initialized with kGLImplementationMock, we don't want to | 32 // unit tests have initialized with kGLImplementationMock, we don't want to |
32 // later switch to another GL implementation. | 33 // later switch to another GL implementation. |
33 if (GetGLImplementation() != kGLImplementationNone) | 34 if (GetGLImplementation() != kGLImplementationNone) |
34 return true; | 35 return true; |
35 | 36 |
36 // Allow the main thread or another to initialize these bindings | 37 // Allow the main thread or another to initialize these bindings |
37 // after instituting restrictions on I/O. Going forward they will | 38 // after instituting restrictions on I/O. Going forward they will |
38 // likely be used in the browser process on most platforms. The | 39 // likely be used in the browser process on most platforms. The |
39 // one-time initialization cost is small, between 2 and 5 ms. | 40 // one-time initialization cost is small, between 2 and 5 ms. |
(...skipping 30 matching lines...) Expand all Loading... | |
70 if (!get_proc_address) { | 71 if (!get_proc_address) { |
71 LOG(ERROR) << "OSMesaGetProcAddress not found."; | 72 LOG(ERROR) << "OSMesaGetProcAddress not found."; |
72 base::UnloadNativeLibrary(library); | 73 base::UnloadNativeLibrary(library); |
73 return false; | 74 return false; |
74 } | 75 } |
75 | 76 |
76 SetGLGetProcAddressProc(get_proc_address); | 77 SetGLGetProcAddressProc(get_proc_address); |
77 AddGLNativeLibrary(library); | 78 AddGLNativeLibrary(library); |
78 SetGLImplementation(kGLImplementationOSMesaGL); | 79 SetGLImplementation(kGLImplementationOSMesaGL); |
79 | 80 |
80 InitializeGLBindingsGL(); | 81 InitializeStaticGLBindingsGL(); |
81 InitializeGLBindingsOSMESA(); | 82 InitializeStaticGLBindingsOSMESA(); |
82 break; | 83 break; |
83 } | 84 } |
84 case kGLImplementationDesktopGL: | 85 case kGLImplementationDesktopGL: |
85 case kGLImplementationAppleGL: { | 86 case kGLImplementationAppleGL: { |
86 base::NativeLibrary library = base::LoadNativeLibrary( | 87 base::NativeLibrary library = base::LoadNativeLibrary( |
87 base::FilePath(kOpenGLFrameworkPath), NULL); | 88 base::FilePath(kOpenGLFrameworkPath), NULL); |
88 if (!library) { | 89 if (!library) { |
89 LOG(ERROR) << "OpenGL framework not found"; | 90 LOG(ERROR) << "OpenGL framework not found"; |
90 return false; | 91 return false; |
91 } | 92 } |
92 | 93 |
93 AddGLNativeLibrary(library); | 94 AddGLNativeLibrary(library); |
94 SetGLImplementation(implementation); | 95 SetGLImplementation(implementation); |
95 | 96 |
96 InitializeGLBindingsGL(); | 97 InitializeStaticGLBindingsGL(); |
97 break; | 98 break; |
98 } | 99 } |
99 case kGLImplementationMockGL: { | 100 case kGLImplementationMockGL: { |
100 SetGLGetProcAddressProc(GetMockGLProcAddress); | 101 SetGLGetProcAddressProc(GetMockGLProcAddress); |
101 SetGLImplementation(kGLImplementationMockGL); | 102 SetGLImplementation(kGLImplementationMockGL); |
102 InitializeGLBindingsGL(); | 103 InitializeStaticGLBindingsGL(); |
103 break; | 104 break; |
104 } | 105 } |
105 default: | 106 default: |
106 return false; | 107 return false; |
107 } | 108 } |
108 | 109 |
109 return true; | 110 return true; |
110 } | 111 } |
111 | 112 |
112 bool InitializeGLExtensionBindings(GLImplementation implementation, | 113 bool InitializeDynamicGLBindings(GLImplementation implementation, |
113 GLContext* context) { | 114 GLContext* context) { |
114 switch (implementation) { | 115 switch (implementation) { |
115 case kGLImplementationOSMesaGL: | 116 case kGLImplementationOSMesaGL: |
116 InitializeGLExtensionBindingsGL(context); | 117 InitializeDynamicGLBindingsGL(context); |
117 InitializeGLExtensionBindingsOSMESA(context); | 118 InitializeDynamicGLBindingsOSMESA(context); |
118 break; | 119 break; |
119 case kGLImplementationDesktopGL: | 120 case kGLImplementationDesktopGL: |
120 case kGLImplementationAppleGL: | 121 case kGLImplementationAppleGL: |
121 InitializeGLExtensionBindingsGL(context); | 122 InitializeDynamicGLBindingsGL(context); |
122 break; | 123 break; |
123 case kGLImplementationMockGL: | 124 case kGLImplementationMockGL: |
124 InitializeGLExtensionBindingsGL(context); | 125 { |
126 scoped_refptr<GLContextMockVersion> mock_context( | |
127 new GLContextMockVersion("3.0")); | |
Ken Russell (switch to Gerrit)
2013/12/04 02:30:51
Not sure 3.0 is a good default, given that Chromiu
oetuaho
2013/12/04 13:05:36
Since the unit tests don't specify an extension st
| |
128 InitializeDynamicGLBindingsGL(mock_context.get()); | |
129 } | |
125 break; | 130 break; |
126 default: | 131 default: |
127 return false; | 132 return false; |
128 } | 133 } |
129 | 134 |
130 return true; | 135 return true; |
131 } | 136 } |
132 | 137 |
133 void InitializeDebugGLBindings() { | 138 void InitializeDebugGLBindings() { |
134 InitializeDebugGLBindingsGL(); | 139 InitializeDebugGLBindingsGL(); |
135 InitializeDebugGLBindingsOSMESA(); | 140 InitializeDebugGLBindingsOSMESA(); |
136 } | 141 } |
137 | 142 |
138 void ClearGLBindings() { | 143 void ClearGLBindings() { |
139 ClearGLBindingsGL(); | 144 ClearGLBindingsGL(); |
140 ClearGLBindingsOSMESA(); | 145 ClearGLBindingsOSMESA(); |
141 SetGLImplementation(kGLImplementationNone); | 146 SetGLImplementation(kGLImplementationNone); |
142 | 147 |
143 UnloadGLNativeLibraries(); | 148 UnloadGLNativeLibraries(); |
144 } | 149 } |
145 | 150 |
146 bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info) { | 151 bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info) { |
147 return false; | 152 return false; |
148 } | 153 } |
149 | 154 |
150 } // namespace gfx | 155 } // namespace gfx |
OLD | NEW |