Better way to edit RawImage texture data?,Better way to edit a RawImage texture?
Currently our method for editing the underlying texture of a raw image (note not changing which texture, but directly editing the pixels) is as follows:
// Create a series of variables
private RawImage mRawImage;
private Texture mTexture;
private Texture2D mTexture2D;
private RenderTexture mRenderTexture;
//Get the RawImageTexture:
mRawImage = GetComponent<RawImage>();
// In the Update function do this awful monstrosity:
Destroy(mTexture2D);
Destroy(mRenderTexture);
mTexture = mRawImage.texture;
mTexture2d = new Texture2D(mTexture.width, mTexture.height, TextureFormat.RGBA32, false);
mRenderTexture = new RenderTexture(mTexture.width, mTexture.height, 32);
Graphics.Blit(mTexture, mRenderTexture);
RenderTexture.active = mRenderTexture;
mTexture2D.ReadPixels(new Rect(0,0, mRenderTexture.width, mRenderTexture.height),0,0);
// do what ever pixel modifications you want, then:
mTexture2d.Apply();
GetComponent<RawImage>().texture = mTexture2D;
Now obviously this is pretty hideous and resource intensive so surely there has to be a better way of doing it.
There is no obvious way to access the pixel data from a RawImage.
Texture to Texture2D casting doesn't actually really work but RawImage claims to handle a texture
Trying to overwrite the mRenderTexture and mTexture2D during the update so you don't have to call new twice a frame, doesn't work.
I just want to edit a UI element in real time, surely that's not the most uncommon request ever?
I would really appreciate if anyone has any input on this because I have googled till the cows come home and read all of the documentation (it was not super helpful) and this is the best we can get. Cheers.