Exemplo n.º 1
0
	void MeshRenderer::Reset(MeshDataPtr pMD)
	{
		if(pMD == NULL)
		{
			return;
		}

		MeshPtr pMesh = pMD->GetMesh();
		if(pMesh == nullptr)
		{
			return;
		}

		if(m_pIndexBuffer)
		{
			m_pIndexBuffer->Release();
			m_pIndexBuffer.reset();
		}
		if(m_pVertexBuffer)
		{
			m_pVertexBuffer->Release();
			m_pVertexBuffer.reset();
		}

		m_Subsets.clear();


		if(pMesh->GetIndexData() != nullptr)
		{
			m_pIndexBuffer = m_pRS->GetSysGraphics()->CreateBuffer(BT_INDEX_BUFFER, pMesh->GetIndexDataBytes(), pMesh->GetIndexData(), false);
		}
		m_pVertexBuffer = m_pRS->GetSysGraphics()->CreateBuffer(BT_VERTEX_BUFFER, pMesh->GetVertexDataBytes(), pMesh->GetVertexData(), false);

		for(int i = 0; i < pMesh->GetSubMeshCount(); ++i)
		{
			SubMeshPtr pSub = pMesh->GetSubMesh(i);

			SubMeshRenderDataPtr pSR = m_pManager->GetAllocator()->AllocObject<SubMeshRenderData, GameObjectPtr>(GetGameObject());
			pSR->Create(pSub, m_pIndexBuffer, m_pVertexBuffer);
			m_Subsets.push_back(pSR);
		}
	}