1*c8dee2aaSAndroid Build Coastguard Worker // Copyright 2019 Google LLC. 2*c8dee2aaSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. 3*c8dee2aaSAndroid Build Coastguard Worker #include "tools/fiddle/examples.h" 4*c8dee2aaSAndroid Build Coastguard Worker REG_FIDDLE(Image_MakeBackendTextureFromImage, 256, 64, false, 0) { create_gpu_image(GrRecordingContext * rContext)5*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<SkImage> create_gpu_image(GrRecordingContext * rContext) { 6*c8dee2aaSAndroid Build Coastguard Worker const SkImageInfo info = SkImageInfo::MakeN32(20, 20, kOpaque_SkAlphaType); 7*c8dee2aaSAndroid Build Coastguard Worker auto surface(SkSurfaces::RenderTarget(rContext, skgpu::Budgeted::kNo, info)); 8*c8dee2aaSAndroid Build Coastguard Worker SkCanvas* canvas = surface->getCanvas(); 9*c8dee2aaSAndroid Build Coastguard Worker canvas->clear(SK_ColorWHITE); 10*c8dee2aaSAndroid Build Coastguard Worker SkPaint paint; 11*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorBLACK); 12*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRect(SkRect::MakeXYWH(5, 5, 10, 10), paint); 13*c8dee2aaSAndroid Build Coastguard Worker return surface->makeImageSnapshot(); 14*c8dee2aaSAndroid Build Coastguard Worker } 15*c8dee2aaSAndroid Build Coastguard Worker draw(SkCanvas * canvas)16*c8dee2aaSAndroid Build Coastguard Worker void draw(SkCanvas * canvas) { 17*c8dee2aaSAndroid Build Coastguard Worker auto dContext = GrAsDirectContext(canvas->recordingContext()); 18*c8dee2aaSAndroid Build Coastguard Worker if (!dContext) { 19*c8dee2aaSAndroid Build Coastguard Worker return; 20*c8dee2aaSAndroid Build Coastguard Worker } 21*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkImage> backEndImage = create_gpu_image(dContext); 22*c8dee2aaSAndroid Build Coastguard Worker canvas->drawImage(backEndImage, 0, 0); 23*c8dee2aaSAndroid Build Coastguard Worker GrBackendTexture texture; 24*c8dee2aaSAndroid Build Coastguard Worker SkImages::BackendTextureReleaseProc proc; 25*c8dee2aaSAndroid Build Coastguard Worker if (!SkImages::MakeBackendTextureFromImage( 26*c8dee2aaSAndroid Build Coastguard Worker dContext, std::move(backEndImage), &texture, &proc)) { 27*c8dee2aaSAndroid Build Coastguard Worker return; 28*c8dee2aaSAndroid Build Coastguard Worker } 29*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkImage> i2 = SkImages::BorrowTextureFrom(dContext, 30*c8dee2aaSAndroid Build Coastguard Worker texture, 31*c8dee2aaSAndroid Build Coastguard Worker kTopLeft_GrSurfaceOrigin, 32*c8dee2aaSAndroid Build Coastguard Worker kN32_SkColorType, 33*c8dee2aaSAndroid Build Coastguard Worker kOpaque_SkAlphaType, 34*c8dee2aaSAndroid Build Coastguard Worker nullptr); 35*c8dee2aaSAndroid Build Coastguard Worker canvas->drawImage(i2, 30, 30); 36*c8dee2aaSAndroid Build Coastguard Worker } 37*c8dee2aaSAndroid Build Coastguard Worker } // END FIDDLE 38