Image_MakeBackendTextureFromSkImage.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334
  1. // Copyright 2019 Google LLC.
  2. // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
  3. #include "tools/fiddle/examples.h"
  4. // HASH=06aeb3cf63ffccf7b49fe556e5def351
  5. REG_FIDDLE(Image_MakeBackendTextureFromSkImage, 256, 64, false, 0) {
  6. static sk_sp<SkImage> create_gpu_image(GrContext* grContext) {
  7. const SkImageInfo info = SkImageInfo::MakeN32(20, 20, kOpaque_SkAlphaType);
  8. auto surface(SkSurface::MakeRenderTarget(grContext, SkBudgeted::kNo, info));
  9. SkCanvas* canvas = surface->getCanvas();
  10. canvas->clear(SK_ColorWHITE);
  11. SkPaint paint;
  12. paint.setColor(SK_ColorBLACK);
  13. canvas->drawRect(SkRect::MakeXYWH(5, 5, 10, 10), paint);
  14. return surface->makeImageSnapshot();
  15. }
  16. void draw(SkCanvas* canvas) {
  17. GrContext* grContext = canvas->getGrContext();
  18. if (!grContext) {
  19. return;
  20. }
  21. sk_sp<SkImage> backEndImage = create_gpu_image(grContext);
  22. canvas->drawImage(backEndImage, 0, 0);
  23. GrBackendTexture texture;
  24. SkImage::BackendTextureReleaseProc proc;
  25. if (!SkImage::MakeBackendTextureFromSkImage(grContext, std::move(backEndImage),
  26. &texture, &proc)) {
  27. return;
  28. }
  29. sk_sp<SkImage> i2 = SkImage::MakeFromTexture(grContext, texture, kTopLeft_GrSurfaceOrigin,
  30. kN32_SkColorType, kOpaque_SkAlphaType, nullptr);
  31. canvas->drawImage(i2, 30, 30);
  32. }
  33. } // END FIDDLE