Saving dynamic textures         Saving the contents of a rendertarget to disk

To save an image, add this function to your code:

void SaveImage(TexturePtr TextureToSave, String filename)
{
     HardwarePixelBufferSharedPtr readbuffer;
     readbuffer = TextureToSave->getBuffer(0, 0);
     readbuffer->lock(HardwareBuffer::HBL_NORMAL );
     const PixelBox &readrefpb = readbuffer->getCurrentLock();    
     uchar *readrefdata = static_cast<uchar*>(readrefpb.data);        
 
     Image img;
     img = img.loadDynamicImage (readrefdata, TextureToSave->getWidth(),
         TextureToSave->getHeight(), TextureToSave->getFormat());    
     img.save(filename);
     
     readbuffer->unlock();
}

Then simply call SaveImage()

e.g SaveImage(texture, "test.png");
where texture is the TexturePtr you have drawn your dynamic texture into.

Practical method with RenderTexture

The class RenderTarget contains a function "writeContentsToFile(string)" which does exactly what you want:

RenderTexture* mRenderTexture = mRoot->getRenderSystem()->createRenderTexture("depthMap", 512, 512, TEX_TYPE_2D, PF_FLOAT16_RGBA );
....
mRenderTexture->writeContentsToFile(filename);

Shortest method

void SaveImage(TexturePtr TextureToSave, String filename)
{
     Image img;
     TextureToSave->convertToImage(img);    
     img.save(filename);
}