| // 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_texture_surface.h" |
| |
| #include <GLES2/gl2.h> |
| |
| #include "base/logging.h" |
| #include "mojo/gpu/gl_texture.h" |
| #include "third_party/skia/include/core/SkCanvas.h" |
| #include "third_party/skia/include/gpu/gl/GrGLTypes.h" |
| |
| namespace mojo { |
| namespace skia { |
| |
| GaneshTextureSurface::GaneshTextureSurface(const GaneshContext::Scope& scope, |
| std::unique_ptr<GLTexture> texture) |
| : texture_(std::move(texture)) { |
| DCHECK(texture_); |
| DCHECK(texture_->texture_id()); |
| DCHECK(texture_->size().width > 0); |
| DCHECK(texture_->size().height > 0); |
| GrGLTextureInfo info; |
| info.fTarget = GL_TEXTURE_2D; |
| info.fID = texture_->texture_id(); |
| |
| GrBackendTextureDesc desc; |
| desc.fFlags = kRenderTarget_GrBackendTextureFlag; |
| desc.fOrigin = kTopLeft_GrSurfaceOrigin; |
| desc.fWidth = texture_->size().width; |
| desc.fHeight = texture_->size().height; |
| desc.fConfig = kSkia8888_GrPixelConfig; |
| desc.fSampleCnt = 0; |
| desc.fTextureHandle = reinterpret_cast<GrBackendObject>(&info); |
| |
| surface_ = ::skia::AdoptRef(SkSurface::NewFromBackendTexture( |
| scope.gr_context().get(), desc, nullptr)); |
| DCHECK(surface_); |
| } |
| |
| GaneshTextureSurface::~GaneshTextureSurface() {} |
| |
| std::unique_ptr<GLTexture> GaneshTextureSurface::TakeTexture() { |
| surface_->getCanvas()->flush(); |
| surface_.clear(); |
| return std::move(texture_); |
| } |
| |
| } // namespace skia |
| } // namespace mojo |