public unsafe bool export_XSD(string filename, ExportSettings expSettings, ref Export360.ExportResults results) { DateTime n = DateTime.Now; //update before we do anything TerrainGlobals.getEditor().getSimRep().updateForExport();// update(false);// headerToChunk(); results.terrainSimMemorySize = simDataToChunk(); bool exportOK = ExportTo360.safeECFFileWrite(filename, ".XSD"); TimeSpan ts = DateTime.Now - n; results.terrainSimTime = ts.TotalMinutes; return(exportOK); }
//----------------------------------------------------------------------------------- public bool export_XTH(string filename, ExportSettings expSettings, ref ExportResults results) { DateTime n = DateTime.Now; HeightsGen hg = new HeightsGen(); hg.computeHeightField(256, 256, true, BMathLib.unitZ, 8); headerToChunk(); heightFieldToChunk(hg, ref results); //turn our data into a ECF chunk heightFieldAlphaToChunk(ref results); bool exportOK = ExportTo360.safeECFFileWrite(filename, ".XTH"); hg.destroy(); TimeSpan ts = DateTime.Now - n; results.terrainGPUHeighfieldTime = ts.TotalMinutes; return(exportOK); }
public bool export_XTD(string filename, ExportSettings expSettings, ref ExportResults results) { DateTime start = DateTime.Now; //write the header for the entire XTD file XTDVisualHeader header = new XTDVisualHeader(); header.version = (int)eFileVersions.cXTDVersion; header.numXVerts = TerrainGlobals.getTerrain().getNumXVerts(); header.numXChunks = (int)(TerrainGlobals.getTerrain().getNumXVerts() / BTerrainQuadNode.cMaxWidth); header.tileScale = TerrainGlobals.getTerrain().getTileScale(); BBoundingBox simRepBB = SimGlobals.getSimMain().getBBoxForDecalObjects(); Vector3 visRepMin = TerrainGlobals.getTerrain().getQuadNodeRoot().getDesc().m_min - new Vector3(0, header.tileScale, 0); Vector3 visRepMax = TerrainGlobals.getTerrain().getQuadNodeRoot().getDesc().m_max + new Vector3(0, header.tileScale, 0); if (!CoreGlobals.mbLoadTerrainVisRep) { visRepMin = simRepBB.min; visRepMax = simRepBB.max; } header.worldMin = visRepMin; header.worldMax = visRepMax; header.endianSwap(); //write our header first. ECF.ECFChunkHolder chunkHolder = new ECF.ECFChunkHolder(); chunkHolder.mDataMemStream = new MemoryStream(); BinaryWriter binWriter = new BinaryWriter(chunkHolder.mDataMemStream); binWriter.Write(ExportTo360.StructToByteArray(header)); ExportTo360.mECF.addChunk((int)eXTD_ChunkID.cXTD_XTDHeader, chunkHolder, (int)chunkHolder.mDataMemStream.Length); binWriter.Close(); binWriter = null; chunkHolder.Close(); chunkHolder = null; header.endianSwap(); generateGridChunks(ref header); writeAtlasToMemory(ref results); writeAOData(ref results); writeAlpha(ref results); writeTessData(expSettings.RefineTerrain, expSettings.RefineEpsilon, expSettings.RefineMinorityBias, ref results); writeLightData(ref expSettings, ref results); bool exportOK = ExportTo360.safeECFFileWrite(filename, ".XTD"); TimeSpan ts = DateTime.Now - start; results.totalTime = ts.TotalMinutes; return(exportOK); }