I have a texture2D coming in dynamically, and I need to get the size of it.
It comes in as a Texture2D. Originally I was using this to get the byte size:
Profiler.GetRuntimeMemorySize(img);
But this only works within the Editor - I need to to run mainly on iOS. I just need to check how big it is before I commence any hard processing configurations on the texture2D … I don’t want to go ahead with it if the files are over a certain byte size.
Thanks.
Do you need the actual in-memory size? Taking compression into account?
-
If you’re looking for just the raw size it would just be something like width x height x (a value depending on the texture format, most likely 4)
.
That would be the first mipmap level, then loop through Texture2D.mipmapCount
, adding half the size (uh, not half, but whatever factor it’d be reduced by for each level…
I suppose there is potential in-memory padding and aligning and such that the GPU does, but does something like this get you close enough?
-
You can get a native pointer to the texture and potentially use a lower level graphics API call to get the size.
-
One more and it’s definitely hacky - call Texture2D.GetRawTextureData. The length of the returned byte array is the size. Don’t know for sure if that’s compressed data or not.
-
Last one. If you’re saving these textures to disk, you can use System.IO.FileInfo(path).Length
to get the file size. I believe this will work on iOS but not 100% sure.