//-----------------------------------------------------------------------
	//-----------------------------------------------------------------------
	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();
	}
Example #3
0
																																						//
// 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;
}