Code: Select all
Ogre::TexturePtr Text::getFontTexture(Ogre::FontPtr fp)
{
// Make sure the font is loaded
fp->load();
return
static_cast<Ogre::TexturePtr>
(
Ogre::TextureManager::getSingleton().getByName(fp->getMaterial()->getTechnique(0)->getPass(0)->getTextureUnitState(0)->getTextureName())
);
}
void Text::saveFontTextureToFile(Ogre::FontPtr fp, const Ogre::String& fileName)
{
Ogre::TexturePtr tp = getFontTexture(fp);
// Declare buffer
const size_t buffSize = tp->getSize();
unsigned char *data = OGRE_ALLOC_T(unsigned char,buffSize,Ogre::MEMCATEGORY_GENERAL);
// Clear buffer
memset(data, 0, buffSize);
// Setup Image with correct settings
Ogre::Image i;
i.loadDynamicImage(data, tp->getWidth(), tp->getHeight(), 1, Ogre::PF_R8G8B8A8, true);
// Copy Texture buffer contents to image buffer
Ogre::HardwarePixelBufferSharedPtr buf = tp->getBuffer();
const Ogre::PixelBox destBox = i.getPixelBox();
buf->blitToMemory(destBox);
// Save to disk!
i.save(fileName);
}