这应该是 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