这应该是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,然后“内存不足”
以下是不同函数调用的一个类似问题: OutOfMemory Exception when drawing cube
我测试过的东西:
1)如果我全局定义vertexBufferBindings[]
,则问题仍然存在。
2)如果我处理顶点缓冲区,则会有异常。 “Microsoft.Xna.Framework.dll中出现'System.ObjectDisposedException'类型的第一次机会异常”
3)GC和某些第三方工具(如freeMem)也不起作用。
有人可以帮忙吗?
我几乎想放弃在我的项目中使用XNA。
感谢。
编辑:
解决方案是缓存我需要的所有内容,例如:VertexBuffer和Textural
答案 0 :(得分:1)
您是否曾对您分配的元素调用DISPOSE?如果不是 - 不,抱歉,设备内存是不受管理的,相应的类必须实现IDisposable,你必须清理。
如果您认为GC有帮助,那么确实会发生这种情况。