|  | // Copyright 2019 Google LLC. | 
|  | // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. | 
|  | #include "tools/fiddle/examples.h" | 
|  | REG_FIDDLE(Image_MakeBackendTextureFromImage, 256, 64, false, 0) { | 
|  | static sk_sp<SkImage> create_gpu_image(GrRecordingContext * rContext) { | 
|  | const SkImageInfo info = SkImageInfo::MakeN32(20, 20, kOpaque_SkAlphaType); | 
|  | auto surface(SkSurfaces::RenderTarget(rContext, skgpu::Budgeted::kNo, info)); | 
|  | SkCanvas* canvas = surface->getCanvas(); | 
|  | canvas->clear(SK_ColorWHITE); | 
|  | SkPaint paint; | 
|  | paint.setColor(SK_ColorBLACK); | 
|  | canvas->drawRect(SkRect::MakeXYWH(5, 5, 10, 10), paint); | 
|  | return surface->makeImageSnapshot(); | 
|  | } | 
|  |  | 
|  | void draw(SkCanvas * canvas) { | 
|  | auto dContext = GrAsDirectContext(canvas->recordingContext()); | 
|  | if (!dContext) { | 
|  | return; | 
|  | } | 
|  | sk_sp<SkImage> backEndImage = create_gpu_image(dContext); | 
|  | canvas->drawImage(backEndImage, 0, 0); | 
|  | GrBackendTexture texture; | 
|  | SkImages::BackendTextureReleaseProc proc; | 
|  | if (!SkImages::MakeBackendTextureFromImage( | 
|  | dContext, std::move(backEndImage), &texture, &proc)) { | 
|  | return; | 
|  | } | 
|  | sk_sp<SkImage> i2 = SkImages::BorrowTextureFrom(dContext, | 
|  | texture, | 
|  | kTopLeft_GrSurfaceOrigin, | 
|  | kN32_SkColorType, | 
|  | kOpaque_SkAlphaType, | 
|  | nullptr); | 
|  | canvas->drawImage(i2, 30, 30); | 
|  | } | 
|  | }  // END FIDDLE |