diff options
author | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
commit | 6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch) | |
tree | b38119d2acf0a982cb67e381f146924b9bfc3b3f /MipTexMap.cs |
+init
Diffstat (limited to 'MipTexMap.cs')
-rw-r--r-- | MipTexMap.cs | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/MipTexMap.cs b/MipTexMap.cs new file mode 100644 index 0000000..57b6abc --- /dev/null +++ b/MipTexMap.cs @@ -0,0 +1,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; + } + } +} |