【发布时间】:2010-11-05 01:29:05
【问题描述】:
背景: 我正在使用 DirectX 9.0 托管库将 3d 点数组转换为 2d 屏幕坐标。为了速度,我使用 UnsafeNativeMethods 进行所有转换。
问题:
如果使用我的自定义线剪辑功能,我的应用程序会死掉而没有抛出任何异常,我花了一段时间才发现它抛出了一个无法捕获的System.ExecutionEngineException。由于我的剪辑功能的最后两行,我已将其范围缩小到发生。
List<Vector3> verticesAfterClipping = new List<Vector3>;
public unsafe void ClipLine(Line lineToClip)
{
this.verticesAfterClipping.Clear();
// Clipping algorithm happens here... (this is psuedo-code of what it does)
foreach(Vertex in lineToClip.Vertices)
{
bool thisIsClipped = // Set to whether this vertex is clipped
bool lastWasClipped = // Set to whether last vertex was clipped
if(thisIsClipped == false && lastWasClipped == true)
{
verticesAfterClipping.Add( /* intersection on clipping plane */ );
verticesAfterClipping.Add( /* thisVertex */ );
}
else if (thisIsClipped == false && lastWasClipped == false)
{
verticesAfterClipping.Add( /* thisVertex */ );
}
else if (thisIsClipped == true && lastWasClipped == false)
{
verticesAfterClipping.Add(/* intersection on clipping plane */);
}
}
// THIS IS WHERE BAD THINGS HAPPEN
lineToClip.Vertices = new Vertex[verticesAfterClipping.Count];
verticesAfterClipping.CopyTo(lineToClip.Vertices, 0);
}
当verticesAfterClipping 列表被复制到lineToClip 顶点时,lineToClip 对象随后被传递给将这些顶点转换为二维顶点的 UnsafeNativeMethod。从我在调试模式下单步执行它时所看到的一切来看,它工作得非常好,直到它死掉。
我根本不知道哪里出了问题。任何帮助将不胜感激。
【问题讨论】:
标签: c# exception managed-directx