| OLD | NEW | 
|   1  |   1  | 
|   2 /* |   2 /* | 
|   3  * Copyright 2011 Google Inc. |   3  * Copyright 2011 Google Inc. | 
|   4  * |   4  * | 
|   5  * Use of this source code is governed by a BSD-style license that can be |   5  * Use of this source code is governed by a BSD-style license that can be | 
|   6  * found in the LICENSE file. |   6  * found in the LICENSE file. | 
|   7  */ |   7  */ | 
|   8  |   8  | 
|   9 #include "gl/GrGLInterface.h" |   9 #include "gl/GrGLInterface.h" | 
|  10 #include "gl/GrGLAssembleInterface.h" |  10 #include "gl/GrGLAssembleInterface.h" | 
|  11 #include "gl/GrGLUtil.h" |  11 #include "gl/GrGLUtil.h" | 
|  12 #define WIN32_LEAN_AND_MEAN |  12 #define WIN32_LEAN_AND_MEAN | 
|  13 #include <windows.h> |  13 #include <windows.h> | 
|  14  |  14  | 
|  15 class AutoLibraryUnload { |  15 class AutoLibraryUnload { | 
|  16 public: |  16 public: | 
|  17     AutoLibraryUnload(const char* moduleName) { |  17     AutoLibraryUnload(const char* moduleName) { | 
|  18         fModule = LoadLibrary(moduleName); |  18         fModule = LoadLibrary(moduleName); | 
|  19     } |  19     } | 
|  20     ~AutoLibraryUnload() { |  20     ~AutoLibraryUnload() { | 
|  21         if (NULL != fModule) { |  21         if (fModule) { | 
|  22             FreeLibrary(fModule); |  22             FreeLibrary(fModule); | 
|  23         } |  23         } | 
|  24     } |  24     } | 
|  25     HMODULE get() const { return fModule; } |  25     HMODULE get() const { return fModule; } | 
|  26  |  26  | 
|  27 private: |  27 private: | 
|  28     HMODULE fModule; |  28     HMODULE fModule; | 
|  29 }; |  29 }; | 
|  30  |  30  | 
|  31 class GLProcGetter { |  31 class GLProcGetter { | 
|  32 public: |  32 public: | 
|  33     GLProcGetter() : fGLLib("opengl32.dll") {} |  33     GLProcGetter() : fGLLib("opengl32.dll") {} | 
|  34  |  34  | 
|  35     bool isInitialized() const { return NULL != fGLLib.get(); } |  35     bool isInitialized() const { return SkToBool(fGLLib.get()); } | 
|  36  |  36  | 
|  37     GrGLFuncPtr getProc(const char name[]) const { |  37     GrGLFuncPtr getProc(const char name[]) const { | 
|  38         GrGLFuncPtr proc; |  38         GrGLFuncPtr proc; | 
|  39         if (NULL != (proc = (GrGLFuncPtr) GetProcAddress(fGLLib.get(), name))) { |  39         if ((proc = (GrGLFuncPtr) GetProcAddress(fGLLib.get(), name))) { | 
|  40             return proc; |  40             return proc; | 
|  41         } |  41         } | 
|  42         if (NULL != (proc = (GrGLFuncPtr) wglGetProcAddress(name))) { |  42         if ((proc = (GrGLFuncPtr) wglGetProcAddress(name))) { | 
|  43             return proc; |  43             return proc; | 
|  44         } |  44         } | 
|  45         return NULL; |  45         return NULL; | 
|  46     } |  46     } | 
|  47  |  47  | 
|  48 private: |  48 private: | 
|  49     AutoLibraryUnload fGLLib; |  49     AutoLibraryUnload fGLLib; | 
|  50 }; |  50 }; | 
|  51  |  51  | 
|  52 static GrGLFuncPtr win_get_gl_proc(void* ctx, const char name[]) { |  52 static GrGLFuncPtr win_get_gl_proc(void* ctx, const char name[]) { | 
|  53     SkASSERT(NULL != ctx); |  53     SkASSERT(ctx); | 
|  54     SkASSERT(NULL != wglGetCurrentContext()); |  54     SkASSERT(wglGetCurrentContext()); | 
|  55     const GLProcGetter* getter = (const GLProcGetter*) ctx; |  55     const GLProcGetter* getter = (const GLProcGetter*) ctx; | 
|  56     return getter->getProc(name); |  56     return getter->getProc(name); | 
|  57 } |  57 } | 
|  58  |  58  | 
|  59 /* |  59 /* | 
|  60  * Windows makes the GL funcs all be __stdcall instead of __cdecl :( |  60  * Windows makes the GL funcs all be __stdcall instead of __cdecl :( | 
|  61  * This implementation will only work if GR_GL_FUNCTION_TYPE is __stdcall. |  61  * This implementation will only work if GR_GL_FUNCTION_TYPE is __stdcall. | 
|  62  * Otherwise, a springboard would be needed that hides the calling convention. |  62  * Otherwise, a springboard would be needed that hides the calling convention. | 
|  63  */ |  63  */ | 
|  64 const GrGLInterface* GrGLCreateNativeInterface() { |  64 const GrGLInterface* GrGLCreateNativeInterface() { | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|  78     const char* verStr = reinterpret_cast<const char*>(getString(GR_GL_VERSION))
    ; |  78     const char* verStr = reinterpret_cast<const char*>(getString(GR_GL_VERSION))
    ; | 
|  79     GrGLStandard standard = GrGLGetStandardInUseFromString(verStr); |  79     GrGLStandard standard = GrGLGetStandardInUseFromString(verStr); | 
|  80  |  80  | 
|  81     if (kGLES_GrGLStandard == standard) { |  81     if (kGLES_GrGLStandard == standard) { | 
|  82         return GrGLAssembleGLESInterface(&getter, win_get_gl_proc); |  82         return GrGLAssembleGLESInterface(&getter, win_get_gl_proc); | 
|  83     } else if (kGL_GrGLStandard == standard) { |  83     } else if (kGL_GrGLStandard == standard) { | 
|  84         return GrGLAssembleGLInterface(&getter, win_get_gl_proc); |  84         return GrGLAssembleGLInterface(&getter, win_get_gl_proc); | 
|  85     } |  85     } | 
|  86     return NULL; |  86     return NULL; | 
|  87 } |  87 } | 
| OLD | NEW |