void CTileHandler::ProcessTiles2(void) { unsigned char* data=new unsigned char[1024*1024*4]; bigTex=CBitmap(data,1,1); /// /free big tex memory int tilex=xsize/4; int tiley=ysize/4; for(int a=0;a<(tilex*tiley)/1024;++a){ int startTile=a*1024; char name[100]; DDSURFACEDESC2 ddsheader; int ddssignature; CFileHandler file; if (prog == "nvdxt.exe " || prog == "nvcompress.exe " || prog == "texconv.exe " || prog == "old_nvdxt.exe "){ sprintf(name,"Temp%03i.dds",a); file.Open(name); file.Read(&ddssignature, sizeof(int)); file.Read(&ddsheader, sizeof(DDSURFACEDESC2)); } if (prog == "texcompress.exe "){ sprintf(name, "temp\\Temp%03i.png.raw", a); file.Open(name); } char bigtile[696320]; // /1024x1024 and 4 mipmaps file.Read(bigtile, 696320); for(int b=0;b<1024;++b){ int x=b%32; int y=b/32; int xb=(startTile+b)%tilex; int yb=(startTile+b)/tilex; char* ctile=new char[SMALL_TILE_SIZE]; ReadTile(x*32,y*32,ctile,bigtile); CBitmap* bm=new CBitmap(); bm->CreateFromDXT1((unsigned char*)ctile,32,32); int t1=tileUse[max(0,(yb-1)*tilex+xb)]; int t2=tileUse[max(0,yb*tilex+xb-1)]; int ct=FindCloseTile(bm,t1==t2?t1:-1); if(ct==-1){ tileUse[yb*tilex+xb]=usedTiles; tiles[usedTiles++]=bm; newTiles.push_back(ctile); } else { tileUse[yb*tilex+xb]=ct; delete bm; delete[] ctile; } } printf("Creating tiles %i/%i %i%%\n", usedTiles-numExternalTile,(a+1)*1024,(((a+1)*1024)*100)/(tilex*tiley)); } delete[] data; }