Question by
heximal · Jun 20, 2021 at 10:26 PM ·
performancetexture2dloading
Unity create large Texture2D is too slow
I'm trying to create texture with size of 4000x4000 (I really need it)
I'm using this code for loading textures from file on disk (not from assets)
public static Texture2D LoadTextureDXT( string path, TextureFormat format, bool mipmap = true ) {
var bytes = File.ReadAllBytes( path );
if (format != TextureFormat.DXT1 && format != TextureFormat.DXT5) throw new Exception("Invalid TextureFormat. Only DXT1 and DXT5 formats are supported by this method.");
var ddsSizeCheck = bytes[4];
if (ddsSizeCheck != 124)
throw new Exception("Invalid DDS DXT texture. Unable to read"); //this header byte should be 124 for DDS image files
var height = bytes[13] * 256 + bytes[12];
var width = bytes[17] * 256 + bytes[16];
int DDSHeaderSize = 128;
var dxtBytes = new byte[bytes.Length - DDSHeaderSize];
Buffer.BlockCopy(bytes, DDSHeaderSize, dxtBytes, 0, bytes.Length - DDSHeaderSize);
Texture2D texture = new Texture2D(width, height, format, false, true);
texture.LoadRawTextureData(dxtBytes);
texture.Apply();
return (texture);
}
And that causes very long execution (about 10 seconds).
Experimentally I figured out that the bottle neck is
Texture2D tex = new Texture2D(4000, 4000, TextureFormat.DXT5, false, true);
(I'm using DDS texture) Is there any way to make things faster? Interesting thing, when I import the same texture (as PNG file) into assets folder and try to load it by
Texture2D tex = Resources.Load<Texture2D>("textureName");
everything works fine and fast. I'm wondering what exactly unity do with PNG file when importing it to assets?
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220613035258im_/https://answers.unity.com/themes/thub/images/avi.jpg)