Guest User

Untitled

a guest
Dec 4th, 2011
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.28 KB | None | 0 0
  1. void
  2.     GraphicsController::_initTerrainTextureArray()
  3. {
  4.     using namespace boost::filesystem;
  5.     using namespace std;
  6.     //open up the texture array directory and load up all the textures
  7.     const Ogre::String textureDir("../materials/textures/texturearray/");
  8.     Ogre::StringVector texNames;
  9.     std::multimap<std::time_t, Ogre::String> resultSet;
  10.     if(exists(textureDir))
  11.     {
  12.         directory_iterator end;
  13.         for(directory_iterator iter(textureDir); iter != end; ++iter)
  14.         {
  15.             if(is_regular_file(*iter))
  16.             {
  17.                 resultSet.insert(std::make_pair(boost::filesystem::last_write_time(iter->path()), iter->path().string()));
  18.             }
  19.         }
  20.     }
  21.  
  22.     TexturePtr tex = TextureManager::getSingleton().createManual("TerrainTextureArrayTemp",
  23.         Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
  24.         Ogre::TEX_TYPE_2D_ARRAY,
  25.         256, 256, texNames.size(),
  26.         Ogre::MIP_UNLIMITED,
  27.         Ogre::PF_R8G8B8A8
  28.         , Ogre::TU_AUTOMIPMAP
  29.         );
  30.     //for(size_t i = 0; i < texNames.size(); ++i)
  31.     for(auto iter = resultSet.begin(); iter != resultSet.begin(); ++iter) //iterate through texture name maps ascendingly by modification time.
  32.     {
  33.         Ogre::LogManager::getSingleton().getLog("App.log")->logMessage("Texture Array Texture: " + texNames[i]);
  34.        
  35.         Ogre::Image terrainTex;
  36.         terrainTex.load(iter->second, "PROJECT_ZOMBIE");
  37.         /*Ogre::TexturePtr terrainTex = Ogre::TextureManager::getSingleton().load(texNames[i],
  38.             "PROJECT_ZOMBIE",
  39.             Ogre::TEX_TYPE_2D);*/
  40.         int numOfMipsArray = tex->getNumMipmaps();
  41.         //int mips = terrainTex.getNumMipmaps();
  42.  
  43.         //numOfMipsArray = std::max(numOfMipsArray, mips);
  44.         for(size_t mip = 0; mip < numOfMipsArray; ++mip)
  45.         {
  46.             Ogre::HardwarePixelBufferSharedPtr pixelBufferTex = tex->getBuffer(0, mip);
  47.             //Ogre::HardwarePixelBufferSharedPtr pixelBufferTerrain = terrainTex->getBuffer();
  48.             const PixelBox& currImage = pixelBufferTex->lock(Ogre::Box(0, 0, i, pixelBufferTex->getHeight(), pixelBufferTex->getHeight(), i + 1), Ogre::HardwareBuffer::HBL_NORMAL);
  49.             //const PixelBox& terrainImage = pixelBufferTerrain->lock(Ogre::Box(0, 0, 0, pixelBufferTerrain->getHeight(), pixelBufferTerrain->getHeight(), 1), Ogre::HardwareBuffer::HBL_NORMAL);
  50.             Ogre::PixelUtil::bulkPixelConversion(terrainTex.getPixelBox(0, mip), currImage);
  51.             //pixelBufferTerrain->unlock();
  52.             pixelBufferTex->unlock();
  53.  
  54.         }
  55.        
  56.         //Ogre::TextureManager::getSingleton().remove(terrainTex->getName());
  57.     }
  58.  
  59.    
  60.  
  61.     Ogre::MaterialPtr mat = static_cast<Ogre::MaterialPtr>(
  62.         Ogre::MaterialManager::getSingleton().getByName("PRJZ/Minecraft2"));
  63.     if(mat.isNull())
  64.         OGRE_EXCEPT(Ogre::Exception::ERR_INVALIDPARAMS, "Material pointer for PRJZ/Minecraft is not valid", "DeferredGraphicsManager::initialize");
  65.     Ogre::TextureUnitState *ts = mat->getTechnique("lighting")->getPass(0)->createTextureUnitState();
  66.     ts->setTextureName(tex->getName());
  67.     //mat->getTechnique("lighting")->getPass(0)->getTextureUnitState("gBuffer1")->setTextureName(tex->getName()); //Disable this fore now and use scripted texture attachment becaues MRTT is not working. We will read diffuse texture in deferred pass.
  68.     //mat->getTechnique("gbuffer")->getPass(0)->getTextureUnitState("gBuffer1")->setTextureName(tex->getName()); //Disable this fore now and use scripted texture attachment becaues MRTT is not working. We will read diffuse texture in deferred pass.
  69. }
  70.  
Advertisement
Add Comment
Please, Sign In to add comment