2013-05-13 59 views
1

我遇到訪問衝突異常隨機在GLUtessVertexProc回調使用GLUtessellator時,任何人都可以幫忙嗎?非常感謝!這裏是主代碼:glutesellator嘗試讀取或寫入受保護的內存

public partial class Tessellation 
    { 
     [UnmanagedFunctionPointerAttribute(CallingConvention.StdCall)] 
     public delegate void GLUtessVertexProc(IntPtr data); 

    private List<Vector3> _buf = new List<Vector3>(); 
    private static readonly GLUtessVertexProc tessVertex = data => { 
     double* dt = (double*)data; 
     //exception occur... 
     _buf.Add(new Vector3(dt[0], dt[1], dt[2])); 
    }; 

    public List<Vector3> Tessellate(List<Vector3> outerBound) 
    { 
     _buf.Clear(); 

     GLUtesselator tess = GLU.gluNewTess(); 
     GLU.gluTessCallback(tess, GLU.GLU_TESS_BEGIN, tessBegin); 
     GLU.gluTessCallback(tess, GLU.GLU_TESS_END, tessEnd); 
     GLU.gluTessCallback(tess, GLU.GLU_TESS_ERROR, tessError); 
     GLU.gluTessCallback(tess, GLU.GLU_TESS_VERTEX, tessVertex); 
     GLU.gluTessCallback(tess, GLU.GLU_TESS_COMBINE, tessCombine); 
     GLU.gluTessCallback(tess, GLU.GLU_TESS_EDGE_FLAG, tessEdgeFlag); 
     GLU.gluTessProperty(tess, GLU.GLU_TESS_WINDING_RULE, GLU.GLU_TESS_WINDING_ODD); 
     GLU.gluTessBeginPolygon(tess, IntPtr.Zero); 
     //vertex data 
     GLU.gluTessEndPolygon(tess); 
     GLU.gluDeleteTess(tess); 

     return _buf.ToList(); 
    } 

} 
+0

我沒有看到你在哪裏設置互操作或你叫'tessVertex'。 – Amy 2013-07-08 16:38:13

回答

2

我遇到了同樣的問題,因爲我使用dllimport從glu.dll導入命令。我沒有設法解決它。最後,我在這裏找到GLU tesselation的C#端口:https://github.com/speps/LibTessDotNet,我直接使用它而不是從dll導入。

這個庫足夠滿足我的需求。這可能可能是您的一個解決方案。

+0

非常感謝,我會盡快嘗試。 – daidudu 2014-01-24 09:38:32

+0

該庫可用,但渲染複雜多邊形時性能較差。不管怎麼說,還是要謝謝你。 – Howard 2014-12-24 09:35:18

相關問題