示例#1
0
        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
        }