Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void
- GraphicsController::_initTerrainTextureArray()
- {
- using namespace boost::filesystem;
- using namespace std;
- //open up the texture array directory and load up all the textures
- const Ogre::String textureDir("../materials/textures/texturearray/");
- Ogre::StringVector texNames;
- std::multimap<std::time_t, Ogre::String> resultSet;
- if(exists(textureDir))
- {
- directory_iterator end;
- for(directory_iterator iter(textureDir); iter != end; ++iter)
- {
- if(is_regular_file(*iter))
- {
- resultSet.insert(std::make_pair(boost::filesystem::last_write_time(iter->path()), iter->path().string()));
- }
- }
- }
- TexturePtr tex = TextureManager::getSingleton().createManual("TerrainTextureArrayTemp",
- Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
- Ogre::TEX_TYPE_2D_ARRAY,
- 256, 256, texNames.size(),
- Ogre::MIP_UNLIMITED,
- Ogre::PF_R8G8B8A8
- , Ogre::TU_AUTOMIPMAP
- );
- //for(size_t i = 0; i < texNames.size(); ++i)
- for(auto iter = resultSet.begin(); iter != resultSet.begin(); ++iter) //iterate through texture name maps ascendingly by modification time.
- {
- Ogre::LogManager::getSingleton().getLog("App.log")->logMessage("Texture Array Texture: " + texNames[i]);
- Ogre::Image terrainTex;
- terrainTex.load(iter->second, "PROJECT_ZOMBIE");
- /*Ogre::TexturePtr terrainTex = Ogre::TextureManager::getSingleton().load(texNames[i],
- "PROJECT_ZOMBIE",
- Ogre::TEX_TYPE_2D);*/
- int numOfMipsArray = tex->getNumMipmaps();
- //int mips = terrainTex.getNumMipmaps();
- //numOfMipsArray = std::max(numOfMipsArray, mips);
- for(size_t mip = 0; mip < numOfMipsArray; ++mip)
- {
- Ogre::HardwarePixelBufferSharedPtr pixelBufferTex = tex->getBuffer(0, mip);
- //Ogre::HardwarePixelBufferSharedPtr pixelBufferTerrain = terrainTex->getBuffer();
- const PixelBox& currImage = pixelBufferTex->lock(Ogre::Box(0, 0, i, pixelBufferTex->getHeight(), pixelBufferTex->getHeight(), i + 1), Ogre::HardwareBuffer::HBL_NORMAL);
- //const PixelBox& terrainImage = pixelBufferTerrain->lock(Ogre::Box(0, 0, 0, pixelBufferTerrain->getHeight(), pixelBufferTerrain->getHeight(), 1), Ogre::HardwareBuffer::HBL_NORMAL);
- Ogre::PixelUtil::bulkPixelConversion(terrainTex.getPixelBox(0, mip), currImage);
- //pixelBufferTerrain->unlock();
- pixelBufferTex->unlock();
- }
- //Ogre::TextureManager::getSingleton().remove(terrainTex->getName());
- }
- Ogre::MaterialPtr mat = static_cast<Ogre::MaterialPtr>(
- Ogre::MaterialManager::getSingleton().getByName("PRJZ/Minecraft2"));
- if(mat.isNull())
- OGRE_EXCEPT(Ogre::Exception::ERR_INVALIDPARAMS, "Material pointer for PRJZ/Minecraft is not valid", "DeferredGraphicsManager::initialize");
- Ogre::TextureUnitState *ts = mat->getTechnique("lighting")->getPass(0)->createTextureUnitState();
- ts->setTextureName(tex->getName());
- //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.
- //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.
- }
Advertisement
Add Comment
Please, Sign In to add comment