| Index: src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp
|
| diff --git a/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp b/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp
|
| index 8c58a53702b44dd4dfd05be8790afe344d4aedab..51b8ce9e6039a1ca0824bef8d8e723a863ffceaa 100644
|
| --- a/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp
|
| +++ b/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp
|
| @@ -46,7 +46,7 @@ static int ctxErrorHandler(Display *dpy, XErrorEvent *ev) {
|
|
|
| class GLXGLContext : public SkGLContext {
|
| public:
|
| - GLXGLContext(GrGLStandard forcedGpuAPI);
|
| + GLXGLContext(GrGLStandard forcedGpuAPI, GLXGLContext* shareList);
|
| ~GLXGLContext() override;
|
|
|
| private:
|
| @@ -62,14 +62,15 @@ private:
|
| GLXPixmap fGlxPixmap;
|
| };
|
|
|
| -GLXGLContext::GLXGLContext(GrGLStandard forcedGpuAPI)
|
| +GLXGLContext::GLXGLContext(GrGLStandard forcedGpuAPI, GLXGLContext* shareContext)
|
| : fContext(nullptr)
|
| , fDisplay(nullptr)
|
| , fPixmap(0)
|
| , fGlxPixmap(0) {
|
| -
|
| fDisplay = XOpenDisplay(0);
|
|
|
| + GLXContext glxShareContext = shareContext ? shareContext->fContext : nullptr;
|
| +
|
| if (!fDisplay) {
|
| SkDebugf("Failed to open X display.\n");
|
| this->destroyGLContext();
|
| @@ -189,7 +190,7 @@ GLXGLContext::GLXGLContext(GrGLStandard forcedGpuAPI)
|
| GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_ES2_PROFILE_BIT_EXT,
|
| None
|
| };
|
| - fContext = glXCreateContextAttribsARB(fDisplay, bestFbc, 0, True,
|
| + fContext = glXCreateContextAttribsARB(fDisplay, bestFbc, glxShareContext, True,
|
| context_attribs_gles);
|
| }
|
| } else {
|
| @@ -211,7 +212,8 @@ GLXGLContext::GLXGLContext(GrGLStandard forcedGpuAPI)
|
| None
|
| };
|
| fContext =
|
| - glXCreateContextAttribsARB(fDisplay, bestFbc, 0, True, context_attribs_gl);
|
| + glXCreateContextAttribsARB(fDisplay, bestFbc, glxShareContext, True,
|
| + context_attribs_gl);
|
|
|
| // Sync to ensure any errors generated are processed.
|
| XSync(fDisplay, False);
|
| @@ -237,7 +239,7 @@ GLXGLContext::GLXGLContext(GrGLStandard forcedGpuAPI)
|
|
|
| ctxErrorOccurred = false;
|
|
|
| - fContext = glXCreateContextAttribsARB(fDisplay, bestFbc, 0, True,
|
| + fContext = glXCreateContextAttribsARB(fDisplay, bestFbc, glxShareContext, True,
|
| context_attribs_gl_fallback);
|
| }
|
| }
|
| @@ -331,8 +333,9 @@ GrGLFuncPtr GLXGLContext::onPlatformGetProcAddress(const char* procName) const {
|
|
|
| } // anonymous namespace
|
|
|
| -SkGLContext* SkCreatePlatformGLContext(GrGLStandard forcedGpuAPI) {
|
| - GLXGLContext *ctx = new GLXGLContext(forcedGpuAPI);
|
| +SkGLContext* SkCreatePlatformGLContext(GrGLStandard forcedGpuAPI, SkGLContext* shareContext) {
|
| + GLXGLContext* glxShareContext = reinterpret_cast<GLXGLContext*>(shareContext);
|
| + GLXGLContext *ctx = new GLXGLContext(forcedGpuAPI, glxShareContext);
|
| if (!ctx->isValid()) {
|
| delete ctx;
|
| return nullptr;
|
|
|