diff options
author | 2015-11-16 06:48:44 -0800 | |
---|---|---|
committer | 2015-11-16 06:48:44 -0800 | |
commit | b1a32ad51767d7639abc6ba16aae656145d7fc77 (patch) | |
tree | 37ff3a1e8efc0497cf0f6e96afc5d1773c291506 /src/gpu/gl/GrGLAssembleInterface.cpp | |
parent | 0dfa62c97707ac9b0fc0bdba7acfc8405db5c836 (diff) |
Add support for EGLImage to GrGLInterface
BUG=skia:
Review URL: https://codereview.chromium.org/1434813002
Diffstat (limited to 'src/gpu/gl/GrGLAssembleInterface.cpp')
-rw-r--r-- | src/gpu/gl/GrGLAssembleInterface.cpp | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/src/gpu/gl/GrGLAssembleInterface.cpp b/src/gpu/gl/GrGLAssembleInterface.cpp index 1cb721b1bb..e606f4a29e 100644 --- a/src/gpu/gl/GrGLAssembleInterface.cpp +++ b/src/gpu/gl/GrGLAssembleInterface.cpp @@ -14,6 +14,8 @@ #define GET_PROC_SUFFIX(F, S) functions->f ## F = (GrGL ## F ## Proc) get(ctx, "gl" #F #S) #define GET_PROC_LOCAL(F) GrGL ## F ## Proc F = (GrGL ## F ## Proc) get(ctx, "gl" #F) +#define GET_EGL_PROC_SUFFIX(F, S) functions->f ## F = (GrEGL ## F ## Proc) get(ctx, "egl" #F #S) + const GrGLInterface* GrGLAssembleInterface(void* ctx, GrGLGetProc get) { GET_PROC_LOCAL(GetString); if (nullptr == GetString) { @@ -35,6 +37,21 @@ const GrGLInterface* GrGLAssembleInterface(void* ctx, GrGLGetProc get) { return nullptr; } +static void get_egl_query_and_display(GrEGLQueryStringProc* queryString, GrEGLDisplay* display, + void* ctx, GrGLGetProc get) { + *queryString = (GrEGLQueryStringProc) get(ctx, "eglQueryString"); + *display = GR_EGL_NO_DISPLAY; + if (*queryString) { + GrEGLGetCurrentDisplayProc getCurrentDisplay = + (GrEGLGetCurrentDisplayProc) get(ctx, "eglGetCurrentDisplay"); + if (getCurrentDisplay) { + *display = getCurrentDisplay(); + } else { + *queryString = nullptr; + } + } +} + const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) { GET_PROC_LOCAL(GetString); GET_PROC_LOCAL(GetStringi); @@ -53,8 +70,12 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) { return nullptr; } + GrEGLQueryStringProc queryString; + GrEGLDisplay display; + get_egl_query_and_display(&queryString, &display, ctx, get); GrGLExtensions extensions; - if (!extensions.init(kGL_GrGLStandard, GetString, GetStringi, GetIntegerv)) { + if (!extensions.init(kGL_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString, + display)) { return nullptr; } @@ -462,6 +483,11 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) { GET_PROC(ObjectLabel); } + if (extensions.has("EGL_KHR_image") || extensions.has("EGL_KHR_image_base")) { + GET_EGL_PROC_SUFFIX(CreateImage, KHR); + GET_EGL_PROC_SUFFIX(DestroyImage, KHR); + } + interface->fStandard = kGL_GrGLStandard; interface->fExtensions.swap(&extensions); @@ -483,8 +509,12 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) { GET_PROC_LOCAL(GetIntegerv); GET_PROC_LOCAL(GetStringi); + GrEGLQueryStringProc queryString; + GrEGLDisplay display; + get_egl_query_and_display(&queryString, &display, ctx, get); GrGLExtensions extensions; - if (!extensions.init(kGLES_GrGLStandard, GetString, GetStringi, GetIntegerv)) { + if (!extensions.init(kGLES_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString, + display)) { return nullptr; } @@ -766,6 +796,11 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) { GET_PROC_SUFFIX(BindUniformLocation, CHROMIUM); } + if (extensions.has("EGL_KHR_image") || extensions.has("EGL_KHR_image_base")) { + GET_EGL_PROC_SUFFIX(CreateImage, KHR); + GET_EGL_PROC_SUFFIX(DestroyImage, KHR); + } + interface->fStandard = kGLES_GrGLStandard; interface->fExtensions.swap(&extensions); |