Index: app/gfx/gl/gl_context.cc |
=================================================================== |
--- app/gfx/gl/gl_context.cc (revision 49195) |
+++ app/gfx/gl/gl_context.cc (working copy) |
@@ -2,77 +2,13 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include <GL/glew.h> |
- |
#include "app/gfx/gl/gl_context.h" |
+#include "app/gfx/gl/gl_bindings.h" |
+#include "app/gfx/gl/gl_implementation.h" |
#include "base/logging.h" |
namespace gfx { |
-// GLEW initialization is extremely expensive because it looks up |
-// hundreds of function pointers. Realistically we are not going to |
-// switch between GL implementations on the fly, so for the time being |
-// we only do the context-dependent GLEW initialization once. |
-bool InitializeGLEW() { |
-#if defined(UNIT_TEST) |
- return true; |
-#else |
- static bool initialized = false; |
- if (initialized) |
- return true; |
- |
- // Initializes context-dependent parts of GLEW. |
- if (glewInit() != GLEW_OK) { |
- LOG(ERROR) << "GLEW failed initialization"; |
- return false; |
- } |
- |
- // Check to see that we can use the OpenGL vertex attribute APIs |
- // TODO(petersont): Return false if this check fails, but because some |
- // Intel hardware does not support OpenGL 2.0, yet does support all of the |
- // extensions we require, we only log an error. A future CL should change |
- // this check to ensure that all of the extension strings we require are |
- // present. |
- if (!GLEW_VERSION_2_0) { |
- DLOG(ERROR) << "GL drivers do not have OpenGL 2.0 functionality."; |
- } |
- |
- // Check for necessary extensions. |
- bool extensions_found = true; |
- if (!GLEW_ARB_vertex_buffer_object) { |
- // NOTE: Linux NVidia drivers claim to support OpenGL 2.0 when using |
- // indirect rendering (e.g. remote X), but it is actually lying. The |
- // ARB_vertex_buffer_object functions silently no-op (!) when using |
- // indirect rendering, leading to crashes. Fortunately, in that case, the |
- // driver claims to not support ARB_vertex_buffer_object, so fail in that |
- // case. |
- DLOG(ERROR) << "GL drivers do not support vertex buffer objects."; |
- extensions_found = false; |
- } |
- if (!GLEW_EXT_framebuffer_object) { |
- DLOG(ERROR) << "GL drivers do not support framebuffer objects."; |
- extensions_found = false; |
- } |
- if (!GLEW_VERSION_2_0 && !GLEW_EXT_stencil_two_side) { |
- DLOG(ERROR) << "Two sided stencil extension missing."; |
- extensions_found = false; |
- } |
- if (!GLEW_VERSION_1_4 && !GLEW_EXT_blend_func_separate) { |
- DLOG(ERROR) <<"Separate blend func extension missing."; |
- extensions_found = false; |
- } |
- if (!GLEW_VERSION_2_0 && !GLEW_EXT_blend_equation_separate) { |
- DLOG(ERROR) << "Separate blend function extension missing."; |
- extensions_found = false; |
- } |
- if (!extensions_found) |
- return false; |
- |
- initialized = true; |
- return true; |
-#endif |
-} |
- |
bool GLContext::InitializeCommon() { |
if (!MakeCurrent()) |
return false; |