CVoid COctree::ResetState() { for( CUInt i = 0 ; i < g_scene.size(); i++ ) { for( CUInt j = 0; j < g_scene[i]->m_instanceGeometries.size(); j++ ) { for( CUInt k = 0; k < g_scene[i]->m_instanceGeometries[j]->m_parentTree.size(); k++ ) { g_scene[i]->m_instanceGeometries[j]->m_parentTree[k] = NULL; } if( g_scene[i]->m_instanceGeometries[j]->m_parentTree.size() > 0 ) g_scene[i]->m_instanceGeometries[j]->m_parentTree.clear(); } } ////Detach lights //for( CUInt i = 0 ; i < g_scene.size(); i++ ) //{ // for( CUInt j = 0; j < g_scene[i]->m_instanceGeometries.size(); j++ ) // { // for( CUInt k = 0; k < g_scene[i]->m_instanceGeometries[j]->m_lights.size(); k++ ) // { // g_scene[i]->m_instanceGeometries[j]->m_lights[k] = NULL; // } // if( g_scene[i]->m_instanceGeometries[j]->m_lights.size() > 0 ) // g_scene[i]->m_instanceGeometries[j]->m_lights.clear(); // } //} /////////////// for( CUInt i = 0; i < 8; i++ ) CDelete( m_pSubNode[i] ); g_updateOctree = CTrue; Init(); }
void CPrefabDlg::OnBnClickedNewPrefab() { int nSelected = -1; POSITION p = m_listPrefabPackages.GetFirstSelectedItemPosition(); while (p) { nSelected = m_listPrefabPackages.GetNextSelectedItem(p); } if (nSelected >= 0) { TCHAR szBuffer[1024]; DWORD cchBuf(1024); LVITEM lvi; lvi.iItem = nSelected; lvi.iSubItem = 0; lvi.mask = LVIF_TEXT; lvi.pszText = szBuffer; lvi.cchTextMax = cchBuf; m_listPrefabPackages.GetItem(&lvi); m_selectedPackageName = szBuffer; } else { MessageBox("Please select a package!", "Vanda Engine Error", MB_OK | MB_ICONINFORMATION); return; } m_prefabNameDlg = CNew(CPrefabNameDlg); m_prefabNameDlg->SetInitialData(m_selectedPackageName, "\n", CFalse); if (IDOK == m_prefabNameDlg->DoModal()) InsertItemToPrefabList(m_prefabNameDlg->GetNewName()); CDelete(m_prefabNameDlg); }
CBool CTexture::CreateDDSTexture( CImage * texObj, CDDS * ddsImg ) { CUInt32 tId = 0; glGenTextures(1, &tId ); // Create Nearest Filtered Texture glBindTexture( GL_TEXTURE_2D, tId ); glPixelStorei( GL_UNPACK_ALIGNMENT, 4 ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE ); glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST ); //read the anisotropic data from the file GLfloat m_anisotropy; if( g_options.m_anisotropy != 0 ) { if( GLEW_EXT_texture_filter_anisotropic ) { switch( g_options.m_anisotropy ) { case 2: m_anisotropy = 2.f; break; case 4: m_anisotropy = 4.f; break; case 8: m_anisotropy = 8.f; break; case 16: m_anisotropy = 16.f; break; } GLfloat m_maxAnisotropy; glGetFloatv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &m_maxAnisotropy ); if( m_anisotropy > m_maxAnisotropy ) m_anisotropy = m_maxAnisotropy; glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, m_anisotropy); } } //PrintInfo( _T( "Creating Texture...\n" ) ); if ((! ddsImg->VerticalFlip()) || (! ddsImg->UploadTexture())) return false; CDelete( ddsImg ); //PrintInfo( _T( "Texture Created Successfully\n"), COLOR_WHITE ); texObj->SetId( tId ); glBindTexture( GL_TEXTURE_2D, 0 ); return CTrue; }
void CPrefabDlg::OnBnClickedNewPackage() { m_prefabNameDlg = CNew(CPrefabNameDlg); m_prefabNameDlg->SetInitialData("\n", "\n", CTrue); if( IDOK == m_prefabNameDlg->DoModal() ) InsertItemToPackageList(m_prefabNameDlg->GetNewName()); CDelete(m_prefabNameDlg); }
CVoid CSkyDome::Destroy() { CDeleteData( m_vertexBuffer ); //CDeleteData( m_colorBuffer ); CDeleteData( m_indexBuffer ); CDeleteData( m_texCoordBuffer ); //CDeleteData( m_skyMapTexCoordBuffer ); CDelete( m_image ); }
void Between2DeleteAndInsert(double T, int i, int j, bool pass){ int tiafter = 0; int tjafter = 0; int dtiafter = 0; int dtjafter = 0; double ticost = 0; double tjcost = 0; double bcost = INF; bool ok = false; int pi,pj; if(!isTabu(i,path[j].route) && !isTabu(j,path[i].route) && (routeDemand[path[i].route] + d[j] - d[i] <= Q) && (routeDemand[path[j].route] + d[i] - d[j] <= Q)){ double tcost; tcost = cost; pi = path[i].route; pj = path[j].route; CDelete(i,dtiafter); //delete i and in dtiafter save a place after which was i CDelete(j,dtjafter); tcost -= cost; //saved cost after deleting if(CTryInsert(i, pj, tiafter, ticost) && CTryInsert(j, pi, tjafter, tjcost)){ bcost = - tcost + ticost + tjcost; ok = true; } CInsert(i, pi, dtiafter); CInsert(j, pj, dtjafter); } else return; if(!ok) return; double score = -bcost; if(!(score - EPS > 0 || (T && Feasable(score, T)) || pass)) return; int null; CDelete(i,null); CDelete(j,null); CInsert(i, pj, tiafter); CInsert(j, pi, tjafter); USED[4]++; //cost -= score; }
//удалить элемент item из списка, возвращается указатель на предыдущий элемент, //если удалялся первый элемент возвращается nullptr Type *Delete(Type *item) {return (Type*)CDelete(item);}
CVoid CScene::Destroy() { NxScene* tempScene = gPhysXscene/*gPhysicsSDK->getScene(i)*/; if(tempScene && !g_clickedNew && !g_clickedOpen) { for( CUInt i = 0; i < m_instanceGeometries.size(); i++ ) { CInstanceGeometry* m_instanceGeo = m_instanceGeometries[i]; if( tempScene ) { for( CUInt j = 0; j < tempScene->getNbActors(); j++ ) { CChar actorName[MAX_NAME_SIZE]; if( !tempScene->getActors()[j]->getName() ) continue; Cpy( actorName, tempScene->getActors()[j]->getName() ); if( !Cmp(m_instanceGeo->m_physXName, "\n" ) && Cmp( actorName, m_instanceGeo->m_physXName ) ) { for(CInt nItem =0 ; nItem < ex_pVandaEngine1Dlg->m_listBoxPhysXElements.GetItemCount(); nItem++) { CString strText = ex_pVandaEngine1Dlg->m_listBoxPhysXElements.GetItemText(nItem, 0); char charPtr[MAX_NAME_SIZE]; sprintf(charPtr, "%s", strText); if(Cmp( m_instanceGeo->m_physXName, charPtr ) ) { ex_pVandaEngine1Dlg->m_listBoxPhysXElements.DeleteItem(nItem); ex_pVandaEngine1Dlg->SortPhysXList(); } } tempScene->releaseActor( *tempScene->getActors()[j] ); g_multipleView->m_nx->gControllers->reportSceneChanged(); m_instanceGeo->m_hasPhysX = CFalse; Cpy( m_instanceGeo->m_physXName, "\n" ); } } } } } //while(!m_cfxMaterials.empty()) //{ //std::map<std::string, cfxMaterial*>::iterator iter = m_cfxMaterials.begin(); //CDelete(iter->second); //m_cfxMaterials.erase(iter); //} //m_cfxEffects.clear(); //while(!m_cfxEffects.empty()) //{ //std::map<std::string, cfxEffect*>::iterator iter = m_cfxEffects.begin(); //CDelete(iter->second); //m_cfxEffects.erase(iter); //} //m_cfxEffects.clear(); //delete all the geometries m_textureList.clear(); //save functions m_prefabList.clear(); //save functions if (g_editorMode == eMODE_PREFAB) { while (!m_geometries.empty()) { CDelete(m_geometries[0]); m_geometries.erase(m_geometries.begin()); } m_geometries.clear(); } m_instanceGeometries.clear(); //m_instanceControllers.clear(); while(!m_lightInstances.empty()) { CDelete(m_lightInstances[0]); m_lightInstances.erase(m_lightInstances.begin()); } while(!m_lights.empty()) { CDelete( m_lights[0] ); m_lights.erase(m_lights.begin()); } while(!m_cameraInstances.empty()) { for( CUInt size = 0; size < g_cameraInstances.size(); size++ ) { if( Cmp( m_cameraInstances[0]->m_abstractCamera->GetName(), g_cameraInstances[size]->m_abstractCamera->GetName() ) ) { if( g_render.GetActiveInstanceCamera() == g_cameraInstances[size] ) { if (g_multipleView && g_render.GetDefaultInstanceCamera()) { g_render.SetActiveInstanceCamera(g_render.GetDefaultInstanceCamera()); g_currentCameraType = eCAMERA_DEFAULT_FREE; g_multipleView->m_lockInput = CFalse; } else { g_render.SetActiveInstanceCamera(NULL); } } g_cameraInstances.erase( g_cameraInstances.begin() + size ); } } CDelete(m_cameraInstances[0]); m_cameraInstances.erase(m_cameraInstances.begin()); } while(!m_cameras.empty()) { CDelete( m_cameras[0] ); m_cameras.erase(m_cameras.begin()); } while(!m_controllers.empty()) { CDelete( m_controllers[0] ); m_controllers.erase(m_controllers.begin()); } //Delete all the nodes CDelete( m_sceneRoot ); m_nodes.clear(); //Clear all the images //for( std::vector<CImage*>::iterator it = m_images.begin(); it != m_images.end(); it++ ) //{ // CDelete( *it ); //} //Clear the vector objects m_images.clear(); //clear all the effects for( std::vector<CEffect*>::iterator it = m_effects.begin(); it != m_effects.end(); it++ ) { CDelete( *it ); } //Clear the vector objects m_effects.clear(); for( std::vector<CMaterial*>::iterator it = m_materials.begin(); it != m_materials.end(); it++ ) { CDelete( *it ); } //Clear the vector objects m_materials.clear(); for( std::vector<CAnimation*>::iterator it = m_animations.begin(); it != m_animations.end(); it++ ) { CDelete( *it ); } //Clear the vector objects m_animations.clear(); for( std::vector<CAnimationClip*>::iterator it = m_animationClips.begin(); it != m_animationClips.end(); it++ ) { CDelete( *it ); } //Clear the vector objects m_animationClips.clear(); }
void CPrefabDlg::OnBnClickedRenamePackage() { int nSelected = -1; TCHAR szBuffer[1024]; POSITION p = m_listPrefabPackages.GetFirstSelectedItemPosition(); while (p) { nSelected = m_listPrefabPackages.GetNextSelectedItem(p); } if (nSelected >= 0) { DWORD cchBuf(1024); LVITEM lvi; lvi.iItem = nSelected; lvi.iSubItem = 0; lvi.mask = LVIF_TEXT; lvi.pszText = szBuffer; lvi.cchTextMax = cchBuf; m_listPrefabPackages.GetItem(&lvi); m_selectedPackageName = szBuffer; if (Cmp(szBuffer, "Vanda_Basics")) { MessageBox("You cannot rename this package", "Vanda Engine Error", MB_OK | MB_ICONINFORMATION); return; } } else { MessageBox("Please select an item!", "Vanda Engine Error", MB_OK | MB_ICONINFORMATION); return; } CChar currentPackageName[MAX_NAME_SIZE]; sprintf(currentPackageName, "%s", szBuffer); if (Cmp(g_currentPackageName, currentPackageName)) { MessageBox("current open prefab belongs to selected package. Please close current prefab scene and try again.", "Vanda Engine Error", MB_OK | MB_ICONERROR); return; } //then fill it with the VScenes of the selected project for (CUInt i = 0; i < g_projects.size(); i++) { for (CUInt j = 0; j < g_projects[i]->m_sceneNames.size(); j++) { //find pkg file CChar pkgPath[MAX_NAME_SIZE]; CChar sceneWithoutDot[MAX_NAME_SIZE]; Cpy(sceneWithoutDot, g_projects[i]->m_sceneNames[j].c_str()); GetWithoutDot(sceneWithoutDot); sprintf(pkgPath, "%s%s%s%s%s", g_projectsPath, g_projects[i]->m_name, "/", sceneWithoutDot, "/packages.pkg"); //copy package names FILE *PackageFilePtr; PackageFilePtr = fopen(pkgPath, "rb"); if (!PackageFilePtr) { CChar temp[MAX_NAME_SIZE]; sprintf(temp, "%s%s%s", "Couldn't open the file '", pkgPath, "' to save data"); MessageBox(temp, "Vanda Engine Error", MB_OK); ReleaseCapture(); PrintInfo("Rename failed.", COLOR_RED); return; } CUInt size = -1; fread(&size, sizeof(CUInt), 1, PackageFilePtr); for (CUInt k = 0; k < size; k++) { CChar name[MAX_NAME_SIZE]; CChar package_name[MAX_NAME_SIZE]; CChar prefab_name[MAX_NAME_SIZE]; //write prefab data fread(name, sizeof(CChar), MAX_NAME_SIZE, PackageFilePtr); fread(package_name, sizeof(CChar), MAX_NAME_SIZE, PackageFilePtr); fread(prefab_name, sizeof(CChar), MAX_NAME_SIZE, PackageFilePtr); if (Cmp(package_name, m_selectedPackageName.c_str())) { CChar packageName[MAX_NAME_SIZE]; sprintf(packageName, "This package is used by %s/%s.\nYou can not rename this package.", g_projects[i]->m_name, g_projects[i]->m_sceneNames[j].c_str()); MessageBox(packageName, "Vanda Engine Error", MB_OK | MB_ICONERROR); fclose(PackageFilePtr); return; } } fclose(PackageFilePtr); } } m_prefabNameDlg = CNew(CPrefabNameDlg); m_prefabNameDlg->SetInitialData(m_selectedPackageName, "\n", CTrue, CTrue); if (IDOK == m_prefabNameDlg->DoModal()) { m_listPrefabPackages.SetItemText(nSelected, 0, m_prefabNameDlg->GetNewName()); CChar PackagePath[MAX_NAME_SIZE]; HRESULT doc_result_package = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, PackagePath); if (doc_result_package != S_OK) { PrintInfo("\nCouldn't get the documents folder to write data", COLOR_RED); return; } else { Append(PackagePath, "/Vanda/Packages/"); } CChar old_path[MAX_NAME_SIZE]; CChar new_path[MAX_NAME_SIZE]; sprintf(old_path, "%s%s", PackagePath, szBuffer); sprintf(new_path, "%s%s", PackagePath, m_prefabNameDlg->GetNewName()); rename(old_path, new_path); //rename vpf files for (CUInt i = 0; i < g_prefabPackagesAndNames.size(); i++) { if (Cmp(g_prefabPackagesAndNames[i].front().c_str(), m_prefabNameDlg->GetNewName())) { for (CUInt j = 0; j < g_prefabPackagesAndNames[i].size(); j++) { if (j == 0)continue; CChar vpfOldPath[MAX_NAME_SIZE]; sprintf(vpfOldPath, "%s%s%s%s%s%s%s%s%s", PackagePath, g_prefabPackagesAndNames[i].front().c_str(), "/", g_prefabPackagesAndNames[i][j].c_str(), "/", szBuffer, "_", g_prefabPackagesAndNames[i][j].c_str(), ".vpf"); CChar vpfNewPath[MAX_NAME_SIZE]; sprintf(vpfNewPath, "%s%s%s%s%s%s%s%s%s", PackagePath, g_prefabPackagesAndNames[i].front().c_str(), "/", g_prefabPackagesAndNames[i][j].c_str(), "/", g_prefabPackagesAndNames[i].front().c_str(), "_", g_prefabPackagesAndNames[i][j].c_str(), ".vpf"); rename(vpfOldPath, vpfNewPath); } break; } } //rename the contents of PKG folder as well CChar PKG_old[MAX_URI_SIZE]; CChar PKG_new[MAX_URI_SIZE]; sprintf(PKG_old, "%s%s%s%s", PackagePath, "PKG/", szBuffer, ".pkg"); sprintf(PKG_new, "%s%s%s%s", PackagePath, "PKG/", m_prefabNameDlg->GetNewName(), ".pkg"); rename(PKG_old, PKG_new); } CDelete(m_prefabNameDlg); }
COctree::~COctree() { for( CUInt i = 0; i < 8; i++ ) CDelete( m_pSubNode[i] ); }
CVoid COctree::SplitNode8( COctree* parent ) { for( CUInt i = 0; i < 8; i++ ) { CDelete( m_pSubNode[i] ); m_pSubNode[i] = CNew( COctree ); m_pSubNode[i]->m_pParent = parent; m_pSubNode[i]->SetLevel( m_level + 1 ); //eTOP_RIGHT_FRONT if( i == eTOP_RIGHT_FRONT ) { m_pSubNode[i]->SetDimentions( m_center, m_maxAABB ); CChar temp_name[MAX_NAME_SIZE]; sprintf( temp_name, "%s%i", "octree_eTOP_RIGHT_FRONT_level_", m_pSubNode[i]->m_level ); m_pSubNode[i]->SetName( temp_name ); } else if( i == eBOTTOM_RIGHT_FRONT ) { CVec3f temp_min( m_center.x, m_center.y, m_minAABB.z ); CVec3f temp_max( m_maxAABB.x, m_maxAABB.y, m_center.z ); m_pSubNode[i]->SetDimentions( temp_min, temp_max ); CChar temp_name[MAX_NAME_SIZE]; sprintf( temp_name, "%s%i", "octree_eBOTTOM_RIGHT_FRONT_level_", m_pSubNode[i]->m_level ); m_pSubNode[i]->SetName( temp_name ); } else if( i == eBOTTOM_LEFT_BACK ) { m_pSubNode[i]->SetDimentions( m_minAABB, m_center ); CChar temp_name[MAX_NAME_SIZE]; sprintf( temp_name, "%s%i", "octree_eBOTTOM_LEFT_BACK_level_", m_pSubNode[i]->m_level ); m_pSubNode[i]->SetName( temp_name ); } else if( i == eTOP_LEFT_BACK ) { CVec3f temp_min( m_minAABB.x, m_minAABB.y, m_center.z ); CVec3f temp_max( m_center.x, m_center.y, m_maxAABB.z ); m_pSubNode[i]->SetDimentions( temp_min, temp_max ); CChar temp_name[MAX_NAME_SIZE]; sprintf( temp_name, "%s%i", "octree_eTOP_LEFT_BACK_level_", m_pSubNode[i]->m_level ); m_pSubNode[i]->SetName( temp_name ); } else if( i == eBOTTOM_RIGHT_BACK ) { CVec3f temp_min( m_center.x, m_minAABB.y, m_minAABB.z ); CVec3f temp_max( m_maxAABB.x, m_center.y, m_center.z ); m_pSubNode[i]->SetDimentions( temp_min, temp_max ); CChar temp_name[MAX_NAME_SIZE]; sprintf( temp_name, "%s%i", "octree_eBOTTOM_RIGHT_BACK_level_", m_pSubNode[i]->m_level ); m_pSubNode[i]->SetName( temp_name ); } else if( i == eTOP_RIGHT_BACK ) { CVec3f temp_min( m_center.x, m_minAABB.y, m_center.z ); CVec3f temp_max( m_maxAABB.x, m_center.y, m_maxAABB.z ); m_pSubNode[i]->SetDimentions( temp_min, temp_max ); CChar temp_name[MAX_NAME_SIZE]; sprintf( temp_name, "%s%i", "octree_eTOP_RIGHT_BACK_level_", m_pSubNode[i]->m_level ); m_pSubNode[i]->SetName( temp_name ); } else if( i == eBOTTOM_LEFT_FRONT ) { CVec3f temp_min( m_minAABB.x, m_center.y, m_minAABB.z ); CVec3f temp_max( m_center.x, m_maxAABB.y, m_center.z ); m_pSubNode[i]->SetDimentions( temp_min, temp_max ); CChar temp_name[MAX_NAME_SIZE]; sprintf( temp_name, "%s%i", "octree_eBOTTOM_LEFT_FRONT_level_", m_pSubNode[i]->m_level ); m_pSubNode[i]->SetName( temp_name ); } else if( i == eTOP_LEFT_FRONT ) { CVec3f temp_min( m_minAABB.x, m_center.y, m_center.z ); CVec3f temp_max( m_center.x, m_maxAABB.y, m_maxAABB.z ); m_pSubNode[i]->SetDimentions( temp_min, temp_max ); CChar temp_name[MAX_NAME_SIZE]; sprintf( temp_name, "%s%i", "octree_eTOP_LEFT_FRONT_level_", m_pSubNode[i]->m_level ); m_pSubNode[i]->SetName( temp_name ); } m_pSubNode[i]->AttachGeometriesToNode(); } }
CVoid CScene::Destroy() { NxScene* tempScene = gPhysXscene/*gPhysicsSDK->getScene(i)*/; if(tempScene && !g_clickedNew && !g_clickedOpen) { for( CUInt i = 0; i < m_instanceGeometries.size(); i++ ) { CInstanceGeometry* m_instanceGeo = m_instanceGeometries[i]; if( tempScene ) { for( CUInt j = 0; j < tempScene->getNbActors(); j++ ) { CChar actorName[MAX_URI_SIZE]; if( !tempScene->getActors()[j]->getName() ) continue; Cpy( actorName, tempScene->getActors()[j]->getName() ); if( !Cmp(m_instanceGeo->m_physXName, "\n" ) && Cmp( actorName, m_instanceGeo->m_physXName ) ) { tempScene->releaseActor( *tempScene->getActors()[j] ); g_nx->gControllers->reportSceneChanged(); m_instanceGeo->m_hasPhysX = CFalse; Cpy( m_instanceGeo->m_physXName, "\n" ); } } } } } //while(!m_cfxMaterials.empty()) //{ // std::map<std::string, cfxMaterial*>::iterator iter = m_cfxMaterials.begin(); // CDelete(iter->second); // m_cfxMaterials.erase(iter); //} //m_cfxEffects.clear(); //while(!m_cfxEffects.empty()) //{ // std::map<std::string, cfxEffect*>::iterator iter = m_cfxEffects.begin(); // CDelete(iter->second); // m_cfxEffects.erase(iter); //} //m_cfxEffects.clear(); //delete all the geometries //while(!m_geometries.empty()) //{ // CDelete( m_geometries[0] ); // m_geometries.erase( m_geometries.begin() ); //} //m_geometries.clear(); m_instanceGeometries.clear(); while(!m_lightInstances.empty()) { CDelete(m_lightInstances[0]); m_lightInstances.erase(m_lightInstances.begin()); } while(!m_lights.empty()) { CDelete( m_lights[0] ); m_lights.erase(m_lights.begin()); } while(!m_cameraInstances.empty()) { for( CUInt size = 0; size < g_cameraInstances.size(); size++ ) { if( Cmp( m_cameraInstances[0]->m_abstractCamera->GetName(), g_cameraInstances[size]->m_abstractCamera->GetName() ) ) { if( g_render.GetActiveInstanceCamera() == g_cameraInstances[size] ) { if (g_main && g_render.GetDefaultInstanceCamera()) { g_render.SetActiveInstanceCamera(g_render.GetDefaultInstanceCamera()); g_currentCameraType = eCAMERA_DEFAULT_FREE; g_main->m_lockInput = CFalse; } else { g_render.SetActiveInstanceCamera(NULL); } } g_cameraInstances.erase( g_cameraInstances.begin() + size ); } } CDelete(m_cameraInstances[0]); m_cameraInstances.erase(m_cameraInstances.begin()); } while(!m_cameras.empty()) { CDelete( m_cameras[0] ); m_cameras.erase(m_cameras.begin()); } while(!m_controllers.empty()) { CDelete( m_controllers[0] ); m_controllers.erase(m_controllers.begin()); } //Delete all the nodes CDelete( m_sceneRoot ); m_nodes.clear(); //Clear all the images //for( std::vector<CImage*>::iterator it = m_images.begin(); it != m_images.end(); it++ ) //{ // CDelete( *it ); //} //Clear the vector objects m_images.clear(); //clear all the effects for( std::vector<CEffect*>::iterator it = m_effects.begin(); it != m_effects.end(); it++ ) { CDelete( *it ); } //Clear the vector objects m_effects.clear(); for( std::vector<CMaterial*>::iterator it = m_materials.begin(); it != m_materials.end(); it++ ) { CDelete( *it ); } //Clear the vector objects m_materials.clear(); for( std::vector<CAnimation*>::iterator it = m_animations.begin(); it != m_animations.end(); it++ ) { CDelete( *it ); } //Clear the vector objects m_animations.clear(); for( std::vector<CAnimationClip*>::iterator it = m_animationClips.begin(); it != m_animationClips.end(); it++ ) { CDelete( *it ); } //Clear the vector objects m_animationClips.clear(); }
//CBool CTexture::LoadTargaTexture( CImage * texObj, CChar* name, CChar* sceneFileName ) //{ // //attache the sceneFileName path( without the dea file ) to the texture name // CChar pathName[MAX_NAME_SIZE]; // // if( sceneFileName ) //To deal with COLLADA files. // { // CChar * texName = GetAfterPath( name ); //don't know if it's required? Maybe the name in collada file has no path // //strcpy( pathName , sceneFileName ); // //CChar *removeExtra = GetAfterPath( pathName ); // //removeExtra[0] = 0; // //strcat( pathName, texName ); // //save functions. it should be copies in WIN32 Project as well // CChar g_currentVSceneNameWithoutDot[MAX_NAME_SIZE]; // Cpy( g_currentVSceneNameWithoutDot, g_currentVSceneName ); // GetWithoutDot( g_currentVSceneNameWithoutDot ); // // sprintf( pathName, "%s%s%s%s", "assets/vscenes/", g_currentVSceneNameWithoutDot, "/Textures/", texName ); // // } // else //To load independent targa files(not specified in a collada file ) // strcpy( pathName, name ); // // ILuint imageId; // ilGenImages(1, &imageId); // ilBindImage(imageId); // // PrintInfo( _T( "\nReading Image : " ) ); // PrintInfo( _T( "'" ) + CString( pathName ) + _T("'"), COLOR_RED_GREEN ); // // // Read in the image file into DevIL. // if (!ilLoadImage(pathName)) { // // ERROR // ilDeleteImages(1, &imageId); // CChar temp[MAX_NAME_SIZE]; // sprintf( temp, "\nError! CTexture::LoadTargaTexture > Couldn't load the targa file: '%s'", pathName ); // PrintInfo( temp, COLOR_RED ); // numErrors += 1; // // return false; // } // else { // texObj->SetWidth( ilGetInteger(IL_IMAGE_WIDTH) ); // texObj->SetHeight( ilGetInteger(IL_IMAGE_HEIGHT) ); // // CUChar* imageData; // CInt imageSize; // // imageSize = ilGetInteger(IL_IMAGE_WIDTH) * ilGetInteger(IL_IMAGE_HEIGHT) * ilGetInteger(IL_IMAGE_CHANNELS); // imageData = (CUChar*)malloc( imageSize ); // // if( ilGetInteger(IL_IMAGE_CHANNELS) == 3 ) // texObj->SetFormat( TGA_TRUECOLOR_24 ); // else if ( ilGetInteger(IL_IMAGE_CHANNELS) == 4 ) // texObj->SetFormat( TGA_TRUECOLOR_32 ); // // memcpy( imageData , ilGetData() , imageSize ); // texObj->SetImageData( imageData ); // ilDeleteImages(1, &imageId); // } // PrintInfo( "\nCreating Texture '" ); // PrintInfo(pathName, COLOR_RED_GREEN); // PrintInfo( "' "); // // CreateTargaTexture( texObj ); // // return CTrue; //} // CBool CTexture::LoadDDSTexture( CImage * texObj, CChar* name, CChar* sceneFileName, CBool reportError ) { //attache the sceneFileName path( without the dea file ) to the texture name CChar pathName[MAX_NAME_SIZE]; if( sceneFileName ) //To deal with COLLADA files. { CChar * texName = NULL; if( g_useOriginalPathOfDAETextures || g_updateTextureViaEditor) { texName = CNewData(CChar,MAX_NAME_SIZE); Cpy( texName, name ); } else { texName = GetAfterPath( name ); } GetWithoutDot( texName); Append( texName, ".dds" ); //replace %20 with space using std::string std::string s(texName); size_t i = 0; for (;;) { i = s.find("%20", i); if (i == string::npos) { break; } s.replace(i, 3, " "); } if( g_useOriginalPathOfDAETextures || g_updateTextureViaEditor) { s.begin(); size_t i = 0; for (;;) { i = s.find("file:/", i); if (i == string::npos) { break; } s.replace(i, 6, ""); } } strcpy(texName, s.c_str()); if( g_useOriginalPathOfDAETextures || g_updateTextureViaEditor) { strcpy( pathName, texName ); CDelete(texName); } else { CChar g_currentVSceneNameWithoutDot[MAX_NAME_SIZE]; Cpy( g_currentVSceneNameWithoutDot, g_currentVSceneName ); GetWithoutDot( g_currentVSceneNameWithoutDot ); sprintf( pathName, "%s%s%s%s", g_VScenePath, g_currentVSceneNameWithoutDot, "/Textures/", texName ); } } else //To load independent dds files(not specified in a collada file ) strcpy( pathName, name ); ifstream file(pathName, ios::binary); if (! file ) { if( reportError ) { CChar temp[MAX_NAME_SIZE]; sprintf( temp, "\nError! CTexture::LoadDDSTexture > Couldn't load the dds file: '%s'", pathName ); PrintInfo( temp, COLOR_RED ); numErrors += 1; } return false; } CDDS *m_ddsImage = CNew( CDDS ); if (! m_ddsImage->LoadFile(file) ) { if( reportError ) { CChar temp[MAX_NAME_SIZE]; sprintf( temp, "\nError! CTexture::LoadDDSTexture > Couldn't load the dds file: '%s'", pathName ); PrintInfo( temp, COLOR_RED ); numErrors += 1; } return false; } texObj->SetWidth( (CInt32)m_ddsImage->GetWidth() ); texObj->SetHeight( (CInt32)m_ddsImage->GetHeight() ); if( m_ddsImage->m_alphaChannel) texObj->SetFormat(TGA_TRUECOLOR_32); else texObj->SetFormat(TGA_TRUECOLOR_24); PrintInfo( "\nCreating Texture ' " ); PrintInfo(pathName, COLOR_RED_GREEN); PrintInfo( " '"); CreateDDSTexture( texObj, m_ddsImage ); return CTrue; }