180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2012 Google Inc.
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "GrPath.h"
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
100a657bbc2c6fc9daf699942e023050536d5ec95fDerek SollenbergerGrResourceKey GrPath::ComputeKey(const SkPath& path, const SkStrokeRec& stroke) {
110a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    static const GrResourceKey::ResourceType gPathResourceType = GrResourceKey::GenerateResourceType();
120a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    static const GrCacheID::Domain gPathDomain = GrCacheID::GenerateDomain();
130a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger
140a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    GrCacheID::Key key;
150a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    uint32_t* keyData = key.fData32;
160a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    keyData[0] = path.getGenerationID();
170a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger
180a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    SK_COMPILE_ASSERT(SkPaint::kJoinCount <= 3, cap_shift_will_be_wrong);
190a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    keyData[1] = stroke.needToApply();
200a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    if (0 != keyData[1]) {
210a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger        keyData[1] |= stroke.getJoin() << 1;
220a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger        keyData[1] |= stroke.getCap() << 3;
230a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger        keyData[2] = static_cast<uint32_t>(stroke.getMiter());
240a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger        keyData[3] = static_cast<uint32_t>(stroke.getWidth());
250a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    } else {
260a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger        keyData[2] = 0;
270a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger        keyData[3] = 0;
280a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    }
290a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger
300a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger    return GrResourceKey(GrCacheID(gPathDomain, key), gPathResourceType, 0);
310a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger}
32