Je tente de dessiner un RenderTexture
dans un Texture2D
dans le but de l'enregistrer sur le disque. Cette approche a fonctionné dans l'éditeur OSX, ainsi que sur Android.iOS se bloque lors de l'appel Texture2D.readPixels
Je ne vois pas d'erreur dans la console XCode, et mon application devient complètement gelé quand je l'appelle Texture2D.ReadPixels()
Voici un résumé du code:
// declaring variables...
RenderTexture outputTexture;
RenderTextureFormat RTFormat = RenderTextureFormat.ARGB32;
// use an appropriate format for render textures
if(SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGBFloat)){
RTFormat = RenderTextureFormat.ARGBFloat;
}else if(SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGBHalf)){
RTFormat = RenderTextureFormat.ARGBHalf;
}
// create instance of output texture
outputTexture = new RenderTexture (res.x, res.y, 0, RTFormat);
// in Update, draw stuff to outputTexture
Graphics.Blit (outputTexture, canvasTexture);
Graphics.Blit (canvasTexture, outputTexture, material);
// later... user wants to save the image
// draw rendertexture to a Texture2D so we can write to disk
RenderTexture.active = outputTexture;
tmpTexture = new Texture2D (outputTexture.width, outputTexture.height, TextureFormat.ARGB32, false);
tmpTexture.ReadPixels (new Rect (0, 0, outputTexture.width, outputTexture.height), 0, 0, false);
tmpTexture.Apply();
RenderTexture.active = null;
J'ai essayé d'utiliser une variété de RenderTextureFormat
et TextureFormat
, mais rien ne semble fonctionner!
Où appelez-vous ce code? Est-ce dans une fonction personnalisée ou une méthode Unity Callback? –
En outre, sur quel appareil testez-vous? Vérifiez si vous manquez de mémoire. RenderTexture est une méthode coûteuse. –