void OgreMeshReader::readGeometryVertexDeclaration(VertexElementStore &vertexElements, BufferVertexMap &bufferMap ) { OSG_OGRE_LOG(("OgreMeshReader::readGeometryVertexDeclaration\n")); bool stop = false; while(_is) { readChunkHeader(_is); switch(_header.chunkId) { case CHUNK_GEOMETRY_VERTEX_ELEMENT: readGeometryVertexElement(vertexElements, bufferMap); break; default: OSG_OGRE_LOG(("OgreMeshReader::readGeometryVertexDeclaration: Unknown chunkId '0x%x'\n", _header.chunkId)); stop = true; break; } if(stop == true) { skip(_is, -_chunkHeaderSize); break; } } }
//--------------------------------------------------------------------- std::vector<OgreMeshDeserializer::VertexElement> OgreMeshDeserializer::readGeometryVertexDeclaration() { std::vector<OgreMeshDeserializer::VertexElement> elements; // Find optional geometry streams if (!m_stream.eof()) { unsigned short streamID = readChunk(m_stream); while (!m_stream.eof() && (streamID == M_GEOMETRY_VERTEX_ELEMENT)) { switch (streamID) { case M_GEOMETRY_VERTEX_ELEMENT: elements.push_back(readGeometryVertexElement()); break; default: break; } // Get next m_stream if (!m_stream.eof()) { streamID = readChunk(m_stream); } } if (!m_stream.eof()) { // Backpedal back to start of non-submesh m_stream backpedalChunkHeader(m_stream); } } return elements; }