public ShadowRenderingRequest(TrueShadow shadow) { this.shadow = shadow; var casterScale = 1f; try { casterScale = shadow.Graphic.canvas.scaleFactor; } catch (NullReferenceException) { } shadowSize = shadow.Size * casterScale; shadowOffset = shadow.Offset.Rotate(-shadow.RectTransform.eulerAngles.z) * casterScale; rect = shadow.RectTransform.rect; dimensions = rect.size * casterScale; // Tiled type cannot be batched by similar size int dimensionHash = shadow.Graphic is Image image && image.type == Image.Type.Tiled ? dimensions.GetHashCode() : HashUtils.CombineHashCodes( Mathf.CeilToInt(dimensions.x / DIMENSIONS_HASH_STEP) * DIMENSIONS_HASH_STEP, Mathf.CeilToInt(dimensions.y / DIMENSIONS_HASH_STEP) * DIMENSIONS_HASH_STEP ); hash = HashUtils.CombineHashCodes( Mathf.CeilToInt(shadowSize * 100), dimensionHash, shadow.ContentHash ); }
void CalcHash() { var graphic = shadow.Graphic; int canvasScaleHash = (int)(canvasScale * 1e4); int insetHash = shadow.Inset ? 1 : 0; var clearColor = shadow.ClearColor; var imageColor = graphic.color; int colorHash = HashUtils.CombineHashCodes( shadow.IgnoreCasterColor ? 1 : 0, (int)shadow.ColorBleedMode, (int)(imageColor.r * 255), (int)(imageColor.g * 255), (int)(imageColor.b * 255), (int)(imageColor.a * 255), (int)(clearColor.r * 255), (int)(clearColor.g * 255), (int)(clearColor.b * 255), (int)(clearColor.a * 255) ); // Hack until we have separated cutout cache, or proper sibling mode int offsetHash = HashUtils.CombineHashCodes( shadow.Cutout ? 1 : 0, (int)(canvasRelativeOffset.x * 100), (int)(canvasRelativeOffset.y * 100) ); // Tiled type cannot be batched by similar size int dimensionHash = graphic is Image im && im.type == Image.Type.Tiled ? dimensions.GetHashCode() : HashUtils.CombineHashCodes( Mathf.CeilToInt(dimensions.x / DIMENSIONS_HASH_STEP) * DIMENSIONS_HASH_STEP, Mathf.CeilToInt(dimensions.y / DIMENSIONS_HASH_STEP) * DIMENSIONS_HASH_STEP ); var sizeHash = Mathf.CeilToInt(size * 100); var commonHash = HashUtils.CombineHashCodes( shadow.TextureRevision, canvasScaleHash, insetHash, colorHash, offsetHash, dimensionHash, sizeHash ); switch (graphic) { case Image image: int spriteHash = 0; if (image.sprite) { spriteHash = image.sprite.GetHashCode(); } int imageHash = HashUtils.CombineHashCodes( (int)image.type, (int)(image.fillAmount * 360 * 20), (int)image.fillMethod, image.fillOrigin, image.fillClockwise ? 1 : 0 ); hash = HashUtils.CombineHashCodes( commonHash, spriteHash, imageHash ); break; case RawImage rawImage: var textureHash = 0; if (rawImage.texture) { textureHash = rawImage.texture.GetInstanceID(); } hash = HashUtils.CombineHashCodes( commonHash, textureHash ); break; default: hash = commonHash; break; } }
public override int GetHashCode() { return(HashUtils.CombineHashCodes(Key.GetHashCode(), Value.GetHashCode())); }
public override int GetHashCode() { return(HashUtils.CombineHashCodes(_variants.Select(v => v.GetHashCode()).ToArray())); }