Keep paint color range/precision into ops and GPs (using GrColor4h)
We still degrade to bytes when creating vertices (tagged TODO4F).
Note: Guarded for Chrome (by making GrColor4h a wrapper around
GrColor).
Bug: skia:
Change-Id: Id8a1d9eec7978d52b059cd9952666bc1217ee073
Reviewed-on: https://skia-review.googlesource.com/c/165527
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp
index 5dfff7e..fc54933 100644
--- a/src/gpu/GrDefaultGeoProcFactory.cpp
+++ b/src/gpu/GrDefaultGeoProcFactory.cpp
@@ -39,7 +39,7 @@
public:
static sk_sp<GrGeometryProcessor> Make(const GrShaderCaps* shaderCaps,
uint32_t gpTypeFlags,
- GrColor color,
+ GrColor4h color,
sk_sp<GrColorSpaceXform> colorSpaceXform,
const SkMatrix& viewMatrix,
const SkMatrix& localMatrix,
@@ -54,7 +54,7 @@
const char* name() const override { return "DefaultGeometryProcessor"; }
- GrColor color() const { return fColor; }
+ GrColor4h color() const { return fColor; }
bool hasVertexColor() const { return fInColor.isInitialized(); }
const SkMatrix& viewMatrix() const { return fViewMatrix; }
const SkMatrix& localMatrix() const { return fLocalMatrix; }
@@ -68,7 +68,7 @@
class GLSLProcessor : public GrGLSLGeometryProcessor {
public:
GLSLProcessor()
- : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage(0xff) {}
+ : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor4h_ILLEGAL), fCoverage(0xff) {}
void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override {
const DefaultGeoProc& gp = args.fGP.cast<DefaultGeoProc>();
@@ -229,9 +229,9 @@
pdman.setMatrix3f(fViewMatrixUniform, viewMatrix);
}
- if (dgp.color() != fColor && !dgp.hasVertexColor()) {
+ if (!dgp.hasVertexColor() && dgp.color() != fColor) {
float c[4];
- GrColorToRGBAFloat(dgp.color(), c);
+ dgp.color().toFloats(c);
pdman.set4fv(fColorUniform, 1, c);
fColor = dgp.color();
}
@@ -281,7 +281,7 @@
private:
SkMatrix fViewMatrix;
- GrColor fColor;
+ GrColor4h fColor;
uint8_t fCoverage;
UniformHandle fViewMatrixUniform;
UniformHandle fColorUniform;
@@ -303,7 +303,7 @@
private:
DefaultGeoProc(const GrShaderCaps* shaderCaps,
uint32_t gpTypeFlags,
- GrColor color,
+ GrColor4h color,
sk_sp<GrColorSpaceXform> colorSpaceXform,
const SkMatrix& viewMatrix,
const SkMatrix& localMatrix,
@@ -370,7 +370,7 @@
Attribute fInCoverage;
Attribute fInBoneIndices;
Attribute fInBoneWeights;
- GrColor fColor;
+ GrColor4h fColor;
SkMatrix fViewMatrix;
SkMatrix fLocalMatrix;
uint8_t fCoverage;
@@ -417,7 +417,7 @@
return DefaultGeoProc::Make(d->caps()->shaderCaps(),
flags,
- GrRandomColor(d->fRandom),
+ GrColor4h::FromGrColor(GrRandomColor(d->fRandom)),
GrTest::TestColorXform(d->fRandom),
GrTest::TestMatrix(d->fRandom),
GrTest::TestMatrix(d->fRandom),
@@ -445,7 +445,7 @@
uint8_t inCoverage = coverage.fCoverage;
bool localCoordsWillBeRead = localCoords.fType != LocalCoords::kUnused_Type;
- GrColor inColor = color.fColor;
+ GrColor4h inColor = color.fColor;
return DefaultGeoProc::Make(shaderCaps,
flags,
inColor,
@@ -499,7 +499,7 @@
uint8_t inCoverage = coverage.fCoverage;
bool localCoordsWillBeRead = localCoords.fType != LocalCoords::kUnused_Type;
- GrColor inColor = color.fColor;
+ GrColor4h inColor = color.fColor;
return DefaultGeoProc::Make(shaderCaps,
flags,
inColor,