這應該是XNA的錯誤。GraphicsDevice.SetVertexBuffers內存不足
我有兩個3D模型,currentModel和nextModel,我想對這兩個模型應用特殊效果,說一個到另一個。
代碼:
void DrawModelMorphing(Model currentModel, Model nextModel)
{
int targetIndex = 0;
foreach(var mesh in currentModel.Meshes.Count)
{
foreach(var mp in mesh.MeshParts)
{
GraphicsDevice.Indices = mp.IndexBuffer;
VertexBufferBinding[] vertexBufferBindings = new VertexBufferBinding[2];
vertexBufferBindings[0] = new VertexBufferBinding(mp.VertexBuffer, mp.VertexOffset);
vertexBufferBindings[1] = new VertexBufferBinding(nextModel.Meshes[targetIndex].MeshParts[0].VertexBuffer, nextModel.Meshes[targetIndex].MeshParts[0].VertexOffset);
GraphicsDevice.SetVertexBuffers(vertexBufferBindings);
mEffect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawIndexedPrimitives(
PrimitiveType.TriangleList,
0,
0,
mesh.MeshParts[0].NumVertices,
mesh.MeshParts[0].StartIndex,
mesh.MeshParts[0].PrimitiveCount);
//vertexBufferBindings[0].VertexBuffer.Dispose(); //exception
//vertexBufferBindings[1].VertexBuffer.Dispose(); //exception
}
}
targetIndex++;
}
}
GraphicsDevice.SetVertexBuffers
會造成嚴重的內存泄露,300MB在30分鐘內,然後在 「內存不足」
這裏是不同的函數調用一個類似的問題: OutOfMemory Exception when drawing cube
我測試過的東西:
1)事件如果我定義全球10個,問題依然存在。
2)如果我處理頂點緩衝區,會有異常。 「Microsoft.Xna.Framework.dll中發生類型'System.ObjectDisposedException'的第一次機會異常」
3)GC和某些第三方工具(如freeMem)也不起作用。
任何人都可以幫忙嗎?
我幾乎想放棄在我的項目中使用XNA。
謝謝。
編輯:
的解決方案是緩存我所需要的一切,如:VertexBuffer和紋理
我試着修復你的代碼格式,但似乎你在兩個循環之外都有'targetIndex ++;'。也許這是造成這個? – user1306322
幾乎沒有。 IndexOutOf BOund異常......你知道......他們被拋出。但創建新的索引緩衝區而不處理它們 - 這就創造了這個。 – TomTom
您是否曾嘗試對兩個頂點緩衝區使用「using」語句? – Deukalion