Index: mojo/skia/ganesh_helpers.cc |
diff --git a/mojo/skia/ganesh_helpers.cc b/mojo/skia/ganesh_helpers.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6ad7360836ddb370b2b934dfc6b96ee27908ba91 |
--- /dev/null |
+++ b/mojo/skia/ganesh_helpers.cc |
@@ -0,0 +1,51 @@ |
+// 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_helpers.h" |
+ |
+#include <GLES2/gl2.h> |
+ |
+#include "base/logging.h" |
+#include "third_party/skia/include/core/SkImage.h" |
+#include "third_party/skia/include/gpu/gl/GrGLTypes.h" |
+ |
+namespace mojo { |
+namespace skia { |
+ |
+static void ReleaseThunk(void* data) { |
+ auto release_callback = static_cast<base::Closure*>(data); |
+ release_callback->Run(); |
+ delete release_callback; |
+} |
+ |
+::skia::RefPtr<SkImage> CreateImageFromTexture( |
+ const GaneshContext::Scope& scope, |
+ uint32_t texture_id, |
+ uint32_t width, |
+ uint32_t height, |
+ const base::Closure& release_callback) { |
+ DCHECK(texture_id); |
+ DCHECK(width); |
+ DCHECK(height); |
+ |
+ // TODO(jeffbrown): Give the caller more control over these parameters |
+ // as required. |
+ GrGLTextureInfo info; |
+ info.fTarget = GL_TEXTURE_2D; |
+ info.fID = texture_id; |
+ |
+ GrBackendTextureDesc desc; |
+ desc.fFlags = kRenderTarget_GrBackendTextureFlag; |
+ desc.fWidth = width; |
+ desc.fHeight = height; |
+ desc.fConfig = kSkia8888_GrPixelConfig; |
+ desc.fOrigin = kTopLeft_GrSurfaceOrigin; |
+ desc.fTextureHandle = reinterpret_cast<GrBackendObject>(&info); |
+ return ::skia::AdoptRef(SkImage::NewFromTexture( |
+ scope.gr_context(), desc, kPremul_SkAlphaType, &ReleaseThunk, |
+ new base::Closure(release_callback))); |
+} |
+ |
+} // namespace skia |
+} // namespace mojo |