From d328c64581cbfa258ed40a4ae0e01befa2ebef51 Mon Sep 17 00:00:00 2001 From: "leo.yang@torchmobile.com.cn" Date: Fri, 24 Feb 2012 02:16:01 +0000 Subject: [PATCH] [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. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@108711 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit/blackberry/ChangeLog | 12 ++ .../blackberry/WebKitSupport/GLES2Context.cpp | 121 +++++++++++++++++++++ .../WebKit/blackberry/WebKitSupport/GLES2Context.h | 66 +++++++++++ 3 files changed, 199 insertions(+) create mode 100644 Source/WebKit/blackberry/WebKitSupport/GLES2Context.cpp create mode 100644 Source/WebKit/blackberry/WebKitSupport/GLES2Context.h diff --git a/Source/WebKit/blackberry/ChangeLog b/Source/WebKit/blackberry/ChangeLog index 759ec91..a91767a 100644 --- a/Source/WebKit/blackberry/ChangeLog +++ b/Source/WebKit/blackberry/ChangeLog @@ -1,3 +1,15 @@ +2012-02-23 Leo Yang + + [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 [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 index 0000000..55b9e15 --- /dev/null +++ b/Source/WebKit/blackberry/WebKitSupport/GLES2Context.cpp @@ -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 + +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::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 index 0000000..ce7e846 --- /dev/null +++ b/Source/WebKit/blackberry/WebKitSupport/GLES2Context.h @@ -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 +#include +#include +#include + +namespace BlackBerry { +namespace WebKit { + +class BackingStoreCompositingSurface; +class WebPagePrivate; + +class GLES2Context : public Platform::Graphics::GLES2Context { + WTF_MAKE_NONCOPYABLE(GLES2Context); +public: + static PassOwnPtr 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 -- 2.7.4