diff options
| author | 2014-04-08 15:18:56 -0700 | |
|---|---|---|
| committer | 2014-04-08 15:18:56 -0700 | |
| commit | 1949e7928eeec22cd3f74b5f763a4eb433238453 (patch) | |
| tree | 9989642b268277a76657fcdbab75cd478d770d2f /libs/hwui | |
| parent | 1f3f55b434ce324c5fdbe74db1982fea4812a2e9 (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.cpp | 10 | ||||
| -rw-r--r-- | libs/hwui/renderthread/CanvasContext.h | 4 | ||||
| -rw-r--r-- | libs/hwui/renderthread/RenderProxy.cpp | 11 |
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); |