I’m trying to export a texture that is modified using the Graphics Library during runtime.
private IEnumerator buildPreview(PaintBucket pb){previewTile.SetActive(true); previewCam.gameObject.SetActive(true);
Vector3 sixths = new Vector3(0,60,0);
previewTile.GetComponent<Renderer>().material = palette[pb.index].mat;
pb.preview = new Texture2D(120,72);
//Size is 327 bytes
pb.preview.filterMode = FilterMode.Point;
for(int j = 0; j < 2; j++){
for(int k = 0; k < 3; k++){
previewCam.Render();
Graphics.CopyTexture(preview,0,0,0,0,40,36,pb.preview,0,0,(40*k),(36*j));
pb.preview.IncrementUpdateCount();
previewTile.GetComponent<Transform>().Rotate(sixths, Space.World);}}
//Size somehow remains 327 bytes
previewTile.SetActive(false); previewCam.gameObject.SetActive(false);
StartCoroutine(saveImage(control.dc.direc + previews + palette[pb.index].name + ".png",pb.preview));
pb.copy = new Texture2D(40,36);
pb.copy.filterMode = 0;
pb.setFrame(0);
pb.image.texture = pb.copy;
yield break;
}
public IEnumerator saveImage(string path, Texture2D t){FileStream file = new FileStream(path,FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write);
byte[] bits = t.EncodeToPNG();
print(bits.Length);
Task j = file.WriteAsync(bits,0,bits.Length);
yield return new WaitUntil(() => j.IsCompleted);
yield break;}
I’ve tried copying the data to an additional texture2D object using the graphics library, using Setpixels / GetPixels, using GetRawTextureData, using raw assignment, storing to a RawImage object, and calling Apply().
So far as I can tell, the data doesn’t update CPU-side, and so the texture object (when referenced by the script) doesn’t conform to the changes made by the Graphics Library.
Help?