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/ops/GrDrawVerticesOp.cpp b/src/gpu/ops/GrDrawVerticesOp.cpp
index da8eb3a..10ff9da 100644
--- a/src/gpu/ops/GrDrawVerticesOp.cpp
+++ b/src/gpu/ops/GrDrawVerticesOp.cpp
@@ -29,7 +29,7 @@
std::move(colorSpaceXform), viewMatrix);
}
-GrDrawVerticesOp::GrDrawVerticesOp(const Helper::MakeArgs& helperArgs, GrColor color,
+GrDrawVerticesOp::GrDrawVerticesOp(const Helper::MakeArgs& helperArgs, GrColor4h color,
sk_sp<SkVertices> vertices, const SkVertices::Bone bones[],
int boneCount, GrPrimitiveType primitiveType, GrAAType aaType,
sk_sp<GrColorSpaceXform> colorSpaceXform,
@@ -426,6 +426,9 @@
}
size_t boneWeightOffset = offset;
+ // TODO4F: Preserve float colors
+ GrColor color = mesh.fColor.toGrColor();
+
for (int j = 0; j < vertexCount; ++j) {
if (this->hasMultipleViewMatrices()) {
mesh.fViewMatrix.mapPoints(((SkPoint*)verts), &positions[j], 1);
@@ -436,7 +439,7 @@
if (mesh.hasPerVertexColors()) {
*(uint32_t*)((intptr_t)verts + kColorOffset) = colors[j];
} else {
- *(uint32_t*)((intptr_t)verts + kColorOffset) = mesh.fColor;
+ *(uint32_t*)((intptr_t)verts + kColorOffset) = color;
}
}
if (hasLocalCoordsAttribute) {