// Copyright 2024 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(SkSL_PremultipliedAlpha, 200, 200, false, 0) {
// Interactive version of this demo available at:
// https://shaders.skia.org/?id=8a80c2a7bcd9fb6b39460fd6acc1e828e5725d0210b72719ef696b02e1557435
void draw(SkCanvas* canvas) {
  const char* sksl =

  "const half3 iColor = half3(0, 0.5, 0.75);"
  "half4 main(float2 coord) {"
  "  float alpha = 1 - (coord.y / 150);"
  "  if (coord.x < 100) {"
  "    /* Correctly premultiplied version of color */"
  "    return iColor.rgb1 * alpha;"
  "  } else {"
  "    /* Returning an unpremultiplied color (just setting alpha) leads to over-bright colors. */"
  "    return half4(iColor, alpha);"
  "  }"
  "}";

  auto [effect, err] = SkRuntimeEffect::MakeForShader(SkString(sksl));
  sk_sp<SkShader> myShader = effect->makeShader(/*uniforms=*/ nullptr,
                                                /*children=*/ {});

  // Fill canvas with gray, first:
  canvas->drawColor(SK_ColorGRAY);

  // Blend our test shader on top of that:
  SkPaint p;
  p.setShader(myShader);
  canvas->drawPaint(p);
}}  // END FIDDLE
