All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
Ogre::Mesh::ChunkMesh Class Reference

#include <StdMeshLoaderBinaryChunks.h>

Inheritance diagram for Ogre::Mesh::ChunkMesh:
Collaboration diagram for Ogre::Mesh::ChunkMesh:

Public Member Functions

 ChunkMesh ()
Type GetType () const
size_t GetSize () const

Static Public Member Functions

static std::unique_ptr< ChunkRead (DataStream *stream)
static Type Peek (const DataStream *stream)

Public Attributes

bool hasAnimatedSkeleton
std::string skeletonFile
std::unique_ptr< ChunkGeometrygeometry
unique_ptr_vector< ChunkSubmeshsubmeshes
std::vector< BoneAssignmentboneAssignments
StdMeshBox bounds
float radius

Static Public Attributes

static const size_t ChunkHeaderLength

Protected Types

typedef ChunkID Type

Protected Member Functions

virtual void ReadImpl (DataStream *stream)

Protected Attributes

Type type
size_t size

Detailed Description

Definition at line 381 of file StdMeshLoaderBinaryChunks.h.

Member Typedef Documentation

typedef ChunkID Ogre::ChunkBase< ChunkID >::Type

Definition at line 286 of file StdMeshLoaderBinaryChunks.h.

Constructor & Destructor Documentation

Ogre::Mesh::ChunkMesh::ChunkMesh ( )

Member Function Documentation

size_t Ogre::ChunkBase< ChunkID >::GetSize ( ) const

Definition at line 292 of file StdMeshLoaderBinaryChunks.h.

References Ogre::ChunkBase< _Type >::size.

Referenced by Ogre::Mesh::ChunkUnknown::ReadImpl(), Ogre::Mesh::ChunkMeshBoneAssignments::ReadImpl(), Ogre::Mesh::ChunkGeometryVertexData::ReadImpl(), Ogre::Skeleton::ChunkUnknown::ReadImpl(), Ogre::Skeleton::ChunkBone::ReadImpl(), and Ogre::Skeleton::ChunkAnimationTrackKF::ReadImpl().

Here is the caller graph for this function:

Type Ogre::ChunkBase< ChunkID >::GetType ( ) const
static Type Ogre::ChunkBase< ChunkID >::Peek ( const DataStream stream)

Definition at line 295 of file StdMeshLoaderBinaryChunks.h.

References Ogre::DataStream::Peek().

Referenced by StdMeshSkeletonLoader::LoadSkeletonBinary(), ReadImpl(), Ogre::Mesh::ChunkSubmesh::ReadImpl(), Ogre::Mesh::ChunkGeometry::ReadImpl(), Ogre::Mesh::ChunkGeometryVertexDecl::ReadImpl(), Ogre::Mesh::ChunkGeometryVertexBuffer::ReadImpl(), Ogre::Skeleton::ChunkAnimation::ReadImpl(), and Ogre::Skeleton::ChunkAnimationTrack::ReadImpl().

296  {
297  return static_cast<Type>(stream->Peek<uint16_t>());
298  }

Here is the call graph for this function:

Here is the caller graph for this function:

std::unique_ptr< Chunk > Ogre::Mesh::Chunk::Read ( DataStream stream)

Definition at line 46 of file StdMeshLoaderBinaryChunks.cpp.

References Ogre::ChunkBase< ChunkID >::ChunkHeaderLength, Ogre::Mesh::CID_Edge_List, Ogre::Mesh::CID_Geometry, Ogre::Mesh::CID_Geometry_Vertex_Buffer, Ogre::Mesh::CID_Geometry_Vertex_Data, Ogre::Mesh::CID_Geometry_Vertex_Decl, Ogre::Mesh::CID_Geometry_Vertex_Decl_Element, Ogre::Mesh::CID_Header, Ogre::Mesh::CID_Invalid, Ogre::Mesh::CID_Mesh, Ogre::Mesh::CID_Mesh_Bone_Assignment, Ogre::Mesh::CID_Mesh_Bounds, Ogre::Mesh::CID_Mesh_Skeleton_Link, Ogre::Mesh::CID_Submesh, Ogre::Mesh::CID_Submesh_Bone_Assignment, Ogre::Mesh::CID_Submesh_Name_Table, Ogre::Mesh::CID_Submesh_Op, Ogre::DataStream::GetRemainingBytes(), LogF(), Ogre::DataStream::Read(), and Ogre::ChunkBase< ChunkID >::size.

Referenced by StdMeshLoader::LoadMeshBinary(), ReadImpl(), Ogre::Mesh::ChunkSubmesh::ReadImpl(), Ogre::Mesh::ChunkGeometry::ReadImpl(), Ogre::Mesh::ChunkGeometryVertexDecl::ReadImpl(), and Ogre::Mesh::ChunkGeometryVertexBuffer::ReadImpl().

47  {
48  assert(stream->GetRemainingBytes() >= ChunkHeaderLength);
50  // Read metadata
51  ChunkID id = CID_Invalid;
52  id = static_cast<ChunkID>(stream->Read<uint16_t>());
53  size_t size = 0;
54  // Special case: CID_Header doesn't have any size info.
55  if (id != CID_Header)
56  {
57  // All others are proper chunks.
58  size = stream->Read<uint32_t>();
59  size -= ChunkHeaderLength;
60  }
62  // Create chunk
63  std::unique_ptr<Chunk> chunk;
64  switch (id)
65  {
66  case CID_Header: chunk.reset(new ChunkFileHeader()); break;
67  case CID_Mesh: chunk.reset(new ChunkMesh()); break;
70  chunk.reset(new ChunkMeshBoneAssignments()); break;
71  case CID_Mesh_Skeleton_Link: chunk.reset(new ChunkMeshSkeletonLink()); break;
72  case CID_Mesh_Bounds: chunk.reset(new ChunkMeshBounds()); break;
73  case CID_Submesh: chunk.reset(new ChunkSubmesh()); break;
74  case CID_Submesh_Op: chunk.reset(new ChunkSubmeshOp()); break;
75  case CID_Geometry: chunk.reset(new ChunkGeometry()); break;
76  case CID_Geometry_Vertex_Buffer: chunk.reset(new ChunkGeometryVertexBuffer()); break;
77  case CID_Geometry_Vertex_Data: chunk.reset(new ChunkGeometryVertexData()); break;
78  case CID_Geometry_Vertex_Decl: chunk.reset(new ChunkGeometryVertexDecl()); break;
79  case CID_Geometry_Vertex_Decl_Element: chunk.reset(new ChunkGeometryVertexDeclElement()); break;
80  default:
81  LogF("StdMeshLoader: I don't know what to do with a chunk of type 0x%xu", id);
82  // Fall through
84  // We don't care about these
85  chunk.reset(new ChunkUnknown()); break;
86  };
87  chunk->type = id;
88  chunk->size = size;
89  chunk->ReadImpl(stream);
90  return chunk;
91  }
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:253

Here is the call graph for this function:

Here is the caller graph for this function:

void Ogre::Mesh::ChunkMesh::ReadImpl ( DataStream stream)

Implements Ogre::ChunkBase< ChunkID >.

Definition at line 103 of file StdMeshLoaderBinaryChunks.cpp.

References Ogre::Mesh::ChunkMeshBoneAssignments::assignments, Ogre::DataStream::AtEof(), boneAssignments, bounds, Ogre::Mesh::CID_Animation_List, Ogre::Mesh::CID_Edge_List, Ogre::Mesh::CID_Geometry, Ogre::Mesh::CID_Mesh_Bone_Assignment, Ogre::Mesh::CID_Mesh_Bounds, Ogre::Mesh::CID_Mesh_LOD, Ogre::Mesh::CID_Mesh_Skeleton_Link, Ogre::Mesh::CID_Pose_List, Ogre::Mesh::CID_Submesh, Ogre::Mesh::CID_Submesh_Name_Table, geometry, hasAnimatedSkeleton, LogF(), Ogre::ChunkBase< ChunkID >::Peek(), radius, Ogre::DataStream::Read(), Ogre::Mesh::Chunk::Read(), skeletonFile, static_unique_cast(), and submeshes.

104  {
105  hasAnimatedSkeleton = stream->Read<bool>();
106  for (ChunkID id = Chunk::Peek(stream);
108  id = Chunk::Peek(stream)
109  )
110  {
111  std::unique_ptr<Chunk> chunk = Chunk::Read(stream);
112  switch (chunk->GetType())
113  {
114  case CID_Geometry:
115  if (geometry)
116  throw MultipleSingletonChunks("There's only one CID_Geometry chunk allowed within a CID_Mesh chunk");
117  geometry = static_unique_cast<ChunkGeometry>(move(chunk));
118  break;
119  case CID_Submesh:
120  submeshes.push_back(static_unique_cast<ChunkSubmesh>(move(chunk)));
121  break;
123  if (!skeletonFile.empty())
124  throw MultipleSingletonChunks("There's only one CID_Mesh_Skeleton_Link chunk allowed within a CID_Mesh chunk");
125  skeletonFile = static_cast<ChunkMeshSkeletonLink*>(chunk.get())->skeleton;
126  break;
127  case CID_Mesh_Bounds:
128  bounds = static_cast<ChunkMeshBounds*>(chunk.get())->bounds;
129  radius = static_cast<ChunkMeshBounds*>(chunk.get())->radius;
130  break;
132  // Collect bone assignments
133  {
134  ChunkMeshBoneAssignments *assignments = static_cast<ChunkMeshBoneAssignments*>(chunk.get());
135  boneAssignments.insert(boneAssignments.end(), assignments->assignments.begin(), assignments->assignments.end());
136  break;
137  }
138  default:
139  LogF("StdMeshLoader: I don't know what to do with a chunk of type 0x%xu inside a CID_Mesh chunk", chunk->GetType());
140  // Fall through
142  case CID_Edge_List:
143  // Ignore those
144  break;
145  }
146  if (stream->AtEof()) break;
147  }
148  }
std::unique_ptr< ChunkGeometry > geometry
static Type Peek(const DataStream *stream)
std::unique_ptr< To > static_unique_cast(From &&p)
unique_ptr_vector< ChunkSubmesh > submeshes
std::vector< BoneAssignment > boneAssignments
static std::unique_ptr< Chunk > Read(DataStream *stream)
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:253

Here is the call graph for this function:

Member Data Documentation

std::vector<BoneAssignment> Ogre::Mesh::ChunkMesh::boneAssignments

Definition at line 389 of file StdMeshLoaderBinaryChunks.h.

Referenced by StdMeshLoader::LoadMeshBinary(), and ReadImpl().

StdMeshBox Ogre::Mesh::ChunkMesh::bounds

Definition at line 390 of file StdMeshLoaderBinaryChunks.h.

Referenced by ReadImpl().

const size_t Ogre::ChunkBase< ChunkID >::ChunkHeaderLength
std::unique_ptr<ChunkGeometry> Ogre::Mesh::ChunkMesh::geometry

Definition at line 387 of file StdMeshLoaderBinaryChunks.h.

Referenced by StdMeshLoader::LoadMeshBinary(), and ReadImpl().

bool Ogre::Mesh::ChunkMesh::hasAnimatedSkeleton

Definition at line 385 of file StdMeshLoaderBinaryChunks.h.

Referenced by ReadImpl().

float Ogre::Mesh::ChunkMesh::radius

Definition at line 391 of file StdMeshLoaderBinaryChunks.h.

Referenced by ReadImpl().

size_t Ogre::ChunkBase< ChunkID >::size
std::string Ogre::Mesh::ChunkMesh::skeletonFile

Definition at line 386 of file StdMeshLoaderBinaryChunks.h.

Referenced by StdMeshLoader::LoadMeshBinary(), and ReadImpl().

unique_ptr_vector<ChunkSubmesh> Ogre::Mesh::ChunkMesh::submeshes

Definition at line 388 of file StdMeshLoaderBinaryChunks.h.

Referenced by StdMeshLoader::LoadMeshBinary(), and ReadImpl().

Type Ogre::ChunkBase< ChunkID >::type

Definition at line 287 of file StdMeshLoaderBinaryChunks.h.

The documentation for this class was generated from the following files: