0

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

4

1 回答 1

1

你曾经对你分配的那些元素调用 DISPOSE 吗?如果不是 - 不,抱歉,设备内存是非托管的,相应的类必须实现 IDisposable 并且您必须清理。

如果您认为 GC 有帮助,那么确实会发生这种情况。

于 2013-01-06T17:30:51.723 回答