Index: cc/gl_renderer.cc |
diff --git a/cc/gl_renderer.cc b/cc/gl_renderer.cc |
index e69d285070ef275234d916123d6d6562eb7e5205..ad48cef55753e076f9825fbd05b528c97a307d83 100644 |
--- a/cc/gl_renderer.cc |
+++ b/cc/gl_renderer.cc |
@@ -292,7 +292,7 @@ void GLRenderer::drawQuad(DrawingFrame& frame, const DrawQuad* quad) |
void GLRenderer::drawCheckerboardQuad(const DrawingFrame& frame, const CheckerboardDrawQuad* quad) |
{ |
const TileCheckerboardProgram* program = tileCheckerboardProgram(); |
- DCHECK(program && program->initialized()); |
+ DCHECK(program && (program->initialized() || isContextLost())); |
GLC(context(), context()->useProgram(program->program())); |
SkColor color = quad->color(); |
@@ -318,7 +318,7 @@ void GLRenderer::drawDebugBorderQuad(const DrawingFrame& frame, const DebugBorde |
{ |
static float glMatrix[16]; |
const SolidColorProgram* program = solidColorProgram(); |
- DCHECK(program && program->initialized()); |
+ DCHECK(program && (program->initialized() || isContextLost())); |
GLC(context(), context()->useProgram(program->program())); |
// Use the full quadRect for debug quads to not move the edges based on partial swaps. |
@@ -855,7 +855,7 @@ void GLRenderer::drawTileQuad(const DrawingFrame& frame, const TileDrawQuad* qua |
void GLRenderer::drawYUVVideoQuad(const DrawingFrame& frame, const YUVVideoDrawQuad* quad) |
{ |
const VideoYUVProgram* program = videoYUVProgram(); |
- DCHECK(program && program->initialized()); |
+ DCHECK(program && (program->initialized() || isContextLost())); |
const VideoLayerImpl::FramePlane& yPlane = quad->yPlane(); |
const VideoLayerImpl::FramePlane& uPlane = quad->uPlane(); |
@@ -928,9 +928,10 @@ void GLRenderer::drawStreamVideoQuad(const DrawingFrame& frame, const StreamVide |
} |
struct TextureProgramBinding { |
- template<class Program> void set(Program* program) |
+ template<class Program> void set( |
+ Program* program, WebKit::WebGraphicsContext3D* context) |
{ |
- DCHECK(program && program->initialized()); |
+ DCHECK(program && (program->initialized() || context->isContextLost())); |
programId = program->program(); |
samplerLocation = program->fragmentShader().samplerLocation(); |
matrixLocation = program->vertexShader().matrixLocation(); |
@@ -943,9 +944,10 @@ struct TextureProgramBinding { |
}; |
struct TexTransformTextureProgramBinding : TextureProgramBinding { |
- template<class Program> void set(Program* program) |
+ template<class Program> void set( |
+ Program* program, WebKit::WebGraphicsContext3D* context) |
{ |
- TextureProgramBinding::set(program); |
+ TextureProgramBinding::set(program, context); |
texTransformLocation = program->vertexShader().texTransformLocation(); |
} |
int texTransformLocation; |
@@ -955,9 +957,9 @@ void GLRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureDrawQua |
{ |
TexTransformTextureProgramBinding binding; |
if (quad->flipped()) |
- binding.set(textureProgramFlip()); |
+ binding.set(textureProgramFlip(), context()); |
else |
- binding.set(textureProgram()); |
+ binding.set(textureProgram(), context()); |
GLC(context(), context()->useProgram(binding.programId)); |
GLC(context(), context()->uniform1i(binding.samplerLocation, 0)); |
const gfx::RectF& uvRect = quad->uvRect(); |
@@ -988,7 +990,7 @@ void GLRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureDrawQua |
void GLRenderer::drawIOSurfaceQuad(const DrawingFrame& frame, const IOSurfaceDrawQuad* quad) |
{ |
TexTransformTextureProgramBinding binding; |
- binding.set(textureIOSurfaceProgram()); |
+ binding.set(textureIOSurfaceProgram(), context()); |
GLC(context(), context()->useProgram(binding.programId)); |
GLC(context(), context()->uniform1i(binding.samplerLocation, 0)); |