moved code into onDrawShadowedPic, only renders into shadow maps if needed

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2220633002

Review-Url: https://codereview.chromium.org/2220633002
diff --git a/gm/shadowmaps.cpp b/gm/shadowmaps.cpp
index 1ae95fb..b343d9b 100644
--- a/gm/shadowmaps.cpp
+++ b/gm/shadowmaps.cpp
@@ -15,21 +15,6 @@
 
 #ifdef SK_EXPERIMENTAL_SHADOWING
 
-static sk_sp<SkShader> make_shadow_shader(sk_sp<SkImage> povDepth,
-                                          sk_sp<SkImage> diffuse,
-                                          sk_sp<SkLights> lights) {
-
-    sk_sp<SkShader> povDepthShader = povDepth->makeShader(SkShader::kClamp_TileMode,
-                                                          SkShader::kClamp_TileMode);
-
-    sk_sp<SkShader> diffuseShader = diffuse->makeShader(SkShader::kClamp_TileMode,
-                                                        SkShader::kClamp_TileMode);
-
-    return SkShadowShader::Make(std::move(povDepthShader),
-                                std::move(diffuseShader),
-                                std::move(lights),
-                                diffuse->width(), diffuse->height());
-}
 
 static sk_sp<SkPicture> make_test_picture(int width, int height) {
     SkPictureRecorder recorder;
@@ -109,96 +94,12 @@
         // This picture stores the picture of the scene.
         // It's used to generate the depth maps.
         sk_sp<SkPicture> pic(make_test_picture(kWidth, kHeight));
-
-        for (int i = 0; i < fLights->numLights(); ++i) {
-            // skip over ambient lights; they don't cast shadows
-            if (SkLights::Light::kAmbient_LightType == fLights->light(i).type()) {
-                continue;
-            }
-            // TODO: compute the correct size of the depth map from the light properties
-            // TODO: maybe add a kDepth_8_SkColorType
-
-            // TODO: find actual max depth of picture
-            SkISize shMapSize = SkShadowPaintFilterCanvas::
-                    ComputeDepthMapSize(fLights->light(i), 255, kWidth, kHeight);
-
-            SkImageInfo info = SkImageInfo::Make(shMapSize.fWidth, shMapSize.fHeight,
-                                                 kBGRA_8888_SkColorType,
-                                                 kOpaque_SkAlphaType);
-
-            // Create a new surface (that matches the backend of canvas)
-            // for each shadow map
-            sk_sp<SkSurface> surf(canvas->makeSurface(info));
-
-            // Wrap another SPFCanvas around the surface
-            sk_sp<SkShadowPaintFilterCanvas> depthMapCanvas =
-                    sk_make_sp<SkShadowPaintFilterCanvas>(surf->getCanvas());
-
-            // set the depth map canvas to have the light we're drawing.
-            SkLights::Builder builder;
-            builder.add(fLights->light(i));
-            sk_sp<SkLights> curLight = builder.finish();
-
-            depthMapCanvas->setLights(std::move(curLight));
-            depthMapCanvas->drawPicture(pic);
-
-            fLights->light(i).setShadowMap(surf->makeImageSnapshot());
-        }
-
-        sk_sp<SkImage> povDepthMap;
-        sk_sp<SkImage> diffuseMap;
-
-        // TODO: pass the depth to the shader in vertices, or uniforms
-        //       so we don't have to render depth and color separately
-
-        // povDepthMap
-        {
-            SkLights::Builder builder;
-            builder.add(SkLights::Light(SkColor3f::Make(1.0f, 1.0f, 1.0f),
-                                        SkVector3::Make(0.0f, 0.0f, 1.0f)));
-            sk_sp<SkLights> povLight = builder.finish();
-
-            SkImageInfo info = SkImageInfo::Make(kWidth, kHeight,
-                                                 kBGRA_8888_SkColorType,
-                                                 kOpaque_SkAlphaType);
-
-            // Create a new surface (that matches the backend of canvas)
-            // to create the povDepthMap
-            sk_sp<SkSurface> surf(canvas->makeSurface(info));
-
-            // Wrap another SPFCanvas around the surface
-            sk_sp<SkShadowPaintFilterCanvas> depthMapCanvas =
-                    sk_make_sp<SkShadowPaintFilterCanvas>(surf->getCanvas());
-
-            // set the depth map canvas to have the light as the user's POV
-            depthMapCanvas->setLights(std::move(povLight));
-
-            depthMapCanvas->drawPicture(pic);
-
-            povDepthMap = surf->makeImageSnapshot();
-        }
-
-        // diffuseMap
-        {
-            SkImageInfo info = SkImageInfo::Make(kWidth, kHeight,
-                                                 kBGRA_8888_SkColorType,
-                                                 kOpaque_SkAlphaType);
-
-            sk_sp<SkSurface> surf(canvas->makeSurface(info));
-            surf->getCanvas()->drawPicture(pic);
-
-            diffuseMap = surf->makeImageSnapshot();
-        }
-
-        SkPaint paint;
-        paint.setShader(make_shadow_shader(std::move(povDepthMap), std::move(diffuseMap), fLights));
-
-        canvas->drawRect(SkRect::MakeIWH(kWidth, kHeight), paint);
+        canvas->setLights(fLights);
+        canvas->drawShadowedPicture(pic, nullptr, nullptr);
     }
 
 private:
     sk_sp<SkLights> fLights;
-
     typedef GM INHERITED;
 };