Fix a bug where the index buffer was being re-copied every call

This commit is contained in:
Luke Usher 2017-04-28 22:56:34 +01:00
parent 5169141d4d
commit e88268b95f
1 changed files with 7 additions and 5 deletions

View File

@ -1532,7 +1532,7 @@ void CxbxUpdateActiveIndexBuffer
// If the size has changed, free the buffer so it will be re-created // If the size has changed, free the buffer so it will be re-created
if (g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer != nullptr && if (g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer != nullptr &&
g_ConvertedIndexBuffers[pIndexData].IndexCount != IndexCount) { g_ConvertedIndexBuffers[pIndexData].IndexCount < IndexCount) {
g_ConvertedIndexBuffers[pIndexData].Hash = 0; g_ConvertedIndexBuffers[pIndexData].Hash = 0;
g_ConvertedIndexBuffers[pIndexData].IndexCount = 0; g_ConvertedIndexBuffers[pIndexData].IndexCount = 0;
g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer->Release(); g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer->Release();
@ -1550,7 +1550,7 @@ void CxbxUpdateActiveIndexBuffer
&g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer); &g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer);
if (FAILED(hRet)) { if (FAILED(hRet)) {
CxbxKrnlCleanup("DxbxUpdateActiveIndexBuffer: IndexBuffer Create Failed!"); CxbxKrnlCleanup("CxbxUpdateActiveIndexBuffer: IndexBuffer Create Failed!");
} }
} }
@ -1563,12 +1563,14 @@ void CxbxUpdateActiveIndexBuffer
g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer->Lock(0, 0, &pData, 0); g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer->Lock(0, 0, &pData, 0);
if (pData == nullptr) { if (pData == nullptr) {
CxbxKrnlCleanup("DxbxUpdateActiveIndexBuffer: Could not lock index buffer!"); CxbxKrnlCleanup("CxbxUpdateActiveIndexBuffer: Could not lock index buffer!");
} }
DbgPrintf("DxbxUpdateActiveIndexBuffer: Copying %d indices (D3DFMT_INDEX16)\n", IndexCount); printf("CxbxUpdateActiveIndexBuffer: Copying %d indices (D3DFMT_INDEX16)\n", IndexCount);
memcpy(pData, pIndexData, IndexCount * 2); memcpy(pData, pIndexData, IndexCount * 2);
g_ConvertedIndexBuffers[pIndexData].Hash = XXHash32::hash(pIndexData, IndexCount * 2, 0);
g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer->Unlock(); g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer->Unlock();
} }
@ -1579,7 +1581,7 @@ void CxbxUpdateActiveIndexBuffer
// Activate the new native index buffer : // Activate the new native index buffer :
HRESULT hRet = g_pD3DDevice8->SetIndices(g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer, index); HRESULT hRet = g_pD3DDevice8->SetIndices(g_ConvertedIndexBuffers[pIndexData].pHostIndexBuffer, index);
if (FAILED(hRet)) { if (FAILED(hRet)) {
CxbxKrnlCleanup("DxbxUpdateActiveIndexBuffer: SetIndices Failed!"); CxbxKrnlCleanup("CxbxUpdateActiveIndexBuffer: SetIndices Failed!");
} }
// Make sure the caller knows what StartIndex it has to use to point to the indicated index start pointer : // Make sure the caller knows what StartIndex it has to use to point to the indicated index start pointer :