//=============================================== //頂点情報のコンバート //=============================================== //[input] // pD3DX9:Direct3Dデバイス //[return] // HREULT値 //=============================================== bool CXMesh::ConvertVertex(LPDIRECT3DDEVICE9 pD3DX9) { LPD3DXBUFFER pD3DXMtrlBuffer = NULL; /*Vertex Bufferにコピーする*/ D3DVERTEX* pSrc; D3DVERTEX* pDest; LPDIRECT3DINDEXBUFFER9 pSrcIndex; WORD* pISrc; WORD* pIDest; /*VertexBuffer情報取得*/ LPDIRECT3DVERTEXBUFFER9 pVB; MeshData.pMesh->GetVertexBuffer(&pVB); D3DVERTEXBUFFER_DESC Desc; pVB->GetDesc( &Desc ); DWORD nMeshVertices = MeshData.pMesh->GetNumVertices(); DWORD nMeshFaces = MeshData.pMesh->GetNumFaces(); /*頂点バッファを作成*/ pD3DX9->CreateVertexBuffer( Desc.Size, 0, MeshData.pMesh->GetFVF(), D3DPOOL_MANAGED, &m_pMeshVB, NULL ); /*インデックスバッファを作成*/ pD3DX9->CreateIndexBuffer( nMeshFaces * 3 * sizeof(WORD), 0, D3DFMT_INDEX16, D3DPOOL_MANAGED, &m_pMeshIndex, NULL ); /*頂点バッファをコピー*/ pVB->Lock(0,0,(void**)&pSrc,0); m_pMeshVB->Lock(0,0,(void**)&pDest,0); CopyMemory( pDest, pSrc, Desc.Size ); pVB->Unlock(); pVB->Release(); m_pMeshVB->Unlock(); /*インデックスのコピー*/ MeshData.pMesh->GetIndexBuffer( &pSrcIndex ); pSrcIndex->Lock( 0, 0, (void**)&pISrc, 0 ); m_pMeshIndex->Lock( 0, 0, (void**)&pIDest, 0 ); CopyMemory( pIDest, pISrc, nMeshFaces * 3 * sizeof( WORD ) ); pSrcIndex->Unlock(); m_pMeshIndex->Unlock(); pSrcIndex->Release(); return true; }