2017-04-10 113 views
0

C++代碼:設定值TexImage3D功能SharpGL C#

vector<RGB> LUT; //creating a vector3 array 
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 16, 16, 16, 0, GL_RGB,GL_FLOAT, &LUT[0]); 

上述C++代碼工作正常。 &LUT[0]被接受,因爲它是類型的使用SharpGL const GLvoid * data

C#代碼:

Vector3[] vec3 = new Vector3[2]; //creating a vector3 array 
gl.TexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 16, 16, 16, 0, GL_RGB,GL_FLOAT, &LUT[0]); 

我的問題是,在SharpGL &LUT[0]不接受,指出它僅接受IntPtr的類型的消息。無論如何,我可以解決這個問題嗎?

回答

0

您可以將float[]打包爲IntPtr

float[] data = { 
    ... 
}; 
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); 
IntPtr dataPtr = handle.AddrOfPinnedObject(); 
var size = Marshal.SizeOf(typeof(float)) * data.Length; 

請記住在撥打gl.TexImage3D()之後將其釋放。

handle.Free(); 
+0

非常感謝。我會盡力讓你知道...... –

+0

@conamx你有沒有想過去測試它?它有用嗎? – Vallentin

+0

首先,謝謝。是的,按照你的指示,我可以初始化** gl.TexImage3D()**函數。程序已成功編譯。但是,當我運行該程序時,出現錯誤** FatalExecutionEngineError **。我敢肯定這是與SharpGL庫有關的,所以這次我試着用openTK庫 –