| Index: ui/gfx/gl/gl_implementation_win.cc
|
| ===================================================================
|
| --- ui/gfx/gl/gl_implementation_win.cc (revision 99168)
|
| +++ ui/gfx/gl/gl_implementation_win.cc (working copy)
|
| @@ -2,13 +2,18 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include <d3dx9.h>
|
| +
|
| #include <vector>
|
|
|
| +#include "base/at_exit.h"
|
| #include "base/base_paths.h"
|
| +#include "base/bind.h"
|
| #include "base/file_path.h"
|
| #include "base/logging.h"
|
| #include "base/native_library.h"
|
| #include "base/path_service.h"
|
| +#include "base/stringprintf.h"
|
| #include "ui/gfx/gl/gl_bindings.h"
|
| #include "ui/gfx/gl/gl_implementation.h"
|
|
|
| @@ -29,6 +34,23 @@
|
| glDepthRangef(static_cast<GLclampf>(z_near), static_cast<GLclampf>(z_far));
|
| }
|
|
|
| +bool LoadD3DXLibrary(const FilePath& module_path,
|
| + const FilePath::StringType& name) {
|
| + base::NativeLibrary library = base::LoadNativeLibrary(FilePath(name), NULL);
|
| + if (!library) {
|
| + library = base::LoadNativeLibrary(module_path.Append(name), NULL);
|
| + if (!library) {
|
| + VLOG(1) << name << " not found.";
|
| + return false;
|
| + }
|
| + }
|
| +
|
| + base::AtExitManager::RegisterTask(
|
| + base::Bind(base::UnloadNativeLibrary, library));
|
| +
|
| + return true;
|
| +}
|
| +
|
| } // namespace anonymous
|
|
|
| bool InitializeGLBindings(GLImplementation implementation) {
|
| @@ -83,9 +105,18 @@
|
| SetupSoftwareRenderer();
|
| #endif
|
|
|
| + // Attempt to load D3DX and its dependencies using the default search path
|
| + // and if that fails, using an absolute path. This is to ensure these DLLs
|
| + // are loaded before ANGLE is loaded in case they are not in the default
|
| + // search path.
|
| + LoadD3DXLibrary(module_path, base::StringPrintf(L"d3dcompiler_%d.dll",
|
| + D3DX_SDK_VERSION));
|
| + LoadD3DXLibrary(module_path, base::StringPrintf(L"d3dx9_%d.dll",
|
| + D3DX_SDK_VERSION));
|
| +
|
| // Load libglesv2.dll before libegl.dll because the latter is dependent on
|
| // the former and if there is another version of libglesv2.dll in the dll
|
| - // search path, it will get loaded.
|
| + // search path, it will get loaded instead.
|
| base::NativeLibrary gles_library = base::LoadNativeLibrary(
|
| module_path.Append(L"libglesv2.dll"), NULL);
|
| if (!gles_library) {
|
|
|