コード例 #1
0
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;
        }
    }
}
コード例 #2
0
//---------------------------------------------------------------------
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;
}