[BlackBerry] Upstream GLES2Context.{h, cpp}
authorleo.yang@torchmobile.com.cn <leo.yang@torchmobile.com.cn@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Feb 2012 02:16:01 +0000 (02:16 +0000)
committerleo.yang@torchmobile.com.cn <leo.yang@torchmobile.com.cn@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Feb 2012 02:16:01 +0000 (02:16 +0000)
https://bugs.webkit.org/show_bug.cgi?id=79196

Reviewed by Rob Buis.

Initial upstream, no new tests.

* WebKitSupport/GLES2Context.cpp: Added.
* WebKitSupport/GLES2Context.h: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@108711 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/blackberry/ChangeLog
Source/WebKit/blackberry/WebKitSupport/GLES2Context.cpp [new file with mode: 0644]
Source/WebKit/blackberry/WebKitSupport/GLES2Context.h [new file with mode: 0644]

index 759ec91..a91767a 100644 (file)
@@ -1,3 +1,15 @@
+2012-02-23  Leo Yang  <leo.yang@torchmobile.com.cn>
+
+        [BlackBerry] Upstream GLES2Context.{h, cpp}
+        https://bugs.webkit.org/show_bug.cgi?id=79196
+
+        Reviewed by Rob Buis.
+
+        Initial upstream, no new tests.
+
+        * WebKitSupport/GLES2Context.cpp: Added.
+        * WebKitSupport/GLES2Context.h: Added.
+
 2012-02-23  Mike Fenton  <mifenton@rim.com>
 
         [BlackBerry] InputHandler requires cleanup of Navigation Mode handling.
diff --git a/Source/WebKit/blackberry/WebKitSupport/GLES2Context.cpp b/Source/WebKit/blackberry/WebKitSupport/GLES2Context.cpp
new file mode 100644 (file)
index 0000000..55b9e15
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2010, 2011, 2012 Research In Motion Limited. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "GLES2Context.h"
+
+#include "Assertions.h"
+#include "BackingStoreCompositingSurface.h"
+#include "Chrome.h"
+#include "ChromeClient.h"
+#include "SurfacePool.h"
+#include "WebPageClient.h"
+#include "WebPage_p.h"
+
+#include <GLES2/gl2.h>
+
+namespace BlackBerry {
+namespace WebKit {
+
+BackingStoreCompositingSurface* GLES2Context::compositingSurface() const
+{
+    return SurfacePool::globalSurfacePool()->compositingSurface();
+}
+
+Platform::Graphics::Buffer* GLES2Context::buffer() const
+{
+    if (m_window)
+        return m_window->buffer();
+
+#if ENABLE_COMPOSITING_SURFACE
+    if (BackingStoreCompositingSurface* surface = compositingSurface())
+        return surface->backBuffer()->nativeBuffer();
+#endif
+
+    ASSERT_NOT_REACHED();
+    return 0;
+}
+
+PassOwnPtr<GLES2Context> GLES2Context::create(WebPagePrivate* page)
+{
+    return adoptPtr(new GLES2Context(page));
+}
+
+GLES2Context::GLES2Context(WebPagePrivate* page)
+    : m_window(0)
+{
+    if (page->m_client->window()->windowUsage() == Platform::Graphics::Window::GLES2Usage)
+        m_window = page->m_client->window();
+}
+
+GLES2Context::~GLES2Context()
+{
+}
+
+Platform::IntSize GLES2Context::surfaceSize() const
+{
+    if (m_window)
+        return m_window->surfaceSize();
+
+#if ENABLE_COMPOSITING_SURFACE
+    if (BackingStoreCompositingSurface* surface = compositingSurface())
+        return surface->backBuffer()->surfaceSize();
+#endif
+
+    ASSERT_NOT_REACHED();
+    return Platform::IntSize();
+}
+
+bool GLES2Context::makeCurrent()
+{
+    Platform::Graphics::makeBufferCurrent(buffer(), Platform::Graphics::GLES2);
+    return true;
+}
+
+bool GLES2Context::swapBuffers()
+{
+    ASSERT(glGetError() == GL_NO_ERROR);
+
+#if ENABLE_COMPOSITING_SURFACE
+    // Because we are rendering compositing contents into an off-screen pixmap and
+    // we need to blend the pixmap with the web page window surface we have to call
+    // glFinish() here.
+    glFinish();
+
+    if (BackingStoreCompositingSurface* surface = compositingSurface())
+        surface->swapBuffers();
+#endif
+
+    return true;
+}
+
+} // namespace WebKit
+} // namespace BlackBerry
diff --git a/Source/WebKit/blackberry/WebKitSupport/GLES2Context.h b/Source/WebKit/blackberry/WebKitSupport/GLES2Context.h
new file mode 100644 (file)
index 0000000..ce7e846
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2010, 2011, 2012 Research In Motion Limited. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef GLES2Context_h
+#define GLES2Context_h
+
+#include <BlackBerryPlatformGLES2Context.h>
+#include <BlackBerryPlatformWindow.h>
+#include <wtf/Noncopyable.h>
+#include <wtf/PassOwnPtr.h>
+
+namespace BlackBerry {
+namespace WebKit {
+
+class BackingStoreCompositingSurface;
+class WebPagePrivate;
+
+class GLES2Context : public Platform::Graphics::GLES2Context {
+    WTF_MAKE_NONCOPYABLE(GLES2Context);
+public:
+    static PassOwnPtr<GLES2Context> create(WebPagePrivate*);
+    ~GLES2Context();
+    Platform::IntSize surfaceSize() const;
+    bool makeCurrent();
+    bool swapBuffers();
+
+private:
+    GLES2Context(WebPagePrivate*);
+    BackingStoreCompositingSurface* compositingSurface() const;
+    Platform::Graphics::Buffer* buffer() const;
+
+    Platform::Graphics::Window* m_window;
+};
+
+} // namespace WebKit
+} // namespace BlackBerry
+
+#endif