(Mache nach 2-4h Schlaf weiter. Noch nicht ganz fertig, aufgrund aufgrund mangelnder Zeit durch Arbeit, damaligen privaten Problemen und damals zu viel vorgenommen).
146 lines
3.5 KiB
Plaintext
146 lines
3.5 KiB
Plaintext
Shader "TextMeshPro/Mobile/Bitmap" {
|
|
|
|
Properties {
|
|
_MainTex ("Font Atlas", 2D) = "white" {}
|
|
[HDR]_Color ("Text Color", Color) = (1,1,1,1)
|
|
_DiffusePower ("Diffuse Power", Range(1.0,4.0)) = 1.0
|
|
|
|
_VertexOffsetX("Vertex OffsetX", float) = 0
|
|
_VertexOffsetY("Vertex OffsetY", float) = 0
|
|
_MaskSoftnessX("Mask SoftnessX", float) = 0
|
|
_MaskSoftnessY("Mask SoftnessY", float) = 0
|
|
|
|
_ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
|
|
|
|
_StencilComp("Stencil Comparison", Float) = 8
|
|
_Stencil("Stencil ID", Float) = 0
|
|
_StencilOp("Stencil Operation", Float) = 0
|
|
_StencilWriteMask("Stencil Write Mask", Float) = 255
|
|
_StencilReadMask("Stencil Read Mask", Float) = 255
|
|
|
|
_CullMode("Cull Mode", Float) = 0
|
|
_ColorMask("Color Mask", Float) = 15
|
|
}
|
|
|
|
SubShader {
|
|
|
|
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
|
|
|
|
Stencil
|
|
{
|
|
Ref[_Stencil]
|
|
Comp[_StencilComp]
|
|
Pass[_StencilOp]
|
|
ReadMask[_StencilReadMask]
|
|
WriteMask[_StencilWriteMask]
|
|
}
|
|
|
|
|
|
Lighting Off
|
|
Cull [_CullMode]
|
|
ZTest [unity_GUIZTestMode]
|
|
ZWrite Off
|
|
Fog { Mode Off }
|
|
Blend SrcAlpha OneMinusSrcAlpha
|
|
ColorMask[_ColorMask]
|
|
|
|
Pass {
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#pragma fragmentoption ARB_precision_hint_fastest
|
|
|
|
#pragma multi_compile __ UNITY_UI_CLIP_RECT
|
|
#pragma multi_compile __ UNITY_UI_ALPHACLIP
|
|
|
|
|
|
#include "UnityCG.cginc"
|
|
|
|
struct appdata_t {
|
|
float4 vertex : POSITION;
|
|
fixed4 color : COLOR;
|
|
float2 texcoord0 : TEXCOORD0;
|
|
float2 texcoord1 : TEXCOORD1;
|
|
};
|
|
|
|
struct v2f {
|
|
float4 vertex : POSITION;
|
|
fixed4 color : COLOR;
|
|
float2 texcoord0 : TEXCOORD0;
|
|
float4 mask : TEXCOORD2;
|
|
};
|
|
|
|
sampler2D _MainTex;
|
|
fixed4 _Color;
|
|
float _DiffusePower;
|
|
|
|
uniform float _VertexOffsetX;
|
|
uniform float _VertexOffsetY;
|
|
uniform float4 _ClipRect;
|
|
uniform float _MaskSoftnessX;
|
|
uniform float _MaskSoftnessY;
|
|
|
|
v2f vert (appdata_t v)
|
|
{
|
|
v2f OUT;
|
|
float4 vert = v.vertex;
|
|
vert.x += _VertexOffsetX;
|
|
vert.y += _VertexOffsetY;
|
|
|
|
vert.xy += (vert.w * 0.5) / _ScreenParams.xy;
|
|
|
|
OUT.vertex = UnityPixelSnap(UnityObjectToClipPos(vert));
|
|
OUT.color = v.color;
|
|
OUT.color *= _Color;
|
|
OUT.color.rgb *= _DiffusePower;
|
|
OUT.texcoord0 = v.texcoord0;
|
|
|
|
float2 pixelSize = OUT.vertex.w;
|
|
//pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1]));
|
|
|
|
// Clamp _ClipRect to 16bit.
|
|
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
|
|
OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
|
|
|
|
return OUT;
|
|
}
|
|
|
|
fixed4 frag (v2f IN) : COLOR
|
|
{
|
|
fixed4 color = fixed4(IN.color.rgb, IN.color.a * tex2D(_MainTex, IN.texcoord0).a);
|
|
|
|
// Alternative implementation to UnityGet2DClipping with support for softness.
|
|
#if UNITY_UI_CLIP_RECT
|
|
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw);
|
|
color *= m.x * m.y;
|
|
#endif
|
|
|
|
#if UNITY_UI_ALPHACLIP
|
|
clip(color.a - 0.001);
|
|
#endif
|
|
|
|
return color;
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
|
|
SubShader {
|
|
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
|
|
Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off }
|
|
Blend SrcAlpha OneMinusSrcAlpha
|
|
BindChannels {
|
|
Bind "Color", color
|
|
Bind "Vertex", vertex
|
|
Bind "TexCoord", texcoord0
|
|
}
|
|
Pass {
|
|
SetTexture [_MainTex] {
|
|
constantColor [_Color] combine constant * primary, constant * texture
|
|
}
|
|
}
|
|
}
|
|
|
|
CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI"
|
|
}
|