//----------------------------------------------------------------------- //----------------------------------------------------------------------- void MeshReadHelper::lockIndexBuffer() { IndexData* indexData = mCurSubMeshInfoF->indexData; if(indexData == mIndexData) return; // continue using the same IndexData if(!indexData) { unlockIndexBuffer(); return; // error, exiting with mIndexPtr == nullptr } mIndexData = indexData; mIndexStart = indexData->indexStart; mIndexCount = indexData->indexCount; HardwareIndexBufferSharedPtr indexBuffer = mIndexData->indexBuffer; if(indexBuffer == mIndexBuffer) return; // continue using the same hardware buffer unlockIndexBuffer(); mIndexData = indexData; mIndexBuffer = indexBuffer; if(mIndexBuffer.isNull()) return; // error, exiting with mIndexPtr == nullptr mIndexPtr = (uint8*) mIndexBuffer->lock( HardwareBuffer::HBL_READ_ONLY ); mIndexSize = mIndexBuffer->getIndexSize(); mIndexType = mIndexBuffer->getType(); }
//----------------------------------------------------------------------- void MeshReadHelper::unlockAllBuffers() { unlockIndexBuffer(); unlockVertexBuffer(); unlockTexCoordBuffer(); resetCurPointers(); }
// // Creates a copy of the mesh which has no image or material specifications DirectX::Mesh* DirectX::Mesh::cloneOutline( Mesh* out ) { if( !out ) out = new Mesh( ); out->release( ); unsigned int nVertices = m_mesh->GetNumVertices( ); unsigned int nFaces = m_mesh->GetNumFaces( ); unsigned long options = m_mesh->GetOptions( ); unsigned int fvf = m_mesh->GetFVF( ); void* vertices = lockVertexBuffer( D3DLOCK_READONLY ); void* indices = lockIndexBuffer( D3DLOCK_READONLY ); out->create( vertices, indices, fvf, nVertices, nFaces, options ); unlockVertexBuffer( ); unlockIndexBuffer( ); out->update( ); return out; }