Bug 942501 - Part 2: move TextureImageCGL to separate files - r=BenWa
authorBenoit Jacob <bjacob@mozilla.com>
Tue, 03 Dec 2013 13:44:38 -0500
changeset 158558 55109f1334e77064af6bff3d10ea618b27cc4b01
parent 158557 93d12e87d7d652e75ff43d95e4b9ac79b9c8eadc
child 158559 17964f955e0cfbe306b4afdc427643686fef8936
push id37028
push userbjacob@mozilla.com
push dateTue, 03 Dec 2013 18:45:56 +0000
treeherdermozilla-inbound@c789f25ca86e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersBenWa
bugs942501
milestone28.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 942501 - Part 2: move TextureImageCGL to separate files - r=BenWa
gfx/gl/GLContext.h
gfx/gl/GLContextProviderCGL.mm
gfx/gl/TextureImageCGL.h
gfx/gl/TextureImageCGL.mm
gfx/gl/moz.build
--- a/gfx/gl/GLContext.h
+++ b/gfx/gl/GLContext.h
@@ -3048,27 +3048,27 @@ protected:
 public:
     TextureGarbageBin* TexGarbageBin() {
         MOZ_ASSERT(mTexGarbageBin);
         return mTexGarbageBin;
     }
 
     void EmptyTexGarbageBin();
 
+    bool IsOffscreenSizeAllowed(const gfxIntSize& aSize) const;
+
 protected:
     nsDataHashtable<nsPtrHashKey<void>, void*> mUserData;
 
     GLuint mReadTextureImagePrograms[4];
 
     bool InitWithPrefix(const char *prefix, bool trygl);
 
     void InitExtensions();
 
-    bool IsOffscreenSizeAllowed(const gfxIntSize& aSize) const;
-
     nsTArray<nsIntRect> mViewportStack;
     nsTArray<nsIntRect> mScissorStack;
 
     GLint mMaxTextureSize;
     GLint mMaxCubeMapTextureSize;
     GLint mMaxTextureImageSize;
     GLint mMaxRenderbufferSize;
     GLsizei mMaxSamples;
--- a/gfx/gl/GLContextProviderCGL.mm
+++ b/gfx/gl/GLContextProviderCGL.mm
@@ -1,15 +1,16 @@
 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "GLContextProvider.h"
 #include "GLContext.h"
+#include "TextureImageCGL.h"
 #include "nsDebug.h"
 #include "nsIWidget.h"
 #include "OpenGL/OpenGL.h"
 #include <OpenGL/gl.h>
 #include <AppKit/NSOpenGL.h>
 #include "gfxASurface.h"
 #include "gfxImageSurface.h"
 #include "gfxQuartzSurface.h"
@@ -215,124 +216,16 @@ public:
 };
 
 bool
 GLContextCGL::ResizeOffscreen(const gfxIntSize& aNewSize)
 {
     return ResizeScreenBuffer(aNewSize);
 }
 
-class TextureImageCGL : public BasicTextureImage
-{
-    friend already_AddRefed<TextureImage>
-    GLContextCGL::CreateTextureImageInternal(const nsIntSize& aSize,
-                                             TextureImage::ContentType aContentType,
-                                             GLenum aWrapMode,
-                                             TextureImage::Flags aFlags,
-                                             TextureImage::ImageFormat aImageFormat);
-public:
-    ~TextureImageCGL()
-    {
-        if (mPixelBuffer) {
-            mGLContext->MakeCurrent();
-            mGLContext->fDeleteBuffers(1, &mPixelBuffer);
-        }
-    }
-
-protected:
-    already_AddRefed<gfxASurface>
-    GetSurfaceForUpdate(const gfxIntSize& aSize, ImageFormat aFmt)
-    {
-        gfxIntSize size(aSize.width + 1, aSize.height + 1);
-        mGLContext->MakeCurrent();
-        if (!mGLContext->
-            IsExtensionSupported(GLContext::ARB_pixel_buffer_object)) 
-        {
-            return gfxPlatform::GetPlatform()->
-                CreateOffscreenSurface(size,
-                                       gfxASurface::ContentFromFormat(aFmt));
-        }
-
-        if (!mPixelBuffer) {
-            mGLContext->fGenBuffers(1, &mPixelBuffer);
-        }
-        mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, mPixelBuffer);
-        int32_t length = size.width * 4 * size.height;
-
-        if (length > mPixelBufferSize) {
-            mGLContext->fBufferData(LOCAL_GL_PIXEL_UNPACK_BUFFER, length,
-                                    NULL, LOCAL_GL_STREAM_DRAW);
-            mPixelBufferSize = length;
-        }
-        unsigned char* data = 
-            (unsigned char*)mGLContext->
-                fMapBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, 
-                           LOCAL_GL_WRITE_ONLY);
-
-        mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, 0);
-
-        if (!data) {
-            nsAutoCString failure;
-            failure += "Pixel buffer binding failed: ";
-            failure.AppendPrintf("%dx%d\n", size.width, size.height);
-            gfx::LogFailure(failure);
-
-            mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, 0);
-            return gfxPlatform::GetPlatform()->
-                CreateOffscreenSurface(size,
-                                       gfxASurface::ContentFromFormat(aFmt));
-        }
-
-        nsRefPtr<gfxQuartzSurface> surf = 
-            new gfxQuartzSurface(data, size, size.width * 4, aFmt);
-
-        mBoundPixelBuffer = true;
-        return surf.forget();
-    }
-  
-    bool FinishedSurfaceUpdate()
-    {
-        if (mBoundPixelBuffer) {
-            mGLContext->MakeCurrent();
-            mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, mPixelBuffer);
-            mGLContext->fUnmapBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER);
-            return true;
-        }
-        return false;
-    }
-
-    void FinishedSurfaceUpload()
-    {
-        if (mBoundPixelBuffer) {
-            mGLContext->MakeCurrent();
-            mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, 0);
-            mBoundPixelBuffer = false;
-        }
-    }
-
-private:
-    TextureImageCGL(GLuint aTexture,
-                    const nsIntSize& aSize,
-                    GLenum aWrapMode,
-                    ContentType aContentType,
-                    GLContext* aContext,
-                    TextureImage::Flags aFlags = TextureImage::NoFlags,
-                    TextureImage::ImageFormat aImageFormat = gfxImageFormatUnknown)
-        : BasicTextureImage(aTexture, aSize, aWrapMode, aContentType,
-                            aContext, aFlags, aImageFormat)
-        , mPixelBuffer(0)
-        , mPixelBufferSize(0)
-        , mBoundPixelBuffer(false)
-    {}
-    
-    GLuint mPixelBuffer;
-    int32_t mPixelBufferSize;
-    bool mBoundPixelBuffer;
-};
-
 already_AddRefed<TextureImage>
 GLContextCGL::CreateTextureImageInternal(const nsIntSize& aSize,
                                          TextureImage::ContentType aContentType,
                                          GLenum aWrapMode,
                                          TextureImage::Flags aFlags,
                                          TextureImage::ImageFormat aImageFormat)
 {
     bool useNearestFilter = aFlags & TextureImage::UseNearestFilter;
new file mode 100644
--- /dev/null
+++ b/gfx/gl/TextureImageCGL.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef TextureImageCGL_h_
+#define TextureImageCGL_h_
+
+#include "GLTextureImage.h"
+#include "GLContextTypes.h"
+#include "nsAutoPtr.h"
+#include "nsSize.h"
+
+class gfxASurface;
+
+namespace mozilla {
+namespace gl {
+
+class TextureImageCGL : public BasicTextureImage
+{
+public:
+
+    TextureImageCGL(GLuint aTexture,
+                    const nsIntSize& aSize,
+                    GLenum aWrapMode,
+                    ContentType aContentType,
+                    GLContext* aContext,
+                    TextureImage::Flags aFlags = TextureImage::NoFlags,
+                    TextureImage::ImageFormat aImageFormat = gfxImageFormatUnknown);
+
+    ~TextureImageCGL();
+
+protected:
+    already_AddRefed<gfxASurface>
+    GetSurfaceForUpdate(const gfxIntSize& aSize, ImageFormat aFmt);
+
+    bool FinishedSurfaceUpdate();
+
+    void FinishedSurfaceUpload();
+
+private:
+
+    GLuint mPixelBuffer;
+    int32_t mPixelBufferSize;
+    bool mBoundPixelBuffer;
+};
+
+}
+}
+
+#endif
new file mode 100644
--- /dev/null
+++ b/gfx/gl/TextureImageCGL.mm
@@ -0,0 +1,110 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "TextureImageCGL.h"
+#include "GLContext.h"
+#include "gfxQuartzSurface.h"
+#include "gfxPlatform.h"
+#include "gfxFailure.h"
+
+namespace mozilla {
+namespace gl {
+
+TextureImageCGL::TextureImageCGL(GLuint aTexture,
+                const nsIntSize& aSize,
+                GLenum aWrapMode,
+                ContentType aContentType,
+                GLContext* aContext,
+                TextureImage::Flags aFlags,
+                TextureImage::ImageFormat aImageFormat)
+    : BasicTextureImage(aTexture, aSize, aWrapMode, aContentType,
+                        aContext, aFlags, aImageFormat)
+    , mPixelBuffer(0)
+    , mPixelBufferSize(0)
+    , mBoundPixelBuffer(false)
+{}
+
+TextureImageCGL::~TextureImageCGL()
+{
+    if (mPixelBuffer) {
+        mGLContext->MakeCurrent();
+        mGLContext->fDeleteBuffers(1, &mPixelBuffer);
+    }
+}
+
+already_AddRefed<gfxASurface>
+TextureImageCGL::GetSurfaceForUpdate(const gfxIntSize& aSize, ImageFormat aFmt)
+{
+    gfxIntSize size(aSize.width + 1, aSize.height + 1);
+    mGLContext->MakeCurrent();
+    if (!mGLContext->
+        IsExtensionSupported(GLContext::ARB_pixel_buffer_object))
+    {
+        return gfxPlatform::GetPlatform()->
+            CreateOffscreenSurface(size,
+                                    gfxASurface::ContentFromFormat(aFmt));
+    }
+
+    if (!mPixelBuffer) {
+        mGLContext->fGenBuffers(1, &mPixelBuffer);
+    }
+    mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, mPixelBuffer);
+    int32_t length = size.width * 4 * size.height;
+
+    if (length > mPixelBufferSize) {
+        mGLContext->fBufferData(LOCAL_GL_PIXEL_UNPACK_BUFFER, length,
+                                NULL, LOCAL_GL_STREAM_DRAW);
+        mPixelBufferSize = length;
+    }
+    unsigned char* data =
+        (unsigned char*)mGLContext->
+            fMapBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER,
+                        LOCAL_GL_WRITE_ONLY);
+
+    mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, 0);
+
+    if (!data) {
+        nsAutoCString failure;
+        failure += "Pixel buffer binding failed: ";
+        failure.AppendPrintf("%dx%d\n", size.width, size.height);
+        gfx::LogFailure(failure);
+
+        mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, 0);
+        return gfxPlatform::GetPlatform()->
+            CreateOffscreenSurface(size,
+                                    gfxASurface::ContentFromFormat(aFmt));
+    }
+
+    nsRefPtr<gfxQuartzSurface> surf =
+        new gfxQuartzSurface(data, size, size.width * 4, aFmt);
+
+    mBoundPixelBuffer = true;
+    return surf.forget();
+}
+
+bool
+TextureImageCGL::FinishedSurfaceUpdate()
+{
+    if (mBoundPixelBuffer) {
+        mGLContext->MakeCurrent();
+        mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, mPixelBuffer);
+        mGLContext->fUnmapBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER);
+        return true;
+    }
+    return false;
+}
+
+void
+TextureImageCGL::FinishedSurfaceUpload()
+{
+    if (mBoundPixelBuffer) {
+        mGLContext->MakeCurrent();
+        mGLContext->fBindBuffer(LOCAL_GL_PIXEL_UNPACK_BUFFER, 0);
+        mBoundPixelBuffer = false;
+    }
+}
+
+}
+}
--- a/gfx/gl/moz.build
+++ b/gfx/gl/moz.build
@@ -75,20 +75,20 @@ if CONFIG['MOZ_ENABLE_SKIA_GPU']:
     ]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
     UNIFIED_SOURCES += ['SharedSurfaceGralloc.cpp']
     EXPORTS += ['SharedSurfaceGralloc.h']
     LOCAL_INCLUDES += ['/widget/gonk']
 
 if gl_provider == 'CGL':
-    # This file includes Mac headers that are unfriendly to unified builds,
-    # and we have only one .mm file here anyway.
+    # These files include Mac headers that are unfriendly to unified builds
     SOURCES += [
-        "GLContextProvider%s.mm" % (gl_provider),
+        "GLContextProviderCGL.mm",
+        "TextureImageCGL.mm"
     ]
     EXPORTS += [
         'SharedSurfaceIO.h',
     ]
     # SharedSurfaceIO.cpp includes MacIOSurface.h which include Mac headers
     # which define Size and Point types in root namespace with often conflict with
     # our own types. While I haven't actually hit this issue in the present case,
     # it's been an issue in gfx/layers so let's not risk it.