Mesh* MeshManager::getMesh(string name){ std::map<string, Mesh*>::iterator it; it = meshMap.find(name); if(it != meshMap.end()){//mesh previament carregat LEAK! Mesh* result = new Mesh(it->second, getNewId()); result->generateVBO(); return result; } if(FileSystem::getInstance()->openFile(name) == -1){ logErr("Error TextureManager::getTexture opening %s: ", name.c_str()); return 0; } std::size_t foundMD5 = name.find(".md5"); std::size_t foundOBJ = name.find(".obj"); if (foundOBJ!=std::string::npos){ meshMap[name] = parseOBJ(name, FileSystem::getInstance()->getFileData(name), FileSystem::getInstance()->getFileSize(name)); } else if (foundMD5!=std::string::npos){ meshMap[name] = parseMD5(name, FileSystem::getInstance()->getFileData(name), FileSystem::getInstance()->getFileSize(name)); } else{ FileSystem::getInstance()->destroyFileData(name); return 0; } FileSystem::getInstance()->destroyFileData(name); // printMeshData(meshMap[name]); meshMap[name]->generateVBO(); return meshMap[name]; }
// static std::unique_ptr< OBJData > OBJLoader::loadFile( const std::string& objFilename, bool removeEmptyGroups ) { std::unique_ptr< OBJData > pOBJData( new OBJData ); bool succeeded = parseOBJ( objFilename, pOBJData.get() ); if( !succeeded ) { // Return null. pOBJData.reset(); } if( removeEmptyGroups ) { pOBJData->removeEmptyGroups(); } return pOBJData; }
// static std::shared_ptr< OBJData > OBJLoader::loadFile( QString objFilename ) { int lineNumber = 0; QString line = ""; std::shared_ptr< OBJData > pOBJData( new OBJData ); OBJMaterial* pCurrentMaterial = pOBJData->addMaterial( "" ); // default material name is the empty string OBJGroup* pCurrentGroup = pOBJData->addGroup( "" ); // default group name is the empty string bool succeeded = parseOBJ( objFilename, pOBJData ); if( !succeeded ) { // return null pOBJData.reset(); } return pOBJData; }
ElysiumEngine::Mesh *ElysiumEngine::loadMeshFromObj(const char *filename) { FILE *file = fopen(filename,"rt"); if(!file) return nullptr; Mesh *output = new Mesh(); getObjSize(file,output->vertexCount,output->indexCount); output->vertices = new VertexData[output->vertexCount]; output->indices = new unsigned int[3 * output->indexCount]; parseOBJ(output,file); fclose(file); //print(output); return output; }