Chromium Code Reviews| Index: src/gpu/GrPath.cpp |
| diff --git a/src/gpu/GrPath.cpp b/src/gpu/GrPath.cpp |
| index 3a66865c6e5d3448eaeaefce22db731364340519..4af6cc6beaa6c1dcf8ef9d6738f0d1cea49d3f0b 100644 |
| --- a/src/gpu/GrPath.cpp |
| +++ b/src/gpu/GrPath.cpp |
| @@ -7,49 +7,12 @@ |
| #include "GrPath.h" |
| -template<int NumBits> static uint64_t get_top_n_float_bits(float f) { |
| - char* floatData = reinterpret_cast<char*>(&f); |
| - uint32_t floatBits = *reinterpret_cast<uint32_t*>(floatData); |
| - return floatBits >> (32 - NumBits); |
| +void GrPath::ComputeKey(const SkPath& path, const GrStrokeInfo& stroke, GrUniqueKey* key) { |
| + static const GrUniqueKey::Domain kPathDomain = GrUniqueKey::GenerateDomain(); |
| + GrUniqueKey::Builder builder(key, kPathDomain, |
| + 2 + stroke.computeUniqueKeyFragmentData32Cnt()); |
| + builder[0] = path.getGenerationID(); |
| + builder[1] = path.getFillType(); |
| + stroke.asUniqueKeyFragment(&builder[2]); |
|
egdaniel
2015/05/15 15:28:53
We should probably Assert here the computeUniqueKe
Kimmo Kinnunen
2015/05/18 06:48:40
Hmm. I expect you hint at the Builder operator[] a
egdaniel
2015/05/18 13:43:46
Yeah it was the builder[2] that I was worried abou
|
| } |
| -void GrPath::ComputeKey(const SkPath& path, const SkStrokeRec& stroke, GrUniqueKey* key) { |
| - static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); |
| - GrUniqueKey::Builder builder(key, kDomain, 3); |
| - *reinterpret_cast<uint64_t*>(&builder[0]) = ComputeStrokeKey(stroke); |
| - builder[2] = path.getGenerationID(); |
| -} |
| - |
| -uint64_t GrPath::ComputeStrokeKey(const SkStrokeRec& stroke) { |
| - enum { |
| - kStyleBits = 2, |
| - kJoinBits = 2, |
| - kCapBits = 2, |
| - kWidthBits = 29, |
| - kMiterBits = 29, |
| - |
| - kJoinShift = kStyleBits, |
| - kCapShift = kJoinShift + kJoinBits, |
| - kWidthShift = kCapShift + kCapBits, |
| - kMiterShift = kWidthShift + kWidthBits, |
| - |
| - kBitCount = kMiterShift + kMiterBits |
| - }; |
| - |
| - SK_COMPILE_ASSERT(SkStrokeRec::kStyleCount <= (1 << kStyleBits), style_shift_will_be_wrong); |
| - SK_COMPILE_ASSERT(SkPaint::kJoinCount <= (1 << kJoinBits), cap_shift_will_be_wrong); |
| - SK_COMPILE_ASSERT(SkPaint::kCapCount <= (1 << kCapBits), miter_shift_will_be_wrong); |
| - SK_COMPILE_ASSERT(kBitCount == 64, wrong_stroke_key_size); |
| - |
| - if (!stroke.needToApply()) { |
| - return SkStrokeRec::kFill_Style; |
| - } |
| - |
| - uint64_t key = stroke.getStyle(); |
| - key |= stroke.getJoin() << kJoinShift; |
| - key |= stroke.getCap() << kCapShift; |
| - key |= get_top_n_float_bits<kWidthBits>(stroke.getWidth()) << kWidthShift; |
| - key |= get_top_n_float_bits<kMiterBits>(stroke.getMiter()) << kMiterShift; |
| - |
| - return key; |
| -} |