TextureFormatごとにコンストラクトとGetPixelとSetPixelを総当りしてみた
テストコード
場合によっては普通にキャッチできない例外をはくため、ひたすら「やってみる>例外吐くなら吐かせる」を繰り返します。コンソール荒れますw
[ContextMenu("test")] private void test() { foreach(TextureFormat format in System.Enum.GetValues(typeof(TextureFormat))) { Texture2D tex = null; try { Debug.Log("try create:" + format.ToString()); tex = new Texture2D(1, 1, format, false); Debug.Log("try get pixel:" + format.ToString()); tex.GetPixel(0, 0); Debug.Log("try set pixel:" + format.ToString()); tex.SetPixel(0, 0, new Color()); } finally { if (tex != null) DestroyImmediate(tex); } } }
やってみた結果をまとめますと
TextureFormat test targets.
Alpha8
ARGB4444
RGB24
RGBA32
ARGB32
RGB565
DXT1
DXT5
RGBA4444
PVRTC_RGB2
PVRTC_RGB2
PVRTC_RGBA2
PVRTC_RGBA2
PVRTC_4BPP_RGB
PVRTC_4BPP_RGB
PVRTC_RGBA4
PVRTC_RGBA4
ETC_RGB4
ATC_RGB4
ATC_RGBA8
BGRA32
ATF_RGB_DXT1
ATF_RGBA_JPG
ATF_RGB_JPG
以上の対象にnewとGetPixel()とSetPixel()を繰り返すと、
new Texture2D に失敗するもの
- ATF_RGB_DXT1
Invalid Flash texture
UnityEngine.Texture2D:.ctor(Int32, Int32, TextureFormat, Boolean)
(コンストラクト例外?何が起こっているのやら本日一番のミステリー)
GetPixel() に失敗するもの
- PVRTC_RGB2
Unsupported texture format - needs to be ARGB32, RGBA32, BGRA32, RGB24, Alpha8 or DXT
UnityEngine.Texture2D:GetPixel(Int32, Int32)
SetPixel() に失敗するもの
- ARGB4444
Unsupported texture format - needs to be ARGB32, RGBA32, RGB24 or Alpha8
UnityEngine.Texture2D:SetPixel(Int32, Int32, Color)
ドキュメントにはあまり詳しく書いてませんが、結構いろいろイケますね。ビデオカードとドライバにもよるのかも。
まぁ、でもやっぱりログに表示されている通りROMなら"ARGB32, RGBA32, BGRA32, RGB24, Alpha8 or DXT"、RAMなら" ARGB32, RGBA32, RGB24 or Alpha8"というのが安牌でしょうか。