diff options
author | 2014-06-22 22:56:53 -0700 | |
---|---|---|
committer | 2014-06-22 22:56:54 -0700 | |
commit | 74fc727dc88ee24d89f88cb1709f963e9073aeb3 (patch) | |
tree | c1bc9dd2101168a5fbb2b9d523aafac3828c7876 /src/utils/win | |
parent | 32956400b4d8f33394e2cdef9b66e8369ba2a0f3 (diff) |
Support using OpenGL ES context on desktop
Support using OpenGL ES context on desktop for unix and Android platforms. This
is mainly useful in development.
Add --gpuAPI flag to gm, dm, bench, bench_pictures and render_pictures. The
possible parameters for the flag are "gl" and "gles".
R=bsalomon@google.com, mtklein@google.com, robertphillips@google.com
Author: kkinnunen@nvidia.com
Review URL: https://codereview.chromium.org/319043005
Diffstat (limited to 'src/utils/win')
-rw-r--r-- | src/utils/win/SkWGL_win.cpp | 57 |
1 files changed, 37 insertions, 20 deletions
diff --git a/src/utils/win/SkWGL_win.cpp b/src/utils/win/SkWGL_win.cpp index 3b1966dae8..a8552a8ea3 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; + } } } } |