// Dds_container.cpp : implementation file // #include "stdafx.h" #include "worldcreator.h" #include "Dds_container.h" #include "selectFolderDialog.h" #include "CEffScript.h" #include "ConvertTexture.h" #include "MeshObject.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDds_container dialog CDds_container::CDds_container(CWnd* pParent /*=NULL*/) : CDialog(CDds_container::IDD, pParent) { //{{AFX_DATA_INIT(CDds_container) m_Edit = _T(""); m_Radio = -1; m_Radio2 = -1; m_Radio3 = -1; m_bDivTexture = FALSE; //}}AFX_DATA_INIT } void CDds_container::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDds_container) DDX_Control(pDX, IDC_EDIT, m_econtrol); DDX_Text(pDX, IDC_EDIT, m_Edit); DDX_Radio(pDX, IDC_RADIO1, m_Radio); DDX_Radio(pDX, IDC_RADIO3, m_Radio2); DDX_Radio(pDX, IDC_RADIO8, m_Radio3); DDX_Check(pDX, IDC_CHECK_LOWTEX, m_bDivTexture); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDds_container, CDialog) //{{AFX_MSG_MAP(CDds_container) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_EN_CHANGE(IDC_EDIT, OnChangeEdit) ON_BN_CLICKED(IDC_BUTTON_CONVERTLOWHARDWARE, OnButtonConvertlowhardware) ON_BN_CLICKED(IDC_ESF, OnEsf) ON_BN_CLICKED(IDC_BUTTON_TOTALTEXTURECONVERT, OnButtonTotaltextureconvert) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) ON_BN_CLICKED(IDC_BUTTON_DDS2TGA, OnButtonDds2tga) ON_BN_CLICKED(IDC_BUTTON_BUMPGENERATE, OnButtonBumpgenerate) ON_BN_CLICKED(IDC_BUTTON_TGA2DDS, OnButtonTga2dds) ON_BN_CLICKED(IDC_MAPINFOCONV, OnMapinfoconv) ON_BN_CLICKED(IDC_DDSHEADER, OnDdsheader) ON_BN_CLICKED(IDC_BUTTONESFINFO, OnButtonesfinfo) ON_BN_CLICKED(IDC_BUTTON_CONVERTMESH, OnButtonConvertmesh) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDds_container message handlers void CDds_container::OnButton1() { char str[] = "BMP ÆÄÀÏ(*.bmp) |*.bmp| ¸ðµçÆÄÀÏ(*.*)|*.*||"; UpdateData(true); if(m_Radio ==0) { // TODO: Add your control notification handler code here CString strFilter = str; CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this); filedia.DoModal(); m_Edit=filedia.GetFileName(); } else if(m_Radio == 1) { CSelectFolderDialog SelectFolderDlg(TRUE, "C:\\", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, this); if(SelectFolderDlg.DoModal()!=IDOK) { return; } m_Edit=SelectFolderDlg.GetSelectedPath(); } else MessageBox("File or Directory must select."); UpdateData(false); } void CDds_container::OnChangeEdit() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here } void CDds_container::Compress() { switch(m_Radio2) { //DXT1 case 0: ChangeFormat(base,D3DFMT_DXT1, &ptexNew); break; //DXT2 case 1: ChangeFormat(base,D3DFMT_DXT2, &ptexNew); break; //DXT3 case 2: ChangeFormat(base,D3DFMT_DXT3, &ptexNew); break; //DXT4 case 3: ChangeFormat(base,D3DFMT_DXT4, &ptexNew); break; //DXT5 case 4: ChangeFormat(base,D3DFMT_DXT5, &ptexNew); break; case 5: ChangeFormat(base,D3DFMT_A4R4G4B4,&ptexNew); break; } ReleasePpo(&base); base = ptexNew; if(m_Radio3 != 0) Mipmap(); } void CDds_container::Mipmap() { LONG lwTempH; LONG lwTempW; LONG lwPowsW; LONG lwPowsH; LPDIRECT3DTEXTURE8 pddsNew = NULL; D3DFORMAT fmt; HRESULT hr; LPDIRECT3DDEVICE8 pd3ddev = BaseGraphicsLayer::GetDevice(); LPDIRECT3DTEXTURE8 pmiptex = NULL; LPDIRECT3DTEXTURE8 pmiptexNew = NULL; LPDIRECT3DCUBETEXTURE8 pcubetexNew = NULL; LPDIRECT3DVOLUMETEXTURE8 pvoltexNew = NULL; LPDIRECT3DSURFACE8 psurfSrc; LPDIRECT3DSURFACE8 psurfDest; // LPDIRECT3DVOLUME8 pvolSrc; // LPDIRECT3DVOLUME8 pvolDest; pmiptex = (LPDIRECT3DTEXTURE8)base; D3DSURFACE_DESC sd; pmiptex->GetLevelDesc(0, &sd); fmt = sd.Format; lwTempW = m_dwWidth; lwTempH = m_dwHeight; lwPowsW = 0; lwPowsH = 0; while (lwTempW > 0) { lwPowsW++; lwTempW = lwTempW / 2; } while (lwTempH > 0) { lwPowsH++; lwTempH = lwTempH / 2; } m_numMips = lwPowsW > lwPowsH ? lwPowsW : lwPowsH; // Create destination mipmap surface - same format as source hr = pd3ddev->CreateTexture(m_dwWidth, m_dwHeight, m_numMips, 0, fmt, D3DPOOL_MANAGED, &pmiptexNew); hr = pmiptex->GetSurfaceLevel(0, &psurfSrc); hr = pmiptexNew->GetSurfaceLevel(0, &psurfDest); hr = D3DXLoadSurfaceFromSurface(psurfDest, NULL, NULL, psurfSrc, NULL, NULL, D3DX_FILTER_TRIANGLE, 0); ReleasePpo(&psurfSrc); ReleasePpo(&psurfDest); hr = D3DXFilterTexture(pmiptexNew, NULL, 0, D3DX_FILTER_TRIANGLE); ReleasePpo(&base); base = pmiptexNew; /* if (m_ptexNew != NULL) { D3DSURFACE_DESC sd; ((LPDIRECT3DCUBETEXTURE8)m_ptexNew)->GetLevelDesc(0, &sd); fmt = sd.Format; } Compress(fmt, FALSE); } */ return; } HRESULT CDds_container::ChangeFormat(LPDIRECT3DBASETEXTURE8 ptexCur, D3DFORMAT fmtTo, LPDIRECT3DBASETEXTURE8* pptexNew) { HRESULT hr; LPDIRECT3DDEVICE8 pd3ddev = BaseGraphicsLayer::GetDevice(); LPDIRECT3DTEXTURE8 pmiptex; // LPDIRECT3DCUBETEXTURE8 pcubetex; // LPDIRECT3DVOLUMETEXTURE8 pvoltex; D3DFORMAT fmtFrom; LPDIRECT3DTEXTURE8 pmiptexNew; // LPDIRECT3DCUBETEXTURE8 pcubetexNew; // LPDIRECT3DVOLUMETEXTURE8 pvoltexNew; pmiptex = (LPDIRECT3DTEXTURE8)ptexCur; D3DSURFACE_DESC sd; pmiptex->GetLevelDesc(0, &sd); fmtFrom = sd.Format; hr = pd3ddev->CreateTexture(m_dwWidth, m_dwHeight, m_numMips, 0, fmtTo, D3DPOOL_MANAGED, &pmiptexNew); if (FAILED(hr)) return hr; *pptexNew = pmiptexNew; if (FAILED(BltAllLevels(D3DCUBEMAP_FACE_FORCE_DWORD, ptexCur, *pptexNew))) return hr; return S_OK; } HRESULT CDds_container::BltAllLevels(D3DCUBEMAP_FACES FaceType, LPDIRECT3DBASETEXTURE8 ptexSrc, LPDIRECT3DBASETEXTURE8 ptexDest) { HRESULT hr; LPDIRECT3DTEXTURE8 pmiptexSrc; LPDIRECT3DTEXTURE8 pmiptexDest; // LPDIRECT3DCUBETEXTURE8 pcubetexSrc; // LPDIRECT3DCUBETEXTURE8 pcubetexDest; // LPDIRECT3DVOLUMETEXTURE8 pvoltexSrc; // LPDIRECT3DVOLUMETEXTURE8 pvoltexDest; DWORD iLevel; pmiptexSrc = (LPDIRECT3DTEXTURE8)ptexSrc; pmiptexDest = (LPDIRECT3DTEXTURE8)ptexDest; for (iLevel = 0; iLevel < m_numMips; iLevel++) { LPDIRECT3DSURFACE8 psurfSrc = NULL; LPDIRECT3DSURFACE8 psurfDest = NULL; hr = pmiptexSrc->GetSurfaceLevel(iLevel, &psurfSrc); hr = pmiptexDest->GetSurfaceLevel(iLevel, &psurfDest); hr = D3DXLoadSurfaceFromSurface(psurfDest, NULL, NULL, psurfSrc, NULL, NULL, D3DX_FILTER_TRIANGLE, 0); ReleasePpo(&psurfSrc); ReleasePpo(&psurfDest); } return S_OK; } void CDds_container::OnOK() { char tmp[256] = {0}; char dir[256] = {0}; char tmp2[256]= {0}; D3DXIMAGE_INFO imageinfo; char *file; // TODO: Add extra validation here UpdateData(true); //file if(m_Radio == 0) { strcpy(tmp,m_Edit.LockBuffer()); file = strtok(tmp,"."); D3DXGetImageInfoFromFile( m_Edit, &imageinfo ); m_dwWidth = imageinfo.Width; m_dwHeight = imageinfo.Height; m_numMips = imageinfo.MipLevels; D3DXCreateTextureFromFile(BaseGraphicsLayer::GetDevice(),m_Edit,(LPDIRECT3DTEXTURE8 *)&base); m_Edit.Format("%s.dds",file); Compress(); D3DXSaveTextureToFile(m_Edit, D3DXIFF_DDS, base, NULL ); } //directory else if(m_Radio == 1) { CFileFind finder; strcpy(dir,m_Edit); strcat(dir,"*.bmp"); BOOL bWorking = finder.FindFile(dir); while (bWorking) { bWorking = finder.FindNextFile(); strcpy(tmp2,finder.GetFileName()); strcpy(tmp,tmp2); file = strtok(tmp,"."); D3DXGetImageInfoFromFile( tmp2, &imageinfo ); m_dwWidth = imageinfo.Width; m_dwHeight = imageinfo.Height; m_numMips = imageinfo.MipLevels; D3DXCreateTextureFromFile(BaseGraphicsLayer::GetDevice(),tmp2,(LPDIRECT3DTEXTURE8 *)&base); strcat(file,".dds"); Compress(); D3DXSaveTextureToFile(file, D3DXIFF_DDS, base, NULL ); } } CDialog::OnOK(); } void CDds_container::OnButtonConvertlowhardware() { // TODO: Add your control notification handler code here /* char tmp[256] = {0}; char dir[256] = {0}; char tmp2[256]= {0}; CFileFind finder; strcpy(dir,m_Edit); strcat(dir,"*.dds"); BOOL bWorking = finder.FindFile(dir); while (bWorking) { bWorking = finder.FindNextFile(); strcpy(tmp2,finder.GetFileName()); strcpy(tmp,tmp2); file = strtok(tmp,"."); D3DXGetImageInfoFromFile( tmp2, &imageinfo ); m_dwWidth = imageinfo.Width; m_dwHeight = imageinfo.Height; m_numMips = imageinfo.MipLevels; D3DXCreateTextureFromFile(BaseGraphicsLayer::GetDevice(),tmp2,(LPDIRECT3DTEXTURE8 *)&base); strcat(file,".dds"); Compress(); D3DXSaveTextureToFile(file, D3DXIFF_DDS, base, NULL ); } */ UpdateData(); CFileFind Finder; CString strFolder=m_Edit; CString strFilename; strFolder+="*.dds"; BOOL bFinding=Finder.FindFile(strFolder); D3DXIMAGE_INFO imageinfo; int nWidth; int nHeight; LPDIRECT3DTEXTURE8 pddTexture; while(bFinding) { bFinding=Finder.FindNextFile(); if(bFinding==FALSE) break; strFilename=Finder.GetFileName(); D3DXGetImageInfoFromFile(strFilename.LockBuffer(),&imageinfo); if(m_bDivTexture) { nWidth=imageinfo.Width>>1; nHeight=imageinfo.Height>>1; } else { nWidth=imageinfo.Width; nHeight=imageinfo.Height; } if(nWidth>256) { nWidth=nWidth>>1; } if(nHeight>256) { nHeight=nHeight>>1; } D3DXCreateTextureFromFileEx(BaseGraphicsLayer::GetDevice(),strFilename.LockBuffer(),nWidth,nHeight ,0,0,D3DFMT_A4R4G4B4,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,0,NULL,NULL,&pddTexture); D3DXFilterTexture(pddTexture,NULL,0,D3DX_FILTER_BOX | D3DX_FILTER_DITHER); D3DXSaveTextureToFile(strFilename.LockBuffer(), D3DXIFF_DDS, pddTexture, NULL ); pddTexture->Release(); } } void CDds_container::OnEsf() { // TODO: Add your control notification handler code here char str[] = "Esf ÆÄÀÏ(*.esf) |*.esf| ¸ðµçÆÄÀÏ(*.*)|*.*||"; CString strFilter = str; CString t_name; CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this); filedia.DoModal(); t_name = filedia.GetFileName(); CEffScript *test_script = NULL; test_script = new CEffScript[1]; if(t_name.GetLength() > 1) test_script->GetScriptData(t_name.LockBuffer()); } void CDds_container::OnButtonTotaltextureconvert() { // TODO: Add your control notification handler code here char path[256]; GetCurrentDirectory(256,path); char str[256],str2[256]; sprintf(str,"%s\\Texture\\Lightmap",path); sprintf(str2,"%s\\LowTexture\\Lightmap",path); AutoConvertTexture(str,str2); sprintf(str,"%s\\Texture\\NatureObject\\Zone1",path); sprintf(str2,"%s\\LowTexture\\NatureObject\\Zone1",path); AutoConvertTexture(str,str2); sprintf(str,"%s\\Texture\\Object",path); sprintf(str2,"%s\\LowTexture\\Object",path); AutoConvertTexture(str,str2); sprintf(str,"%s\\Texture\\Terrain\\Zone1",path); sprintf(str2,"%s\\LowTexture\\Terrain\\Zone1",path); AutoConvertTexture(str,str2); sprintf(str,"%s\\Texture\\WideTexture\\Zone1",path); sprintf(str2,"%s\\LowTexture\\WideTexture\\Zone1",path); AutoConvertTexture(str,str2); //AutoConvertTexture("c:/MP-Project/Texture/Effect","c:/MP-Project/LowTexture/Effect"); //AutoConvertTexture("c:/MP-Project/Character/Data/Texture","c:/MP-Project/Character/Data/LowTexture",true,false); //AutoConvertTexture("c:/MP-Project/Texture/Interface","c:/MP-Project/LowTexture/Interface",false,true); //AutoConvertTexture("c:/MP-Project/Texture/Interface/Item","c:/MP-Project/LowTexture/Interface/Item",false,true); } void CDds_container::AutoHeaderCreate(CString strSrc) { char strPathAll[256]; sprintf(strPathAll,"%s/*.dds",strSrc); WIN32_FIND_DATA wfd = {0}; HANDLE hFind = FindFirstFile(strPathAll, &wfd); if(INVALID_HANDLE_VALUE == hFind) return; CString strFilePathname; while(1) { strFilePathname.Format("%s/%s",strSrc,wfd.cFileName); FILE *fp=fopen(strFilePathname.LockBuffer(),"rb+"); if(fp) { DWORD dwHeader= 0x20534444; //"DDS " fwrite(&dwHeader,sizeof(DWORD),1,fp); fclose(fp); } if(FindNextFile(hFind, &wfd)==FALSE) break; } } void CDds_container::AutoConvertTexture(CString strSrc, CString strTar,bool bSmall,bool bHeader) { TextureHeaderRestore(strSrc.LockBuffer()); CFileFind Finder; CString strFolder=strSrc; CString strFilename; strFolder+="\\"; strFolder+="*.DDS"; //char strPathAll[256]; //sprintf(strPathAll,"%s/*.dds",strPath); WIN32_FIND_DATA wfd = {0}; HANDLE hFind = FindFirstFile(strFolder.LockBuffer(), &wfd); if(INVALID_HANDLE_VALUE == hFind) return; CString strFilePathname; D3DXIMAGE_INFO imageinfo; int nWidth; int nHeight; LPDIRECT3DTEXTURE8 pddTexture; CString strSrcFilename; while(1) { strSrcFilename.Format("%s/%s",strSrc.LockBuffer(),wfd.cFileName); D3DXGetImageInfoFromFile(strSrcFilename.LockBuffer(),&imageinfo); if(bSmall) { nWidth=imageinfo.Width>>1; nHeight=imageinfo.Height>>1; } else { nWidth=imageinfo.Width; nHeight=imageinfo.Height; } D3DXCreateTextureFromFileEx(BaseGraphicsLayer::GetDevice(),strSrcFilename.LockBuffer(),nWidth,nHeight ,0,0,D3DFMT_A4R4G4B4,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,0,NULL,NULL,&pddTexture); D3DXFilterTexture(pddTexture,NULL,0,D3DX_FILTER_BOX | D3DX_FILTER_DITHER); CString strTargetFilename; strTargetFilename=strTar+"/"+wfd.cFileName; D3DXSaveTextureToFile(strTargetFilename.LockBuffer(), D3DXIFF_DDS, pddTexture, NULL ); pddTexture->Release(); /* FILE *fp=fopen(strFilePathname.LockBuffer(),"rb+"); if(fp) { DWORD dwHeader=0; fwrite(&dwHeader,sizeof(DWORD),1,fp); fclose(fp); } */ if(FindNextFile(hFind, &wfd)==FALSE) break; } /* BOOL bFinding=Finder.FindFile(strFolder); while(bFinding) { bFinding=Finder.FindNextFile(); if(bFinding==FALSE) break; strFilename=Finder.GetFileName(); CString strSrcFilename=strSrc+"/"+strFilename; D3DXGetImageInfoFromFile(strSrcFilename.LockBuffer(),&imageinfo); if(bSmall) { nWidth=imageinfo.Width>>1; nHeight=imageinfo.Height>>1; } else { nWidth=imageinfo.Width; nHeight=imageinfo.Height; } D3DXCreateTextureFromFileEx(BaseGraphicsLayer::GetDevice(),strSrcFilename.LockBuffer(),nWidth,nHeight ,0,0,D3DFMT_A4R4G4B4,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,0,NULL,NULL,&pddTexture); D3DXFilterTexture(pddTexture,NULL,0,D3DX_FILTER_BOX | D3DX_FILTER_DITHER); CString strTargetFilename; strTargetFilename=strTar+"/"+strFilename; D3DXSaveTextureToFile(strTargetFilename.LockBuffer(), D3DXIFF_DDS, pddTexture, NULL ); pddTexture->Release(); } */ if(bHeader) { TextureHeaderFix(strSrc.LockBuffer()); TextureHeaderFix(strTar.LockBuffer()); } } void CDds_container::TextureHeaderFix(char *strPath) { char strPathAll[256]; sprintf(strPathAll,"%s/*.dds",strPath); WIN32_FIND_DATA wfd = {0}; HANDLE hFind = FindFirstFile(strPathAll, &wfd); if(INVALID_HANDLE_VALUE == hFind) return; CString strFilePathname; while(1) { strFilePathname.Format("%s/%s",strPath,wfd.cFileName); FILE *fp=fopen(strFilePathname.LockBuffer(),"rb+"); if(fp) { DWORD dwHeader= 0; fwrite(&dwHeader,sizeof(DWORD),1,fp); fclose(fp); } if(FindNextFile(hFind, &wfd)==FALSE) break; } } void CDds_container::TextureHeaderRestore(char *strPath) { char strPathAll[256]; sprintf(strPathAll,"%s/*.dds",strPath); WIN32_FIND_DATA wfd = {0}; HANDLE hFind = FindFirstFile(strPathAll, &wfd); if(INVALID_HANDLE_VALUE == hFind) return; CString strFilePathname; while(1) { strFilePathname.Format("%s/%s",strPath,wfd.cFileName); FILE *fp=fopen(strFilePathname.LockBuffer(),"rb+"); if(fp) { DWORD dwMagic=MAKEFOURCC('D','D','S',' '); fwrite(&dwMagic,sizeof(dwMagic),1,fp); fclose(fp); } if(FindNextFile(hFind, &wfd)==FALSE) break; } } void CDds_container::OnButton2() { // TODO: Add your control notification handler code here AutoConvertTexture("c:/Temp","c:/Temp/out",false,true); } void CDds_container::OnButton3() { // TODO: Add your control notification handler code here AutoConvertTexture("c:/Temp","c:/Temp/out",true,true); } void CDds_container::OnButtonDds2tga() { // TODO: Add your control notification handler code here CSelectFolderDialog SelectFolderDlg(TRUE, "C:\\", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, this); if(SelectFolderDlg.DoModal()!=IDOK) { return; } CString strFolder; strFolder=SelectFolderDlg.GetSelectedPath(); AutoTGAConvertTexture(strFolder.LockBuffer()); } void CDds_container::AutoTGAConvertTexture(char *strPath) { char strPathAll[256]; sprintf(strPathAll,"%s/*.dds",strPath); WIN32_FIND_DATA wfd = {0}; HANDLE hFind = FindFirstFile(strPathAll, &wfd); if(INVALID_HANDLE_VALUE == hFind) return; LPDIRECT3DTEXTURE8 pDDSTexture; CString strFilePathname; CString strTGAFilename; while(1) { strFilePathname.Format("%s%s",strPath,wfd.cFileName); D3DXCreateTextureFromFile(BaseGraphicsLayer::GetDevice(),strFilePathname.LockBuffer(),&pDDSTexture); strTGAFilename=strFilePathname; strTGAFilename.SetAt(strTGAFilename.GetLength()-1,'P'); strTGAFilename.SetAt(strTGAFilename.GetLength()-2,'M'); strTGAFilename.SetAt(strTGAFilename.GetLength()-3,'B'); D3DXSaveTextureToFile(strTGAFilename.LockBuffer(),D3DXIFF_BMP,pDDSTexture,NULL); pDDSTexture->Release(); if(FindNextFile(hFind, &wfd)==FALSE) break; } } void CDds_container::OnButtonBumpgenerate() { // TODO: Add your control notification handler code here CSelectFolderDialog SelectFolderDlg(TRUE, "C:\\", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, this); if(SelectFolderDlg.DoModal()!=IDOK) { return; } CString strFolder; strFolder=SelectFolderDlg.GetSelectedPath(); ConvertBump(strFolder.LockBuffer()); } void CDds_container::ConvertBump(char *strFolder) { char strPathAll[256]; sprintf(strPathAll,"%s/*.tga",strFolder); WIN32_FIND_DATA wfd = {0}; HANDLE hFind = FindFirstFile(strPathAll, &wfd); if(INVALID_HANDLE_VALUE == hFind) return; // LPDIRECT3DTEXTURE8 pDDSTexture; CString strFilePathname; CString strTGAFilename; CString strConvert; FILE *fp=fopen("c:/test.bat","w"); while(1) { strFilePathname.Format("%s%s",strFolder,wfd.cFileName); strTGAFilename=strFilePathname; strTGAFilename.Insert(strTGAFilename.GetLength()-4,"_bump"); //strConvert.Format("c:\\normalmapgen %s %s\n",strFilePathname.LockBuffer(),strTGAFilename.LockBuffer()); fprintf(fp,"c:\\normalmapgen %s %s\n",strFilePathname.LockBuffer(),strTGAFilename.LockBuffer()); /* STARTUPINFO si={sizeof(STARTUPINFO),0,}; PROCESS_INFORMATION pi; CreateProcess(strConvert.LockBuffer(),"",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); WaitForSingleObject( pi.hProcess, INFINITE); DeleteObject( pi.hProcess); DeleteObject( pi.hThread ); */ if(FindNextFile(hFind, &wfd)==FALSE) break; } fclose(fp); } void CDds_container::OnButtonTga2dds() { // TODO: Add your control notification handler code here CSelectFolderDialog SelectFolderDlg(TRUE, "C:\\", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, this); if(SelectFolderDlg.DoModal()!=IDOK) { return; } CString strFolder; strFolder=SelectFolderDlg.GetSelectedPath(); ConvertTGA2DDS(strFolder.LockBuffer()); } void CDds_container::ConvertTGA2DDS(char *strFolder) { char strPathAll[256]; sprintf(strPathAll,"%s/*.tga",strFolder); WIN32_FIND_DATA wfd = {0}; HANDLE hFind = FindFirstFile(strPathAll, &wfd); if(INVALID_HANDLE_VALUE == hFind) return; // LPDIRECT3DTEXTURE8 pDDSTexture; CString strFilePathname; CString strTGAFilename; FILE *fp=fopen("c:/test1.bat","w"); // D3DXIMAGE_INFO Info; while(1) { strFilePathname.Format("%s%s",strFolder,wfd.cFileName); strTGAFilename=strFilePathname; strTGAFilename.SetAt(strTGAFilename.GetLength()-1,'S'); strTGAFilename.SetAt(strTGAFilename.GetLength()-2,'D'); strTGAFilename.SetAt(strTGAFilename.GetLength()-3,'D'); fprintf(fp,"s3tc/m /3 %s %s\n",strFilePathname,strTGAFilename); /* D3DXCreateTextureFromFileEx(BaseGraphicsLayer::GetDevice(), strFilePathname.LockBuffer(), D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DPOOL_DEFAULT, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, &Info, NULL, &pDDSTexture); strTGAFilename=strFilePathname; strTGAFilename.SetAt(strTGAFilename.GetLength()-1,'S'); strTGAFilename.SetAt(strTGAFilename.GetLength()-2,'D'); strTGAFilename.SetAt(strTGAFilename.GetLength()-3,'D'); CConvertTexture DeCompressTexture; DeCompressTexture.m_pddNewTexture=pDDSTexture; DeCompressTexture.m_dwHeight=Info.Height; DeCompressTexture.m_dwWidth=Info.Width; D3DXFilterTexture(DeCompressTexture.m_pddNewTexture,NULL,0,D3DX_FILTER_BOX | D3DX_FILTER_DITHER); DeCompressTexture.m_pddTexture=DeCompressTexture.m_pddNewTexture; DeCompressTexture.GenerateMipMaps(true); DeCompressTexture.Compress(D3DFMT_DXT3); DeCompressTexture.SaveDDS(strTGAFilename.LockBuffer()); DeCompressTexture.m_pddNewTexture=NULL; //D3DXSaveTextureToFile(strTGAFilename.LockBuffer(),D3DXIFF_DDS,pDDSTexture,NULL); pDDSTexture->Release(); */ if(FindNextFile(hFind, &wfd)==FALSE) break; } fclose(fp); } void CDds_container::OnMapinfoconv() { char str[] = "Map Info ÆÄÀÏ(*.info) |*.info| ¸ðµçÆÄÀÏ(*.*)|*.*||"; CString strFilter = str; CString t_name; CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this); filedia.DoModal(); t_name = filedia.GetFileName(); if(t_name.GetLength() > 1) { if(MapInfoFileLoad(t_name.LockBuffer())) MessageBox("Map Info File Convert Successed"); else MessageBox("Map Info File Convert Failed"); } // TODO: Add your control notification handler code here } bool CDds_container::MapInfoFileLoad(char *strPath) { FILE *fp = NULL; char strBuf[256] = {0}; char *token = NULL; int iValue[30] = {0}; float fValue[30]; memset(fValue,0,sizeof(float) * 30); fp = fopen(strPath,"rt"); if(fp == NULL) return false; while(!feof(fp)) { memset(strBuf,0,sizeof(char) * 256); fgets(strBuf,sizeof(char) * 255,fp); token = strtok(strBuf," \n\t"); if(token != NULL) { if((*token) == '/') // ÁÖ¼® ¶óÀÎ continue; else if(!strcmp(token,"MAP:")) { // Map Size load fValue[0] = (float)atof(token = strtok(NULL," \n\t")); fValue[1] = (float)atof(token = strtok(NULL," \n\t")); fValue[2] = (float)atof(token = strtok(NULL," \n\t")); fValue[3] = (float)atof(token = strtok(NULL," \n\t")); fValue[4] = (float)atof(token = strtok(NULL," \n\t")); fValue[5] = (float)atof(token = strtok(NULL," \n\t")); } else if(!strcmp(token,"CULL:")) { // Map Culling Info (House,Object,Effect ¼øÀ¸·Î..) iValue[1] = atoi(token = strtok(NULL," \n\t")); iValue[2] = atoi(token = strtok(NULL," \n\t")); iValue[3] = atoi(token = strtok(NULL," \n\t")); } else if(!strcmp(token,"TIME:")) { // weather setting ½Ã°£ iValue[0] = atoi(token = strtok(NULL," \n\t")); } else if(!strcmp(token,"BOUND:")) { fValue[6] = (float)atof(token = strtok(NULL," \n\t")); //Min Bound fValue[7] = (float)atof(token = strtok(NULL," \n\t")); //Max Bound } else if(!strcmp(token,"PATH:")) { // °æ·Î setting iValue[4] = atoi(token = strtok(NULL," \n\t")); } } } fclose(fp); fp = NULL; // Write Binary File fp = fopen(strPath,"wb"); if(fp == NULL) return false; fwrite((int *)iValue,sizeof(int),30,fp); fwrite((float *)fValue,sizeof(float),30,fp); fclose(fp); return true; } void CDds_container::OnDdsheader() { // TODO: Add your control notification handler code here AutoHeaderCreate("c:/Temp"); } void CDds_container::OnButtonesfinfo() { // TODO: Add your control notification handler code here char strFilePath[256] = {0,}; char strPath[256] = {0,}; strcpy(strPath,"c:/temp"); FILE *fp; fp = fopen("c:/temp/Esf.info","wt+"); strcpy(strFilePath,strPath); strcat(strFilePath,"/*.esf"); WIN32_FIND_DATA FindFileData; HANDLE hFind; hFind = FindFirstFile(strFilePath, &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { MessageBox("Effect Loader°¡ ½ÇÆÐ Çß½À´Ï´Ù."); return ; } while(1) { fprintf(fp,"%s\n",FindFileData.cFileName); if(!FindNextFile(hFind,&FindFileData)) break; } FindClose(hFind); fclose(fp); MessageBox("Esf.info »ý¼º ¼º°ø"); } void CDds_container::OnButtonConvertmesh() { // TODO: Add your control notification handler code here ConvertR3S("c:/Temp","c:/Temp/out"); } void CDds_container::ConvertR3S(CString strSrcPath,CString strDestPath) { CFileFind Finder; CString strFolder=strSrcPath; CString strFilename; strFolder+="\\"; strFolder+="*.R3S"; //char strPathAll[256]; //sprintf(strPathAll,"%s/*.dds",strPath); WIN32_FIND_DATA wfd = {0}; HANDLE hFind = FindFirstFile(strFolder.LockBuffer(), &wfd); if(INVALID_HANDLE_VALUE == hFind) return; CString strFilePathname; CString strSrcFilename; while(1) { CMeshObject Mesh; FILE *fp = NULL; strSrcFilename.Format("%s/%s",strSrcPath.LockBuffer(),wfd.cFileName); Mesh.Load(strSrcFilename.LockBuffer()); Mesh.SetShader(MultiFVF); if(Mesh.m_iMethod == 0) { CString strTargetFilename; strTargetFilename=strDestPath+"/"+wfd.cFileName; char *strchr = strrchr(wfd.cFileName,'.'); if(strchr) { *strchr = '.'; strchr++; *strchr = 'd'; strchr++; *strchr = 'd'; strchr++; *strchr = 's'; } strSrcFilename.Format("%s/%s",strSrcPath.LockBuffer(),wfd.cFileName); fp = fopen(strSrcFilename,"rb"); if(fp == NULL) { Mesh.ConvertNormal(); Mesh.SaveConvertMesh(strTargetFilename.LockBuffer(),3); } else { fclose(fp); fp = NULL; Mesh.Save(strTargetFilename.LockBuffer()); } } if(FindNextFile(hFind, &wfd)==FALSE) break; } }