float components in xfermodes
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1623483002
TBR=mtklein
Review URL: https://codereview.chromium.org/1634273002
diff --git a/src/core/SkCoreBlitters.h b/src/core/SkCoreBlitters.h
index b327039..d2559f5 100644
--- a/src/core/SkCoreBlitters.h
+++ b/src/core/SkCoreBlitters.h
@@ -170,7 +170,7 @@
void blitRect(int x, int y, int width, int height) override;
void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) override;
void blitMask(const SkMask&, const SkIRect&) override;
-
+
private:
SkXfermode* fXfermode;
SkPMColor* fBuffer;
@@ -178,13 +178,37 @@
SkBlitRow::Proc32 fProc32Blend;
bool fShadeDirectlyIntoDevice;
bool fConstInY;
-
+
// illegal
SkARGB32_Shader_Blitter& operator=(const SkARGB32_Shader_Blitter&);
-
+
typedef SkShaderBlitter INHERITED;
};
+class SkARGB32_Shader4f_Blitter : public SkARGB32_Shader_Blitter {
+public:
+ SkARGB32_Shader4f_Blitter(const SkPixmap& device, const SkPaint& paint,
+ SkShader::Context* shaderContext);
+ virtual ~SkARGB32_Shader4f_Blitter();
+ void blitH(int x, int y, int width) override;
+ void blitV(int x, int y, int height, SkAlpha alpha) override;
+ void blitRect(int x, int y, int width, int height) override;
+ void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) override;
+ void blitMask(const SkMask&, const SkIRect&) override;
+
+private:
+ SkXfermode::PM4fState fState;
+ SkXfermode::PM4fProc1 fProc1;
+ SkXfermode::PM4fProcN fProcN;
+ SkPM4f* fBuffer;
+ bool fConstInY;
+
+ // illegal
+ SkARGB32_Shader4f_Blitter& operator=(const SkARGB32_Shader4f_Blitter&);
+
+ typedef SkARGB32_Shader_Blitter INHERITED;
+};
+
///////////////////////////////////////////////////////////////////////////////
/* These return the correct subclass of blitter for their device config.