void UiManager::resizeTexture(const QSize &aSize, const Ogre::MaterialPtr &aMaterial, const Ogre::TexturePtr &aTexture) { assert(!aMaterial.isNull()); assert(!aTexture.isNull()); // get the smallest power of two dimension that is at least as large as the new UI size Ogre::uint newTexWidth = nextHigherPowerOfTwo(aSize.width()); Ogre::uint newTexHeight = nextHigherPowerOfTwo(aSize.height()); if (!aTexture.isNull()) { std::string txtrName = aTexture->getName(); // remove the old texture aTexture->unload(); aMaterial->getTechnique(0)->getPass(0)->removeAllTextureUnitStates(); Ogre::TextureManager::getSingleton().remove(aTexture->getHandle()); Ogre::TexturePtr newTxtr = Ogre::TextureManager::getSingleton().createManual( txtrName, "General", Ogre::TEX_TYPE_2D, newTexWidth, newTexHeight, 0, Ogre::PF_A8R8G8B8, Ogre::TU_DYNAMIC_WRITE_ONLY); // add the new texture Ogre::TextureUnitState* txtrUstate = aMaterial->getTechnique(0)->getPass(0)->createTextureUnitState(txtrName); // adjust it to stay aligned and scaled to the window Ogre::Real txtrUScale = (Ogre::Real)newTexWidth / aSize.width(); Ogre::Real txtrVScale = (Ogre::Real)newTexHeight / aSize.height(); txtrUstate->setTextureScale(txtrUScale, txtrVScale); txtrUstate->setTextureScroll((1 / txtrUScale) / 2 - 0.5, (1 / txtrVScale) / 2 - 0.5); } }
void Ogre2dManager::spriteBltFull( std::string textureName, double x1, double y1, double x2, double y2, double tx1, double ty1, double tx2, double ty2) { Ogre::TexturePtr tp; Ogre2dSprite spr; spr.x1=x1; spr.y1=y1; spr.x2=x2; spr.y2=y2; spr.tx1=tx1; spr.ty1=ty1; spr.tx2=tx2; spr.ty2=ty2; tp=Ogre::TextureManager::getSingleton().getByName(textureName); spr.texHandle=tp->getHandle(); sprites.push_back(spr); }