// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "mojo/skia/ganesh_surface.h"

namespace mojo {

GaneshSurface::GaneshSurface(GaneshContext* context,
                             scoped_ptr<GLTexture> texture)
    : texture_(texture.Pass()) {
  GrBackendTextureDesc desc;
  desc.fFlags = kRenderTarget_GrBackendTextureFlag;
  desc.fWidth = texture_->size().width;
  desc.fHeight = texture_->size().height;
  desc.fConfig = kSkia8888_GrPixelConfig;
  desc.fOrigin = kTopLeft_GrSurfaceOrigin;
  desc.fTextureHandle = texture_->texture_id();
  DCHECK(texture_->texture_id());

  auto gr_texture = skia::AdoptRef(context->gr()->wrapBackendTexture(desc));
  DCHECK(gr_texture);
  surface_ = skia::AdoptRef(
      SkSurface::NewRenderTargetDirect(gr_texture->asRenderTarget()));
  DCHECK(surface_);
}

GaneshSurface::~GaneshSurface() {
}

scoped_ptr<GLTexture> GaneshSurface::TakeTexture() {
  surface_.clear();
  return texture_.Pass();
}

}  // namespace mojo
