bool Shader::loadAndCompile( const char* acVertexFilename, const char* acFragmentFilename) { char *acResource = 0; uint uiLength = 0; char *acVertexPgmSrc = 0; size_t uiVertexPgmLength = 0; char *acFragmentPgmSrc = 0; size_t uiFragmentPgmLength = 0; FindResourcePath(acVertexFilename, &acResource, &uiLength); LoadTextFromFile(acResource, &acVertexPgmSrc, &uiVertexPgmLength); if(acResource) free(acResource); FindResourcePath(acFragmentFilename, &acResource, &uiLength); LoadTextFromFile(acResource, &acFragmentPgmSrc, &uiFragmentPgmLength); if(acResource) free(acResource); bool bSuccess = compile(acVertexPgmSrc, acFragmentPgmSrc); if(acVertexPgmSrc) free(acVertexPgmSrc); if(acFragmentPgmSrc) free(acFragmentPgmSrc); return bSuccess; }
Ogre::String Utils::FindResourcePath(Ogre::String path, Ogre::String filename) { boost::filesystem::path bpath(path.c_str()); for (boost::filesystem::directory_iterator i(bpath); i != boost::filesystem::directory_iterator(); i++) { Ogre::String file = Ogre::String((*i).path().leaf().c_str()); if (file == filename) return (*i).path().file_string(); if (boost::filesystem::is_directory((*i))) { Ogre::String csearch = FindResourcePath((*i).path().directory_string().c_str(), filename); if (csearch != "") return csearch; } } return ""; }