Index: src/utils/win/SkWGL_win.cpp |
diff --git a/src/utils/win/SkWGL_win.cpp b/src/utils/win/SkWGL_win.cpp |
index 3b1966dae8fbcd352229440c6d5c2582cb234046..a8552a8ea3ce19c74c1747bb137047a59ab6f2e4 100644 |
--- a/src/utils/win/SkWGL_win.cpp |
+++ b/src/utils/win/SkWGL_win.cpp |
@@ -245,7 +245,7 @@ SkWGLExtensions::SkWGLExtensions() |
wglMakeCurrent(prevDC, prevGLRC); |
} |
-HGLRC SkCreateWGLContext(HDC dc, int msaaSampleCount, bool preferCoreProfile) { |
+HGLRC SkCreateWGLContext(HDC dc, int msaaSampleCount, SkWGLContextRequest contextType) { |
SkWGLExtensions extensions; |
if (!extensions.hasExtension(dc, "WGL_ARB_pixel_format")) { |
return NULL; |
@@ -307,27 +307,44 @@ HGLRC SkCreateWGLContext(HDC dc, int msaaSampleCount, bool preferCoreProfile) { |
} |
HGLRC glrc = NULL; |
- if (preferCoreProfile && extensions.hasExtension(dc, "WGL_ARB_create_context")) { |
- static const int kCoreGLVersions[] = { |
- 4, 3, |
- 4, 2, |
- 4, 1, |
- 4, 0, |
- 3, 3, |
- 3, 2, |
- }; |
- int coreProfileAttribs[] = { |
- SK_WGL_CONTEXT_MAJOR_VERSION, -1, |
- SK_WGL_CONTEXT_MINOR_VERSION, -1, |
- SK_WGL_CONTEXT_PROFILE_MASK, SK_WGL_CONTEXT_CORE_PROFILE_BIT, |
+ if (kGLES_SkWGLContextRequest == contextType) { |
+ if (!extensions.hasExtension(dc, "WGL_EXT_create_context_es2_profile")) { |
+ return NULL; |
+ } |
+ static const int glesAttribs[] = { |
+ SK_WGL_CONTEXT_MAJOR_VERSION, 3, |
+ SK_WGL_CONTEXT_MINOR_VERSION, 0, |
+ SK_WGL_CONTEXT_PROFILE_MASK, SK_WGL_CONTEXT_ES2_PROFILE_BIT, |
0, |
}; |
- for (int v = 0; v < SK_ARRAY_COUNT(kCoreGLVersions) / 2; ++v) { |
- coreProfileAttribs[1] = kCoreGLVersions[2 * v]; |
- coreProfileAttribs[3] = kCoreGLVersions[2 * v + 1]; |
- glrc = extensions.createContextAttribs(dc, NULL, coreProfileAttribs); |
- if (NULL != glrc) { |
- break; |
+ glrc = extensions.createContextAttribs(dc, NULL, glesAttribs); |
+ if (NULL == glrc) { |
+ return NULL; |
+ } |
+ } else { |
+ if (kGLPreferCoreProfile_SkWGLContextRequest == contextType && |
+ extensions.hasExtension(dc, "WGL_ARB_create_context")) { |
+ static const int kCoreGLVersions[] = { |
+ 4, 3, |
+ 4, 2, |
+ 4, 1, |
+ 4, 0, |
+ 3, 3, |
+ 3, 2, |
+ }; |
+ int coreProfileAttribs[] = { |
+ SK_WGL_CONTEXT_MAJOR_VERSION, -1, |
+ SK_WGL_CONTEXT_MINOR_VERSION, -1, |
+ SK_WGL_CONTEXT_PROFILE_MASK, SK_WGL_CONTEXT_CORE_PROFILE_BIT, |
+ 0, |
+ }; |
+ for (int v = 0; v < SK_ARRAY_COUNT(kCoreGLVersions) / 2; ++v) { |
+ coreProfileAttribs[1] = kCoreGLVersions[2 * v]; |
+ coreProfileAttribs[3] = kCoreGLVersions[2 * v + 1]; |
+ glrc = extensions.createContextAttribs(dc, NULL, coreProfileAttribs); |
+ if (NULL != glrc) { |
+ break; |
+ } |
} |
} |
} |