summaryrefslogtreecommitdiff
path: root/MipTexMap.cs
blob: 57b6abc8397c3e50396f2be9748bb5eff37dc6cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
using UnityEngine;

public class MipTexMap : MonoBehaviour
{
	private static Texture2D mipFilterTex64;

	private static Texture2D mipFilterTex128;

	private static Texture2D mipFilterTex256;

	private static Texture2D mipFilterTex512;

	private static Texture2D mipFilterTex1024;

	private static Texture2D mipFilterTex2048;

	private static void BuildMipFilterTex(int size)
	{
		size = Mathf.ClosestPowerOfTwo(size);
		Texture2D texture2D = new Texture2D(size, size, TextureFormat.Alpha8, mipmap: true);
		texture2D.anisoLevel = 3;
		texture2D.filterMode = FilterMode.Trilinear;
		texture2D.mipMapBias = 0f;
		for (int i = 0; i < texture2D.mipmapCount; i++)
		{
			int num = size * size;
			Color[] array = new Color[num];
			float num2 = 1f * (float)i / (float)(texture2D.mipmapCount - 1);
			Color color = new Color(num2, num2, num2, num2);
			for (int j = 0; j < num; j++)
			{
				array[j] = color;
			}
			texture2D.SetPixels(array, i);
		}
		texture2D.Apply(updateMipmaps: false, makeNoLongerReadable: true);
		switch (size)
		{
		case 64:
			mipFilterTex64 = texture2D;
			break;
		case 128:
			mipFilterTex128 = texture2D;
			break;
		case 256:
			mipFilterTex256 = texture2D;
			break;
		case 512:
			mipFilterTex512 = texture2D;
			break;
		case 1024:
			mipFilterTex1024 = texture2D;
			break;
		case 2048:
			mipFilterTex2048 = texture2D;
			break;
		default:
			mipFilterTex512 = texture2D;
			break;
		}
	}

	public static Texture2D GetTex(int size)
	{
		size = Mathf.ClosestPowerOfTwo(size);
		switch (size)
		{
		case 64:
			if ((bool)mipFilterTex64)
			{
				return mipFilterTex64;
			}
			BuildMipFilterTex(size);
			return mipFilterTex64;
		case 128:
			if ((bool)mipFilterTex128)
			{
				return mipFilterTex128;
			}
			BuildMipFilterTex(size);
			return mipFilterTex128;
		case 256:
			if ((bool)mipFilterTex256)
			{
				return mipFilterTex256;
			}
			BuildMipFilterTex(size);
			return mipFilterTex256;
		case 512:
			if ((bool)mipFilterTex512)
			{
				return mipFilterTex512;
			}
			BuildMipFilterTex(size);
			return mipFilterTex512;
		case 1024:
			if ((bool)mipFilterTex1024)
			{
				return mipFilterTex1024;
			}
			BuildMipFilterTex(size);
			return mipFilterTex1024;
		case 2048:
			if ((bool)mipFilterTex2048)
			{
				return mipFilterTex2048;
			}
			BuildMipFilterTex(size);
			return mipFilterTex2048;
		default:
			if ((bool)mipFilterTex512)
			{
				return mipFilterTex512;
			}
			BuildMipFilterTex(size);
			return mipFilterTex512;
		}
	}
}