diff options
Diffstat (limited to 'WebKit/chromium/src/GLES2Context.cpp')
-rw-r--r-- | WebKit/chromium/src/GLES2Context.cpp | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/WebKit/chromium/src/GLES2Context.cpp b/WebKit/chromium/src/GLES2Context.cpp index b6d619c..f342436 100644 --- a/WebKit/chromium/src/GLES2Context.cpp +++ b/WebKit/chromium/src/GLES2Context.cpp @@ -31,6 +31,7 @@ #include "config.h" #include "GLES2Context.h" +#include "IntSize.h" #include "WebGLES2Context.h" #include "WebKit.h" #include "WebKitClient.h" @@ -56,7 +57,8 @@ public: GLES2ContextInternal() {} ~GLES2ContextInternal() {} - bool initialize(Page*); + bool initializeOnscreen(Page*); + bool initializeOffscreen(GLES2Context*); WebGLES2Context* getWebGLES2Context() { return m_impl; } @@ -64,7 +66,7 @@ private: WebGLES2Context* m_impl; }; -bool GLES2ContextInternal::initialize(Page* page) +bool GLES2ContextInternal::initializeOnscreen(Page* page) { ASSERT(page); WebViewImpl* webView = WebViewImpl::fromPage(page); @@ -75,10 +77,22 @@ bool GLES2ContextInternal::initialize(Page* page) return true; } -PassOwnPtr<GLES2Context> GLES2Context::create(Page* page) +bool GLES2ContextInternal::initializeOffscreen(GLES2Context* parent) +{ + m_impl = webKitClient()->createGLES2Context(); + if (!m_impl) + return false; + if (!m_impl->initialize(0, parent ? parent->m_internal->m_impl : 0)) { + delete m_impl; + return false; + } + return true; +} + +PassOwnPtr<GLES2Context> GLES2Context::createOnscreen(Page* page) { GLES2ContextInternal* internal = new GLES2ContextInternal(); - if (!internal->initialize(page)) { + if (!internal->initializeOnscreen(page)) { delete internal; return 0; } @@ -87,6 +101,19 @@ PassOwnPtr<GLES2Context> GLES2Context::create(Page* page) return result; } +PassOwnPtr<GLES2Context> GLES2Context::createOffscreen(GLES2Context* parent) +{ + GLES2ContextInternal* internal = new GLES2ContextInternal(); + if (!internal->initializeOffscreen(parent)) { + delete internal; + return 0; + } + PassOwnPtr<GLES2Context> result = new GLES2Context(); + result->m_internal.set(internal); + return result; +} + + GLES2Context::~GLES2Context() { } @@ -115,4 +142,18 @@ bool GLES2Context::swapBuffers() return webContext->swapBuffers(); } +void GLES2Context::resizeOffscreenContent(const IntSize& size) +{ + WebGLES2Context* webContext = m_internal->getWebGLES2Context(); + ASSERT(webContext); + webContext->resizeOffscreenContent(size); +} + +unsigned GLES2Context::getOffscreenContentParentTextureId() +{ + WebGLES2Context* webContext = m_internal->getWebGLES2Context(); + ASSERT(webContext); + return webContext->getOffscreenContentParentTextureId(); +} + } // namespace WebCore |