summaryrefslogtreecommitdiffstats
path: root/WebKit/chromium/src/GLES2Context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/chromium/src/GLES2Context.cpp')
-rw-r--r--WebKit/chromium/src/GLES2Context.cpp49
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