std::unique_ptr<GLContextEGL> GLContextEGL::createContext(GLNativeWindowType window, PlatformDisplay& platformDisplay) { if (platformDisplay.eglDisplay() == EGL_NO_DISPLAY) return nullptr; if (eglBindAPI(gEGLAPIVersion) == EGL_FALSE) return nullptr; EGLContext eglSharingContext = platformDisplay.sharingGLContext() ? static_cast<GLContextEGL*>(platformDisplay.sharingGLContext())->m_context : EGL_NO_CONTEXT; auto context = window ? createWindowContext(window, platformDisplay, eglSharingContext) : nullptr; if (!context) context = createSurfacelessContext(platformDisplay, eglSharingContext); if (!context) { #if PLATFORM(X11) if (platformDisplay.type() == PlatformDisplay::Type::X11) context = createPixmapContext(platformDisplay, eglSharingContext); #endif #if PLATFORM(WAYLAND) if (platformDisplay.type() == PlatformDisplay::Type::Wayland) context = createWaylandContext(platformDisplay, eglSharingContext); #endif } if (!context) context = createPbufferContext(platformDisplay, eglSharingContext); return context; }
PassOwnPtr<GLContextEGL> GLContextEGL::createContext(EGLNativeWindowType window, GLContext* sharingContext) { if (!sharedEGLDisplay()) return nullptr; static bool initialized = false; static bool success = true; if (!initialized) { #if !USE(OPENGL_ES_2) success = initializeOpenGLShims(); #endif initialized = true; } if (!success) return nullptr; EGLContext eglSharingContext = sharingContext ? static_cast<GLContextEGL*>(sharingContext)->m_context : 0; OwnPtr<GLContextEGL> context = window ? createWindowContext(window, sharingContext) : nullptr; if (!context) context = createPixmapContext(eglSharingContext); if (!context) context = createPbufferContext(eglSharingContext); return context.release(); }
std::unique_ptr<GLContextGLX> GLContextGLX::createSharingContext(PlatformDisplay& platformDisplay) { auto context = createPbufferContext(platformDisplay); if (!context) context = createPixmapContext(platformDisplay); return context; }
std::unique_ptr<GLContextGLX> GLContextGLX::createContext(XID window, PlatformDisplay& platformDisplay) { GLXContext glxSharingContext = platformDisplay.sharingGLContext() ? static_cast<GLContextGLX*>(platformDisplay.sharingGLContext())->m_context.get() : nullptr; auto context = window ? createWindowContext(window, platformDisplay, glxSharingContext) : nullptr; if (!context) context = createPbufferContext(platformDisplay, glxSharingContext); if (!context) context = createPixmapContext(platformDisplay, glxSharingContext); return context; }
PassOwnPtr<GraphicsContext3DPrivate> GraphicsContext3DPrivate::create() { if (!sharedDisplay()) return nullptr; static bool initialized = false; static bool success = true; if (!initialized) { success = initializeOpenGLShims(); initialized = true; } if (!success) return nullptr; GraphicsContext3DPrivate* internal = createPbufferContext(); if (!internal) internal = createPixmapContext(); if (!internal) return nullptr; // The GraphicsContext3D constructor requires that this context is the current OpenGL context. internal->makeContextCurrent(); return adoptPtr(internal); }
std::unique_ptr<GLContextEGL> GLContextEGL::createSharingContext(PlatformDisplay& platformDisplay) { if (platformDisplay.eglDisplay() == EGL_NO_DISPLAY) return nullptr; if (eglBindAPI(gEGLAPIVersion) == EGL_FALSE) return nullptr; auto context = createSurfacelessContext(platformDisplay); if (!context) { #if PLATFORM(X11) if (platformDisplay.type() == PlatformDisplay::Type::X11) context = createPixmapContext(platformDisplay); #endif #if PLATFORM(WAYLAND) if (platformDisplay.type() == PlatformDisplay::Type::Wayland) context = createWaylandContext(platformDisplay); #endif } if (!context) context = createPbufferContext(platformDisplay); return context; }