这应该是 XNA 的错误。
我有两个 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
会造成严重的内存泄漏,30分钟300MB,然后“Out of Memory”
这是不同函数调用的一个类似问题: 绘制多维数据集时出现OutOfMemory Exception
我测试过的东西:
1)如果我vertexBufferBindings[]
全局定义事件,问题仍然存在。
2)如果我处理顶点缓冲区,就会出现异常。“Microsoft.Xna.Framework.dll 中发生了‘System.ObjectDisposedException’类型的第一次机会异常”
3) GC 和诸如 freeMem 之类的一些 3rd 方工具也将不起作用。
有人可以帮忙吗?
我几乎想放弃在我的项目中使用 XNA。
谢谢。
编辑:
解决方案是缓存我需要的所有内容,例如:VertexBuffer 和 Textural