override public void UpdateGraphics(NGraphics graphics) { MaterialPropertyBlock block = graphics.materialPropertyBlock; if (_format.outline > 0) { graphics.ToggleKeyword("OUTLINE_ON", true); block.SetFloat(ShaderUtilities.ID_OutlineWidth, _format.outline); block.SetColor(ShaderUtilities.ID_OutlineColor, _format.outlineColor); } else { graphics.ToggleKeyword("OUTLINE_ON", false); block.SetFloat(ShaderUtilities.ID_OutlineWidth, 0); } if (_format.shadowOffset.x != 0 || _format.shadowOffset.y != 0) { graphics.ToggleKeyword("UNDERLAY_ON", true); block.SetColor(ShaderUtilities.ID_UnderlayColor, _format.shadowColor); block.SetFloat(ShaderUtilities.ID_UnderlayOffsetX, _format.shadowOffset.x); block.SetFloat(ShaderUtilities.ID_UnderlayOffsetY, -_format.shadowOffset.y); block.SetFloat(ShaderUtilities.ID_UnderlaySoftness, _format.underlaySoftness); } else { graphics.ToggleKeyword("UNDERLAY_ON", false); block.SetFloat(ShaderUtilities.ID_UnderlayOffsetX, 0); block.SetFloat(ShaderUtilities.ID_UnderlayOffsetY, 0); block.SetFloat(ShaderUtilities.ID_UnderlaySoftness, 0); } block.SetFloat(ShaderUtilities.ID_FaceDilate, _format.faceDilate); block.SetFloat(ShaderUtilities.ID_OutlineSoftness, _format.outlineSoftness); if (_material.HasProperty(ShaderUtilities.ID_ScaleRatio_A)) { //ShaderUtilities.GetPadding does not support handle materialproperyblock, we have to use a temp material _material.SetFloat(ShaderUtilities.ID_OutlineWidth, block.GetFloat(ShaderUtilities.ID_OutlineWidth)); _material.SetFloat(ShaderUtilities.ID_UnderlayOffsetX, block.GetFloat(ShaderUtilities.ID_UnderlayOffsetX)); _material.SetFloat(ShaderUtilities.ID_UnderlayOffsetY, block.GetFloat(ShaderUtilities.ID_UnderlayOffsetY)); _material.SetFloat(ShaderUtilities.ID_UnderlaySoftness, block.GetFloat(ShaderUtilities.ID_UnderlaySoftness)); _material.SetFloat(ShaderUtilities.ID_FaceDilate, block.GetFloat(ShaderUtilities.ID_FaceDilate)); _material.SetFloat(ShaderUtilities.ID_OutlineSoftness, block.GetFloat(ShaderUtilities.ID_OutlineSoftness)); _padding = ShaderUtilities.GetPadding(_material, false, false); //and then set back the properteis block.SetFloat(ShaderUtilities.ID_ScaleRatio_A, _material.GetFloat(ShaderUtilities.ID_ScaleRatio_A)); block.SetFloat(ShaderUtilities.ID_ScaleRatio_B, _material.GetFloat(ShaderUtilities.ID_ScaleRatio_B)); block.SetFloat(ShaderUtilities.ID_ScaleRatio_C, _material.GetFloat(ShaderUtilities.ID_ScaleRatio_C)); } // Set Padding based on selected font style #region Handle Style Padding if (((_style & FontStyles.Bold) == FontStyles.Bold)) // Checks for any combination of Bold Style. { if (_material.HasProperty(ShaderUtilities.ID_GradientScale)) { float gradientScale = _material.GetFloat(ShaderUtilities.ID_GradientScale); _stylePadding = _fontAsset.boldStyle / 4.0f * gradientScale * _material.GetFloat(ShaderUtilities.ID_ScaleRatio_A); // Clamp overall padding to Gradient Scale size. if (_stylePadding + _padding > gradientScale) { _padding = gradientScale - _stylePadding; } } else { _stylePadding = 0; } } else { if (_material.HasProperty(ShaderUtilities.ID_GradientScale)) { float gradientScale = _material.GetFloat(ShaderUtilities.ID_GradientScale); _stylePadding = _fontAsset.normalStyle / 4.0f * gradientScale * _material.GetFloat(ShaderUtilities.ID_ScaleRatio_A); // Clamp overall padding to Gradient Scale size. if (_stylePadding + _padding > gradientScale) { _padding = gradientScale - _stylePadding; } } else { _stylePadding = 0; } } #endregion Handle Style Padding }