WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Build Fix for GTK + Style fix
gtk_3dGraphicsContextPrivate_buildfix_2.patch (text/plain), 17.79 KB, created by
Dominik Röttsches (drott)
on 2011-08-31 06:38:13 PDT
(
hide
)
Description:
Build Fix for GTK + Style fix
Filename:
MIME Type:
Creator:
Dominik Röttsches (drott)
Created:
2011-08-31 06:38:13 PDT
Size:
17.79 KB
patch
obsolete
>commit de9377bb38fcb6d32fc79252a1bc28e78ec4eb53 >Author: Dominik Röttsches <dominik.rottsches@intel.com> >Date: Wed Aug 31 13:09:10 2011 +0300 > > Build fix for GTK after rename. > >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index ee2848c..be8a7bf 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,25 @@ >+2011-08-31 Dominik Röttsches <dominik.rottsches@linux.intel.com> >+ >+ Rename GraphicsContext3DInternal to GraphicsContext3DPrivate and add a dummy version of this class for Mac >+ https://bugs.webkit.org/show_bug.cgi?id=67172 >+ >+ Build fix, completing rename for GTK file. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * platform/graphics/gtk/GraphicsContext3DPrivate.cpp: Renamed from Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp. >+ (sharedDisplay): >+ (WebCore::activeGraphicsContexts): >+ (WebCore::GraphicsContext3DPrivate::addActiveGraphicsContext): >+ (WebCore::GraphicsContext3DPrivate::removeActiveGraphicsContext): >+ (WebCore::GraphicsContext3DPrivate::cleanupActiveContextsAtExit): >+ (WebCore::GraphicsContext3DPrivate::create): >+ (WebCore::GraphicsContext3DPrivate::createPbufferContext): >+ (WebCore::GraphicsContext3DPrivate::createPixmapContext): >+ (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate): >+ (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate): >+ (WebCore::GraphicsContext3DPrivate::makeContextCurrent): >+ > 2011-08-30 Philippe Normand <pnormand@igalia.com> > > [GTK] gstreamer/ files directly related to the MediaPlayer need VIDEO guards >diff --git a/Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp b/Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp >deleted file mode 100644 >index 84ff985..0000000 >--- a/Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp >+++ /dev/null >@@ -1,255 +0,0 @@ >-/* >- * Copyright (C) 2011 Igalia S.L. >- * >- * This library is free software; you can redistribute it and/or >- * modify it under the terms of the GNU Lesser General Public >- * License as published by the Free Software Foundation; either >- * version 2 of the License, or (at your option) any later version. >- * >- * This library is distributed in the hope that it will be useful, >- * but WITHOUT ANY WARRANTY; without even the implied warranty of >- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >- * Lesser General Public License for more details. >- * >- * You should have received a copy of the GNU Lesser General Public >- * License along with this library; if not, write to the Free >- * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, >- * Boston, MA 02110-1301 USA >- */ >- >-#include "config.h" >-#include <wtf/PassOwnPtr.h> >-#include "GraphicsContext3DInternal.h" >- >-#if ENABLE(WEBGL) >- >-#include "GraphicsContext3D.h" >-#include "OpenGLShims.h" >-#include <GL/glx.h> >-#include <dlfcn.h> >- >-// We do not want to call glXMakeContextCurrent using different Display pointers, >-// because it might lead to crashes in some drivers (fglrx). We use a shared display >-// pointer here. >-static Display* gSharedDisplay = 0; >-static Display* sharedDisplay() >-{ >- if (!gSharedDisplay) >- gSharedDisplay = XOpenDisplay(0); >- return gSharedDisplay; >-} >- >-namespace WebCore { >- >-// Because of driver bugs, exiting the program when there are active pbuffers >-// can crash the X server (this has been observed with the official Nvidia drivers). >-// We need to ensure that we clean everything up on exit. There are several reasons >-// that GraphicsContext3Ds will still be alive at exit, including user error (memory >-// leaks) and the page cache. In any case, we don't want the X server to crash. >-static bool cleaningUpAtExit = false; >-static Vector<GraphicsContext3D*>& activeGraphicsContexts() >-{ >- DEFINE_STATIC_LOCAL(Vector<GraphicsContext3D*>, contexts, ()); >- return contexts; >-} >- >-void GraphicsContext3DInternal::addActiveGraphicsContext(GraphicsContext3D* context) >-{ >- static bool addedAtExitHandler = false; >- if (!addedAtExitHandler) { >- atexit(&GraphicsContext3DInternal::cleanupActiveContextsAtExit); >- addedAtExitHandler = true; >- } >- activeGraphicsContexts().append(context); >-} >- >-void GraphicsContext3DInternal::removeActiveGraphicsContext(GraphicsContext3D* context) >-{ >- if (cleaningUpAtExit) >- return; >- >- Vector<GraphicsContext3D*>& contexts = activeGraphicsContexts(); >- size_t location = contexts.find(context); >- if (location != WTF::notFound) >- contexts.remove(location); >-} >- >-void GraphicsContext3DInternal::cleanupActiveContextsAtExit() >-{ >- cleaningUpAtExit = true; >- >- Vector<GraphicsContext3D*>& contexts = activeGraphicsContexts(); >- for (size_t i = 0; i < contexts.size(); i++) >- contexts[i]->~GraphicsContext3D(); >- >- if (!gSharedDisplay) >- return; >- XCloseDisplay(gSharedDisplay); >- gSharedDisplay = 0; >-} >- >-PassOwnPtr<GraphicsContext3DInternal> GraphicsContext3DInternal::create() >-{ >- if (!sharedDisplay()) >- return nullptr; >- >- static bool initialized = false; >- static bool success = true; >- if (!initialized) { >- success = initializeOpenGLShims(); >- initialized = true; >- } >- if (!success) >- return nullptr; >- >- GraphicsContext3DInternal* 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); >-} >- >-GraphicsContext3DInternal* GraphicsContext3DInternal::createPbufferContext() >-{ >- int fbConfigAttributes[] = { >- GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT, >- GLX_RENDER_TYPE, GLX_RGBA_BIT, >- GLX_RED_SIZE, 1, >- GLX_GREEN_SIZE, 1, >- GLX_BLUE_SIZE, 1, >- GLX_ALPHA_SIZE, 1, >- GLX_DEPTH_SIZE, 1, >- GLX_STENCIL_SIZE, 1, >- GLX_SAMPLE_BUFFERS, 1, >- GLX_DOUBLEBUFFER, GL_FALSE, >- GLX_SAMPLES, 4, >- 0 >- }; >- int returnedElements; >- GLXFBConfig* configs = glXChooseFBConfig(sharedDisplay(), 0, fbConfigAttributes, &returnedElements); >- if (!configs) { >- fbConfigAttributes[20] = 0; // Attempt without anti-aliasing. >- configs = glXChooseFBConfig(sharedDisplay(), 0, fbConfigAttributes, &returnedElements); >- } >- if (!returnedElements) { >- XFree(configs); >- return 0; >- } >- >- // We will be rendering to a texture, so our pbuffer does not need to be large. >- static const int pbufferAttributes[] = { GLX_PBUFFER_WIDTH, 1, GLX_PBUFFER_HEIGHT, 1, 0 }; >- GLXPbuffer pbuffer = glXCreatePbuffer(sharedDisplay(), configs[0], pbufferAttributes); >- if (!pbuffer) { >- XFree(configs); >- return 0; >- } >- >- GLXContext context = glXCreateNewContext(sharedDisplay(), configs[0], GLX_RGBA_TYPE, 0, GL_TRUE); >- XFree(configs); >- if (!context) >- return 0; >- return new GraphicsContext3DInternal(context, pbuffer); >-} >- >-GraphicsContext3DInternal* GraphicsContext3DInternal::createPixmapContext() >-{ >- static int visualAttributes[] = { >- GLX_RGBA, >- GLX_RED_SIZE, 1, >- GLX_GREEN_SIZE, 1, >- GLX_BLUE_SIZE, 1, >- GLX_ALPHA_SIZE, 1, >- GLX_DOUBLEBUFFER, >- 0 >- }; >- >- XVisualInfo* visualInfo = glXChooseVisual(sharedDisplay(), DefaultScreen(sharedDisplay()), visualAttributes); >- if (!visualInfo) >- return 0; >- >- GLXContext context = glXCreateContext(sharedDisplay(), visualInfo, 0, GL_TRUE); >- if (!context) { >- XFree(visualInfo); >- return 0; >- } >- >- Pixmap pixmap = XCreatePixmap(sharedDisplay(), DefaultRootWindow(sharedDisplay()), 1, 1, visualInfo->depth); >- if (!pixmap) { >- XFree(visualInfo); >- return 0; >- } >- >- GLXPixmap glxPixmap = glXCreateGLXPixmap(sharedDisplay(), visualInfo, pixmap); >- if (!glxPixmap) { >- XFreePixmap(sharedDisplay(), pixmap); >- XFree(visualInfo); >- return 0; >- } >- >- return new GraphicsContext3DInternal(context, pixmap, glxPixmap); >-} >- >-GraphicsContext3DInternal::GraphicsContext3DInternal(GLXContext context, GLXPbuffer pbuffer) >- : m_context(context) >- , m_pbuffer(pbuffer) >- , m_pixmap(0) >- , m_glxPixmap(0) >-{ >-} >- >-GraphicsContext3DInternal::GraphicsContext3DInternal(GLXContext context, Pixmap pixmap, GLXPixmap glxPixmap) >- : m_context(context) >- , m_pbuffer(0) >- , m_pixmap(pixmap) >- , m_glxPixmap(glxPixmap) >-{ >-} >- >-GraphicsContext3DInternal::~GraphicsContext3DInternal() >-{ >- if (m_context) { >- // This may be necessary to prevent crashes with NVidia's closed source drivers. Originally >- // from Mozilla's 3D canvas implementation at: http://bitbucket.org/ilmari/canvas3d/ >- ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); >- >- ::glXMakeContextCurrent(sharedDisplay(), 0, 0, 0); >- ::glXDestroyContext(sharedDisplay(), m_context); >- m_context = 0; >- } >- >- if (m_pbuffer) { >- ::glXDestroyPbuffer(sharedDisplay(), m_pbuffer); >- m_pbuffer = 0; >- } >- if (m_glxPixmap) { >- glXDestroyGLXPixmap(sharedDisplay(), m_glxPixmap); >- m_glxPixmap = 0; >- } >- if (m_pixmap) { >- XFreePixmap(sharedDisplay(), m_pixmap); >- m_pixmap = 0; >- } >-} >- >-void GraphicsContext3DInternal::makeContextCurrent() >-{ >- if (::glXGetCurrentContext() == m_context) >- return; >- if (!m_context) >- return; >- if (m_pbuffer) { >- ::glXMakeCurrent(sharedDisplay(), m_pbuffer, m_context); >- return; >- } >- >- ASSERT(m_glxPixmap); >- ::glXMakeCurrent(sharedDisplay(), m_glxPixmap, m_context); >-} >- >-} // namespace WebCore >- >-#endif // ENABLE_WEBGL >diff --git a/Source/WebCore/platform/graphics/gtk/GraphicsContext3DPrivate.cpp b/Source/WebCore/platform/graphics/gtk/GraphicsContext3DPrivate.cpp >new file mode 100644 >index 0000000..06e6e57 >--- /dev/null >+++ b/Source/WebCore/platform/graphics/gtk/GraphicsContext3DPrivate.cpp >@@ -0,0 +1,255 @@ >+/* >+ * Copyright (C) 2011 Igalia S.L. >+ * >+ * This library is free software; you can redistribute it and/or >+ * modify it under the terms of the GNU Lesser General Public >+ * License as published by the Free Software Foundation; either >+ * version 2 of the License, or (at your option) any later version. >+ * >+ * This library is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ * Lesser General Public License for more details. >+ * >+ * You should have received a copy of the GNU Lesser General Public >+ * License along with this library; if not, write to the Free >+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, >+ * Boston, MA 02110-1301 USA >+ */ >+ >+#include "config.h" >+#include "GraphicsContext3DPrivate.h" >+ >+#if ENABLE(WEBGL) >+ >+#include "GraphicsContext3D.h" >+#include "OpenGLShims.h" >+#include <GL/glx.h> >+#include <dlfcn.h> >+#include <wtf/PassOwnPtr.h> >+ >+// We do not want to call glXMakeContextCurrent using different Display pointers, >+// because it might lead to crashes in some drivers (fglrx). We use a shared display >+// pointer here. >+static Display* gSharedDisplay = 0; >+static Display* sharedDisplay() >+{ >+ if (!gSharedDisplay) >+ gSharedDisplay = XOpenDisplay(0); >+ return gSharedDisplay; >+} >+ >+namespace WebCore { >+ >+// Because of driver bugs, exiting the program when there are active pbuffers >+// can crash the X server (this has been observed with the official Nvidia drivers). >+// We need to ensure that we clean everything up on exit. There are several reasons >+// that GraphicsContext3Ds will still be alive at exit, including user error (memory >+// leaks) and the page cache. In any case, we don't want the X server to crash. >+static bool cleaningUpAtExit = false; >+static Vector<GraphicsContext3D*>& activeGraphicsContexts() >+{ >+ DEFINE_STATIC_LOCAL(Vector<GraphicsContext3D*>, contexts, ()); >+ return contexts; >+} >+ >+void GraphicsContext3DPrivate::addActiveGraphicsContext(GraphicsContext3D* context) >+{ >+ static bool addedAtExitHandler = false; >+ if (!addedAtExitHandler) { >+ atexit(&GraphicsContext3DPrivate::cleanupActiveContextsAtExit); >+ addedAtExitHandler = true; >+ } >+ activeGraphicsContexts().append(context); >+} >+ >+void GraphicsContext3DPrivate::removeActiveGraphicsContext(GraphicsContext3D* context) >+{ >+ if (cleaningUpAtExit) >+ return; >+ >+ Vector<GraphicsContext3D*>& contexts = activeGraphicsContexts(); >+ size_t location = contexts.find(context); >+ if (location != WTF::notFound) >+ contexts.remove(location); >+} >+ >+void GraphicsContext3DPrivate::cleanupActiveContextsAtExit() >+{ >+ cleaningUpAtExit = true; >+ >+ Vector<GraphicsContext3D*>& contexts = activeGraphicsContexts(); >+ for (size_t i = 0; i < contexts.size(); i++) >+ contexts[i]->~GraphicsContext3D(); >+ >+ if (!gSharedDisplay) >+ return; >+ XCloseDisplay(gSharedDisplay); >+ gSharedDisplay = 0; >+} >+ >+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); >+} >+ >+GraphicsContext3DPrivate* GraphicsContext3DPrivate::createPbufferContext() >+{ >+ int fbConfigAttributes[] = { >+ GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT, >+ GLX_RENDER_TYPE, GLX_RGBA_BIT, >+ GLX_RED_SIZE, 1, >+ GLX_GREEN_SIZE, 1, >+ GLX_BLUE_SIZE, 1, >+ GLX_ALPHA_SIZE, 1, >+ GLX_DEPTH_SIZE, 1, >+ GLX_STENCIL_SIZE, 1, >+ GLX_SAMPLE_BUFFERS, 1, >+ GLX_DOUBLEBUFFER, GL_FALSE, >+ GLX_SAMPLES, 4, >+ 0 >+ }; >+ int returnedElements; >+ GLXFBConfig* configs = glXChooseFBConfig(sharedDisplay(), 0, fbConfigAttributes, &returnedElements); >+ if (!configs) { >+ fbConfigAttributes[20] = 0; // Attempt without anti-aliasing. >+ configs = glXChooseFBConfig(sharedDisplay(), 0, fbConfigAttributes, &returnedElements); >+ } >+ if (!returnedElements) { >+ XFree(configs); >+ return 0; >+ } >+ >+ // We will be rendering to a texture, so our pbuffer does not need to be large. >+ static const int pbufferAttributes[] = { GLX_PBUFFER_WIDTH, 1, GLX_PBUFFER_HEIGHT, 1, 0 }; >+ GLXPbuffer pbuffer = glXCreatePbuffer(sharedDisplay(), configs[0], pbufferAttributes); >+ if (!pbuffer) { >+ XFree(configs); >+ return 0; >+ } >+ >+ GLXContext context = glXCreateNewContext(sharedDisplay(), configs[0], GLX_RGBA_TYPE, 0, GL_TRUE); >+ XFree(configs); >+ if (!context) >+ return 0; >+ return new GraphicsContext3DPrivate(context, pbuffer); >+} >+ >+GraphicsContext3DPrivate* GraphicsContext3DPrivate::createPixmapContext() >+{ >+ static int visualAttributes[] = { >+ GLX_RGBA, >+ GLX_RED_SIZE, 1, >+ GLX_GREEN_SIZE, 1, >+ GLX_BLUE_SIZE, 1, >+ GLX_ALPHA_SIZE, 1, >+ GLX_DOUBLEBUFFER, >+ 0 >+ }; >+ >+ XVisualInfo* visualInfo = glXChooseVisual(sharedDisplay(), DefaultScreen(sharedDisplay()), visualAttributes); >+ if (!visualInfo) >+ return 0; >+ >+ GLXContext context = glXCreateContext(sharedDisplay(), visualInfo, 0, GL_TRUE); >+ if (!context) { >+ XFree(visualInfo); >+ return 0; >+ } >+ >+ Pixmap pixmap = XCreatePixmap(sharedDisplay(), DefaultRootWindow(sharedDisplay()), 1, 1, visualInfo->depth); >+ if (!pixmap) { >+ XFree(visualInfo); >+ return 0; >+ } >+ >+ GLXPixmap glxPixmap = glXCreateGLXPixmap(sharedDisplay(), visualInfo, pixmap); >+ if (!glxPixmap) { >+ XFreePixmap(sharedDisplay(), pixmap); >+ XFree(visualInfo); >+ return 0; >+ } >+ >+ return new GraphicsContext3DPrivate(context, pixmap, glxPixmap); >+} >+ >+GraphicsContext3DPrivate::GraphicsContext3DPrivate(GLXContext context, GLXPbuffer pbuffer) >+ : m_context(context) >+ , m_pbuffer(pbuffer) >+ , m_pixmap(0) >+ , m_glxPixmap(0) >+{ >+} >+ >+GraphicsContext3DPrivate::GraphicsContext3DPrivate(GLXContext context, Pixmap pixmap, GLXPixmap glxPixmap) >+ : m_context(context) >+ , m_pbuffer(0) >+ , m_pixmap(pixmap) >+ , m_glxPixmap(glxPixmap) >+{ >+} >+ >+GraphicsContext3DPrivate::~GraphicsContext3DPrivate() >+{ >+ if (m_context) { >+ // This may be necessary to prevent crashes with NVidia's closed source drivers. Originally >+ // from Mozilla's 3D canvas implementation at: http://bitbucket.org/ilmari/canvas3d/ >+ ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); >+ >+ ::glXMakeContextCurrent(sharedDisplay(), 0, 0, 0); >+ ::glXDestroyContext(sharedDisplay(), m_context); >+ m_context = 0; >+ } >+ >+ if (m_pbuffer) { >+ ::glXDestroyPbuffer(sharedDisplay(), m_pbuffer); >+ m_pbuffer = 0; >+ } >+ if (m_glxPixmap) { >+ glXDestroyGLXPixmap(sharedDisplay(), m_glxPixmap); >+ m_glxPixmap = 0; >+ } >+ if (m_pixmap) { >+ XFreePixmap(sharedDisplay(), m_pixmap); >+ m_pixmap = 0; >+ } >+} >+ >+void GraphicsContext3DPrivate::makeContextCurrent() >+{ >+ if (::glXGetCurrentContext() == m_context) >+ return; >+ if (!m_context) >+ return; >+ if (m_pbuffer) { >+ ::glXMakeCurrent(sharedDisplay(), m_pbuffer, m_context); >+ return; >+ } >+ >+ ASSERT(m_glxPixmap); >+ ::glXMakeCurrent(sharedDisplay(), m_glxPixmap, m_context); >+} >+ >+} // namespace WebCore >+ >+#endif // ENABLE_WEBGL
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 67172
:
105563
|
105638
|
105768
| 105773