Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Unified Diff: src/core/SkShader.cpp

Issue 1934313002: move colorshader into its own .cpp, add color4f variant (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: register for serialization, amend GM view for future picture expansion Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkGlobalInitialization_core.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkShader.cpp
diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp
index 0ed97b02239e3d9bc7b9f429d1c56ca97a301f59..1b729ea9a851f45ec42f5e370e86e38584832897 100644
--- a/src/core/SkShader.cpp
+++ b/src/core/SkShader.cpp
@@ -252,171 +252,7 @@ void SkShader::toString(SkString* str) const {
}
#endif
-//////////////////////////////////////////////////////////////////////////////
-
-#include "SkUtils.h"
-
-SkColorShader::SkColorShader(SkColor c)
- : fColor(c) {
-}
-
-bool SkColorShader::isOpaque() const {
- return SkColorGetA(fColor) == 255;
-}
-
-sk_sp<SkFlattenable> SkColorShader::CreateProc(SkReadBuffer& buffer) {
- return sk_make_sp<SkColorShader>(buffer.readColor());
-}
-
-void SkColorShader::flatten(SkWriteBuffer& buffer) const {
- buffer.writeColor(fColor);
-}
-
-uint32_t SkColorShader::ColorShaderContext::getFlags() const {
- return fFlags;
-}
-
-SkShader::Context* SkColorShader::onCreateContext(const ContextRec& rec, void* storage) const {
- return new (storage) ColorShaderContext(*this, rec);
-}
-
-SkColorShader::ColorShaderContext::ColorShaderContext(const SkColorShader& shader,
- const ContextRec& rec)
- : INHERITED(shader, rec)
-{
- SkColor color = shader.fColor;
- unsigned a = SkAlphaMul(SkColorGetA(color), SkAlpha255To256(rec.fPaint->getAlpha()));
-
- unsigned r = SkColorGetR(color);
- unsigned g = SkColorGetG(color);
- unsigned b = SkColorGetB(color);
-
- if (a != 255) {
- r = SkMulDiv255Round(r, a);
- g = SkMulDiv255Round(g, a);
- b = SkMulDiv255Round(b, a);
- }
- fPMColor = SkPackARGB32(a, r, g, b);
-
- SkColor4f c4 = SkColor4f::FromColor(shader.fColor);
- c4.fA *= rec.fPaint->getAlpha() / 255.0f;
- fPM4f = c4.premul();
-
- fFlags = kConstInY32_Flag;
- if (255 == a) {
- fFlags |= kOpaqueAlpha_Flag;
- }
-}
-
-void SkColorShader::ColorShaderContext::shadeSpan(int x, int y, SkPMColor span[], int count) {
- sk_memset32(span, fPMColor, count);
-}
-
-void SkColorShader::ColorShaderContext::shadeSpanAlpha(int x, int y, uint8_t alpha[], int count) {
- memset(alpha, SkGetPackedA32(fPMColor), count);
-}
-
-void SkColorShader::ColorShaderContext::shadeSpan4f(int x, int y, SkPM4f span[], int count) {
- for (int i = 0; i < count; ++i) {
- span[i] = fPM4f;
- }
-}
-
-SkShader::GradientType SkColorShader::asAGradient(GradientInfo* info) const {
- if (info) {
- if (info->fColors && info->fColorCount >= 1) {
- info->fColors[0] = fColor;
- }
- info->fColorCount = 1;
- info->fTileMode = SkShader::kRepeat_TileMode;
- }
- return kColor_GradientType;
-}
-
-#if SK_SUPPORT_GPU
-
-#include "SkGr.h"
-#include "effects/GrConstColorProcessor.h"
-const GrFragmentProcessor* SkColorShader::asFragmentProcessor(GrContext*, const SkMatrix&,
- const SkMatrix*,
- SkFilterQuality) const {
- GrColor color = SkColorToPremulGrColor(fColor);
- return GrConstColorProcessor::Create(color, GrConstColorProcessor::kModulateA_InputMode);
-}
-
-#endif
-
-#ifndef SK_IGNORE_TO_STRING
-void SkColorShader::toString(SkString* str) const {
- str->append("SkColorShader: (");
-
- str->append("Color: ");
- str->appendHex(fColor);
-
- this->INHERITED::toString(str);
-
- str->append(")");
-}
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-
-static void D32_BlitBW(SkShader::Context::BlitState* state, int x, int y, const SkPixmap& dst,
- int count) {
- SkXfermode::D32Proc proc = (SkXfermode::D32Proc)state->fStorage[0];
- const SkPM4f* src = (const SkPM4f*)state->fStorage[1];
- proc(state->fXfer, dst.writable_addr32(x, y), src, count, nullptr);
-}
-
-static void D32_BlitAA(SkShader::Context::BlitState* state, int x, int y, const SkPixmap& dst,
- int count, const SkAlpha aa[]) {
- SkXfermode::D32Proc proc = (SkXfermode::D32Proc)state->fStorage[0];
- const SkPM4f* src = (const SkPM4f*)state->fStorage[1];
- proc(state->fXfer, dst.writable_addr32(x, y), src, count, aa);
-}
-
-static void F16_BlitBW(SkShader::Context::BlitState* state, int x, int y, const SkPixmap& dst,
- int count) {
- SkXfermode::F16Proc proc = (SkXfermode::F16Proc)state->fStorage[0];
- const SkPM4f* src = (const SkPM4f*)state->fStorage[1];
- proc(state->fXfer, dst.writable_addr64(x, y), src, count, nullptr);
-}
-
-static void F16_BlitAA(SkShader::Context::BlitState* state, int x, int y, const SkPixmap& dst,
- int count, const SkAlpha aa[]) {
- SkXfermode::F16Proc proc = (SkXfermode::F16Proc)state->fStorage[0];
- const SkPM4f* src = (const SkPM4f*)state->fStorage[1];
- proc(state->fXfer, dst.writable_addr64(x, y), src, count, aa);
-}
-
-bool SkColorShader::ColorShaderContext::onChooseBlitProcs(const SkImageInfo& info,
- BlitState* state) {
- uint32_t flags = SkXfermode::kSrcIsSingle_D32Flag;
- if (fPM4f.a() == 1) {
- flags |= SkXfermode::kSrcIsOpaque_D32Flag;
- }
- switch (info.colorType()) {
- case kN32_SkColorType:
- if (info.isSRGB()) {
- flags |= SkXfermode::kDstIsSRGB_D32Flag;
- }
- state->fStorage[0] = (void*)SkXfermode::GetD32Proc(state->fXfer, flags);
- state->fStorage[1] = &fPM4f;
- state->fBlitBW = D32_BlitBW;
- state->fBlitAA = D32_BlitAA;
- return true;
- case kRGBA_F16_SkColorType:
- state->fStorage[0] = (void*)SkXfermode::GetF16Proc(state->fXfer, flags);
- state->fStorage[1] = &fPM4f;
- state->fBlitBW = F16_BlitBW;
- state->fBlitAA = F16_BlitAA;
- return true;
- default:
- return false;
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
sk_sp<SkFlattenable> SkEmptyShader::CreateProc(SkReadBuffer&) {
return SkShader::MakeEmptyShader();
« no previous file with comments | « src/core/SkGlobalInitialization_core.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698