在OpenGL中,通常,对gl.TexImage2D
的调用需要void*
作为最终数据参数。可以稍后传递数据,因此最后一个参数也可以设置为0
。在F#中,我找不到将0
强制转换为voidptr
的干净方法。
以下内容对我有用,但是有更清洁的解决方案吗?
let emptyData: array<byte> = [||]
use emptyPtr = fixed emptyData
let voidPtr = emptyPtr |> NativePtr.toVoidPtr
gl.TexImage2D(
GLEnum.Texture2D,
0,
int GLEnum.Red,
atlasWidth,
atlasHeight,
0,
GLEnum.Red,
GLEnum.UnsignedByte,
voidPtr
)
voidptr
类型是System.Void*
的别名,但是.NET编译器不希望我们直接使用此类型。因此,提供了IntPtr.ToPointer()
可以将任何指针转换为空指针。根据您的情况,您想转换一个空指针(即0n
),因此可以使用
IntPtr.Zero.ToPointer()
您也可以使用0n.ToPointer()
,正如另一位评论者所指出的,Unchecked.defaultof<_>
也可以使用,因为编译器可以在此处推断您的需求。 (IntPtr.Zero.ToPointer()
是最易读的IMO)。