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