#include "tools/fiddle/examples.h"
REG_FIDDLE(SkSL_PremultipliedAlpha, 200, 200, false, 0) {
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( nullptr,
{});
canvas->drawColor(SK_ColorGRAY);
SkPaint p;
p.setShader(myShader);
canvas->drawPaint(p);
}
}