| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| index ace0b153fffaacc9b1d6f81ffbe5a990095eb732..c0243eaa59d179cb0167380d1b9d5e7dffd86f8e 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| @@ -595,6 +595,7 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
|
| const std::vector<int32_t>& attribs) override;
|
| void Destroy(bool have_context) override;
|
| void SetSurface(const scoped_refptr<gfx::GLSurface>& surface) override;
|
| + void ReleaseSurface() override;
|
| void ProduceFrontBuffer(const Mailbox& mailbox) override;
|
| bool ResizeOffscreenFrameBuffer(const gfx::Size& size) override;
|
| void UpdateParentTextureInfo();
|
| @@ -3771,6 +3772,7 @@ void GLES2DecoderImpl::DeleteTransformFeedbacksHelper(
|
| }
|
|
|
| bool GLES2DecoderImpl::MakeCurrent() {
|
| + DCHECK(surface_);
|
| if (!context_.get())
|
| return false;
|
|
|
| @@ -4339,11 +4341,22 @@ void GLES2DecoderImpl::Destroy(bool have_context) {
|
| void GLES2DecoderImpl::SetSurface(
|
| const scoped_refptr<gfx::GLSurface>& surface) {
|
| DCHECK(context_->IsCurrent(NULL));
|
| - DCHECK(surface_.get());
|
| + DCHECK(surface);
|
| surface_ = surface;
|
| RestoreCurrentFramebufferBindings();
|
| }
|
|
|
| +void GLES2DecoderImpl::ReleaseSurface() {
|
| + if (!context_.get())
|
| + return;
|
| + if (WasContextLost()) {
|
| + DLOG(ERROR) << " GLES2DecoderImpl: Trying to release lost context.";
|
| + return;
|
| + }
|
| + context_->ReleaseCurrent(surface_.get());
|
| + surface_ = nullptr;
|
| +}
|
| +
|
| void GLES2DecoderImpl::ProduceFrontBuffer(const Mailbox& mailbox) {
|
| if (!offscreen_saved_color_texture_.get()) {
|
| LOG(ERROR) << "Called ProduceFrontBuffer on a non-offscreen context";
|
|
|