summaryrefslogtreecommitdiff
path: root/libs/hwui
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2014-04-08 15:18:56 -0700
committer John Reck <jreck@google.com> 2014-04-08 15:18:56 -0700
commit1949e7928eeec22cd3f74b5f763a4eb433238453 (patch)
tree9989642b268277a76657fcdbab75cd478d770d2f /libs/hwui
parent1f3f55b434ce324c5fdbe74db1982fea4812a2e9 (diff)
Ensure there's a GL context before creating a Layer
Bug: 13745587 Change-Id: Ib0ec059d9a5974a48734daeec9d83580cada94a3
Diffstat (limited to 'libs/hwui')
-rw-r--r--libs/hwui/renderthread/CanvasContext.cpp10
-rw-r--r--libs/hwui/renderthread/CanvasContext.h4
-rw-r--r--libs/hwui/renderthread/RenderProxy.cpp11
3 files changed, 20 insertions, 5 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index fa8262705426..c231f6fbf00b 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -490,6 +490,16 @@ void CanvasContext::runWithGlContext(RenderTask* task) {
task->run();
}
+Layer* CanvasContext::createRenderLayer(int width, int height) {
+ requireGlContext();
+ return LayerRenderer::createRenderLayer(width, height);
+}
+
+Layer* CanvasContext::createTextureLayer() {
+ requireGlContext();
+ return LayerRenderer::createTextureLayer();
+}
+
void CanvasContext::requireGlContext() {
if (mEglSurface != EGL_NO_SURFACE) {
mGlobalContext->makeCurrent(mEglSurface);
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index eb9096d5d92c..6f1c37f3242a 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -35,6 +35,7 @@ class RenderNode;
class DisplayListData;
class OpenGLRenderer;
class Rect;
+class Layer;
namespace renderthread {
@@ -76,6 +77,9 @@ public:
void runWithGlContext(RenderTask* task);
+ Layer* createRenderLayer(int width, int height);
+ Layer* createTextureLayer();
+
private:
void setSurface(EGLNativeWindowType window);
void swapBuffers();
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index 489dc9026af6..e817e616f016 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -202,10 +202,9 @@ void RenderProxy::runWithGlContext(RenderTask* gltask) {
postAndWait(task);
}
-CREATE_BRIDGE2(createDisplayListLayer, int width, int height) {
- Layer* layer = LayerRenderer::createRenderLayer(args->width, args->height);
+CREATE_BRIDGE3(createDisplayListLayer, CanvasContext* context, int width, int height) {
+ Layer* layer = args->context->createRenderLayer(args->width, args->height);
if (!layer) return 0;
-
return new DeferredLayerUpdater(layer);
}
@@ -213,20 +212,22 @@ DeferredLayerUpdater* RenderProxy::createDisplayListLayer(int width, int height)
SETUP_TASK(createDisplayListLayer);
args->width = width;
args->height = height;
+ args->context = mContext;
void* retval = postAndWait(task);
DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(retval);
mDrawFrameTask.addLayer(layer);
return layer;
}
-CREATE_BRIDGE0(createTextureLayer) {
- Layer* layer = LayerRenderer::createTextureLayer();
+CREATE_BRIDGE1(createTextureLayer, CanvasContext* context) {
+ Layer* layer = args->context->createTextureLayer();
if (!layer) return 0;
return new DeferredLayerUpdater(layer);
}
DeferredLayerUpdater* RenderProxy::createTextureLayer() {
SETUP_TASK(createTextureLayer);
+ args->context = mContext;
void* retval = postAndWait(task);
DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(retval);
mDrawFrameTask.addLayer(layer);