| Index: ui/gfx/gl/gl_surface_wgl.cc
|
| ===================================================================
|
| --- ui/gfx/gl/gl_surface_wgl.cc (revision 110321)
|
| +++ ui/gfx/gl/gl_surface_wgl.cc (working copy)
|
| @@ -5,6 +5,7 @@
|
| #include "ui/gfx/gl/gl_surface_wgl.h"
|
|
|
| #include "base/logging.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| #include "ui/gfx/gl/gl_bindings.h"
|
|
|
| namespace gfx {
|
| @@ -157,13 +158,30 @@
|
| return true;
|
|
|
| DCHECK(g_display == NULL);
|
| - g_display = new DisplayWGL;
|
| - if (!g_display->Init()) {
|
| - delete g_display;
|
| - g_display = NULL;
|
| + scoped_ptr<DisplayWGL> wgl_display(new DisplayWGL);
|
| + if (!wgl_display->Init())
|
| return false;
|
| +
|
| + // Create a temporary GL context to bind to extension entry points.
|
| + HGLRC gl_context = wglCreateContext(wgl_display->device_context());
|
| + if (!gl_context) {
|
| + LOG(ERROR) << "Failed to create temporary context.";
|
| + return false;
|
| }
|
| + if (!wglMakeCurrent(wgl_display->device_context(), gl_context)) {
|
| + LOG(ERROR) << "Failed to make temporary GL context current.";
|
| + wglDeleteContext(gl_context);
|
| + return false;
|
| + }
|
| + // Get bindings to extension functions that cannot be acquired without a
|
| + // current context.
|
| + InitializeGLBindingsGL();
|
| + InitializeGLBindingsWGL();
|
|
|
| + wglMakeCurrent(NULL, NULL);
|
| + wglDeleteContext(gl_context);
|
| +
|
| + g_display = wgl_display.release();
|
| initialized = true;
|
| return true;
|
| }
|
|
|