Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

BinaryModelWriter Class Reference

Inheritance diagram for BinaryModelWriter:

Inheritance graph
Collaboration diagram for BinaryModelWriter:

Collaboration graph
List of all members.

Public Member Functions

 BinaryModelWriter (ostream &)
virtual bool write (const Model &)
 ~BinaryModelWriter ()

Private Member Functions

void writeGroup (const Mesh::PrimitiveGroup &)
void writeMaterial (const Mesh::Material &)
void writeMesh (const Mesh &)
void writeVertexDescription (const Mesh::VertexDescription &)
void writeVertices (const void *vertexData, uint32 nVertices, uint32 stride, const Mesh::VertexDescription &desc)

Private Attributes

ostream & out

Constructor & Destructor Documentation

BinaryModelWriter::BinaryModelWriter ostream &   ) 
 

Definition at line 1572 of file modelfile.cpp.

01572                                                   :
01573     out(_out)
01574 {
01575 }

BinaryModelWriter::~BinaryModelWriter  ) 
 

Definition at line 1578 of file modelfile.cpp.

01579 {
01580 }


Member Function Documentation

bool BinaryModelWriter::write const Model  )  [virtual]
 

Implements ModelWriter.

Definition at line 1638 of file modelfile.cpp.

References CEL_MODEL_HEADER_BINARY, out, writeMaterial(), and writeMesh().

01639 {
01640     out << CEL_MODEL_HEADER_BINARY;
01641 
01642     for (uint32 matIndex = 0; model.getMaterial(matIndex); matIndex++)
01643         writeMaterial(*model.getMaterial(matIndex));
01644 
01645     for (uint32 meshIndex = 0; model.getMesh(meshIndex); meshIndex++)
01646         writeMesh(*model.getMesh(meshIndex));
01647 
01648     return true;
01649 }

void BinaryModelWriter::writeGroup const Mesh::PrimitiveGroup  )  [private]
 

Definition at line 1653 of file modelfile.cpp.

References out, writeInt16(), and writeUint().

Referenced by writeMesh().

01654 {
01655     writeInt16(out, static_cast<int16>(group.prim));
01656     writeUint(out, group.materialIndex);
01657     writeUint(out, group.nIndices);
01658 
01659     // Print the indices, twelve per line
01660     for (uint32 i = 0; i < group.nIndices; i++)
01661         writeUint(out, group.indices[i]);
01662 }

void BinaryModelWriter::writeMaterial const Mesh::Material  )  [private]
 

Definition at line 1750 of file modelfile.cpp.

References CMOD_Diffuse, CMOD_Emissive, CMOD_EndMaterial, CMOD_Material, CMOD_Opacity, CMOD_Specular, CMOD_SpecularPower, CMOD_Texture, DefaultDiffuse(), DefaultEmissive(), DefaultOpacity, DefaultSpecular(), DefaultSpecularPower, ResourceManager< T >::getResourceInfo(), GetTextureManager(), InvalidResource, out, TextureInfo::source, writeInt16(), writeToken(), writeTypeColor(), writeTypeFloat1(), and writeTypeString().

Referenced by write().

01751 {
01752     writeToken(out, CMOD_Material);
01753 
01754     if (material.diffuse != DefaultDiffuse)
01755     {
01756         writeToken(out, CMOD_Diffuse);
01757         writeTypeColor(out, material.diffuse);
01758     }
01759 
01760     if (material.emissive != DefaultEmissive)
01761     {
01762         writeToken(out, CMOD_Emissive);
01763         writeTypeColor(out, material.emissive);
01764     }
01765 
01766     if (material.specular != DefaultSpecular)
01767     {
01768         writeToken(out, CMOD_Specular);
01769         writeTypeColor(out, material.specular);
01770     }
01771 
01772     if (material.specularPower != DefaultSpecularPower)
01773     {
01774         writeToken(out, CMOD_SpecularPower);
01775         writeTypeFloat1(out, material.specularPower);
01776     }
01777 
01778     if (material.opacity != DefaultOpacity)
01779     {
01780         writeToken(out, CMOD_Opacity);
01781         writeTypeFloat1(out, material.opacity);
01782     }
01783 
01784     for (int i = 0; i < Mesh::TextureSemanticMax; i++)
01785     {
01786         if (material.maps[i] != InvalidResource)
01787         {
01788             const TextureInfo* texInfo = GetTextureManager()->getResourceInfo(material.maps[i]);
01789             if (texInfo != NULL)
01790             {
01791                 writeToken(out, CMOD_Texture);
01792                 writeInt16(out, (int16) i);
01793                 writeTypeString(out, texInfo->source);
01794             }
01795         }
01796     }
01797 #if 0
01798     if (material.tex1 != InvalidResource)
01799     {
01800         const TextureInfo* texInfo = GetTextureManager()->getResourceInfo(material.tex1);
01801         if (texInfo != NULL)
01802         {
01803             writeToken(out, CMOD_Texture1);
01804             writeTypeString(out, texInfo->source);
01805         }
01806     }
01807 #endif
01808 
01809     writeToken(out, CMOD_EndMaterial);
01810 }

void BinaryModelWriter::writeMesh const Mesh  )  [private]
 

Definition at line 1666 of file modelfile.cpp.

References CMOD_EndMesh, CMOD_Mesh, out, writeGroup(), writeToken(), writeVertexDescription(), and writeVertices().

Referenced by write().

01667 {
01668     writeToken(out, CMOD_Mesh);
01669 
01670     writeVertexDescription(mesh.getVertexDescription());
01671 
01672     writeVertices(mesh.getVertexData(),
01673                   mesh.getVertexCount(),
01674                   mesh.getVertexStride(),
01675                   mesh.getVertexDescription());
01676 
01677     for (uint32 groupIndex = 0; mesh.getGroup(groupIndex); groupIndex++)
01678         writeGroup(*mesh.getGroup(groupIndex));
01679 
01680     writeToken(out, CMOD_EndMesh);
01681 }

void BinaryModelWriter::writeVertexDescription const Mesh::VertexDescription  )  [private]
 

Definition at line 1735 of file modelfile.cpp.

References CMOD_EndVertexDesc, CMOD_VertexDesc, out, writeInt16(), and writeToken().

Referenced by writeMesh().

01736 {
01737     writeToken(out, CMOD_VertexDesc);
01738 
01739     for (uint32 attr = 0; attr < desc.nAttributes; attr++)
01740     {
01741         writeInt16(out, static_cast<int16>(desc.attributes[attr].semantic));
01742         writeInt16(out, static_cast<int16>(desc.attributes[attr].format));
01743     }
01744 
01745     writeToken(out, CMOD_EndVertexDesc);
01746 }

void BinaryModelWriter::writeVertices const void *  vertexData,
uint32  nVertices,
uint32  stride,
const Mesh::VertexDescription desc
[private]
 

Definition at line 1685 of file modelfile.cpp.

References CMOD_Vertices, out, writeFloat(), writeToken(), and writeUint().

Referenced by writeMesh().

01689 {
01690     const char* vertex = reinterpret_cast<const char*>(vertexData);
01691 
01692     writeToken(out, CMOD_Vertices);
01693     writeUint(out, nVertices);
01694 
01695     for (uint32 i = 0; i < nVertices; i++, vertex += stride)
01696     {
01697         for (uint32 attr = 0; attr < desc.nAttributes; attr++)
01698         {
01699             const char* cdata = vertex + desc.attributes[attr].offset;
01700             const float* fdata = reinterpret_cast<const float*>(cdata);
01701 
01702             switch (desc.attributes[attr].format)
01703             {
01704             case Mesh::Float1:
01705                 writeFloat(out, fdata[0]);
01706                 break;
01707             case Mesh::Float2:
01708                 writeFloat(out, fdata[0]);
01709                 writeFloat(out, fdata[1]);
01710                 break;
01711             case Mesh::Float3:
01712                 writeFloat(out, fdata[0]);
01713                 writeFloat(out, fdata[1]);
01714                 writeFloat(out, fdata[2]);
01715                 break;
01716             case Mesh::Float4:
01717                 writeFloat(out, fdata[0]);
01718                 writeFloat(out, fdata[1]);
01719                 writeFloat(out, fdata[2]);
01720                 writeFloat(out, fdata[3]);
01721                 break;
01722             case Mesh::UByte4:
01723                 out.write(cdata, 4);
01724                 break;
01725             default:
01726                 assert(0);
01727                 break;
01728             }
01729         }
01730     }
01731 }


Member Data Documentation

ostream& BinaryModelWriter::out [private]
 

Definition at line 175 of file modelfile.cpp.

Referenced by write(), writeGroup(), writeMaterial(), writeMesh(), writeVertexDescription(), and writeVertices().


The documentation for this class was generated from the following file:
Generated on Sat Jan 14 22:33:07 2006 for Celestia by  doxygen 1.4.1