Ensure there's a GL context before creating a Layer
Bug: 13745587 Change-Id: Ib0ec059d9a5974a48734daeec9d83580cada94a3
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user