Esempio n. 1
0
    void DiMeshSerializerImpl::ExportMesh( const DiMesh* pMesh, DiDataStreamPtr stream )
    {
        mStream = stream;

        WriteFileHeader();

        DiMesh::ConstSubMeshIterator it = pMesh->GetSubMeshs();
        while (it.HasMoreElements())
        {
            DiSubMesh* sm = it.GetNext();
            WriteSubMesh(sm);
        }

        WriteBoundsInfo(pMesh);
    }
Esempio n. 2
0
void MeshSaverImplv1_0::WriteSubMeshData(MeshTemplate* templ,
		const MeshTemplate::PrimitiveGroup& gr,
		ChunkOutputStream& outStream) {

	bool sharedMeshBuffer = false;
	MeshBuffer* buffer = templ->GetSharedMeshBuffer();
	if (!gr.buffer || gr.buffer == buffer) {
		sharedMeshBuffer = true;
	} else
		buffer = gr.buffer;

	{
		uint8 primType = (uint8)buffer->GetPrimitiveType();
		OutputSerializer& ser = outStream.BeginChunk(MCID_SUBMESH_INFO);
		ser << primType;
		outStream.EndChunk();
	}

	if (sharedMeshBuffer) {
		{
			uint32 start = gr.startVertex;
			uint32 count = gr.vertexCount;
			OutputSerializer& ser = outStream.BeginChunk(MCID_SHARED_VERTEX_DATA);
			ser << start << count;
			outStream.EndChunk();
		}
		{
			uint32 start = gr.startIndex;
			uint32 count = gr.indexCount;
			OutputSerializer& ser = outStream.BeginChunk(MCID_SHARED_INDEX_DATA);
			ser << start << count;
			outStream.EndChunk();
		}
	} else {
		WriteVertexData(buffer, outStream);
		WriteIndexData(buffer, outStream);
	}

	WriteBoundsInfo(gr.bounds, outStream);
	if (gr.material && gr.material != templ->GetSharedMaterial()) {
		WriteMaterialData(gr.material, outStream);
	}

	{
		OutputSerializer& ser = outStream.BeginChunk(MCID_SUBMESH_END);
		outStream.EndChunk();
	}
}
Esempio n. 3
0
void MeshSaverImplv1_0::Save(OutputStreamPtr& out,
		AssetSaver& saver) {

	try {
		MeshTemplate* mesh = static_cast<MeshTemplate*>(
					saver.GetRequestPtr()->GetStreamedObject());

		WriteVersion(out);

		ChunkOutputStream stream(out);
		WriteMeshHeader(mesh, stream);
		WriteBoundsInfo(mesh->GetBounds(), stream);
		MeshBuffer* buffer = mesh->GetSharedMeshBuffer();
		MaterialTemplatePtr material = mesh->GetSharedMaterial();
		if (buffer) {
			WriteVertexData(buffer, stream);
			WriteIndexData(buffer, stream);
		}

		if (material) {
			WriteMaterialData(material, stream);
		}

		uint32 numPrim = mesh->GetNumPrimitiveGroups();
		for (uint32 i = 0; i < numPrim; ++i) {
			OutputSerializer& ser = stream.BeginChunk(MCID_SUBMESH_DATA);
			WriteSubMeshData(mesh, mesh->GetPrimitive(i), stream);
			stream.EndChunk();
		}
	} catch (const GracefulErrorExcept& e) {
		saver.GetRequestPtr()->SetCompleted(false);
		NEX_THROW(e);
	}

	saver.GetRequestPtr()->SetCompleted(true);
}