blob: a4dedd0826609abf4b99d6d628874e922e208eaf [file] [log] [blame]
// 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