将现有API与新类连接

时间:2015-01-10 07:38:58

标签: c# opentk

考虑为c#包装opengl的OpenTK库。它带有API期望您使用的内置矩阵类。例如,此方法中的重载。

    public static void UniformMatrix4(int location, bool transpose, ref Matrix4 matrix);
    public static void UniformMatrix4(int location, bool transpose, ref Matrix4d matrix);
    public static void UniformMatrix4(int location, int count, bool transpose, double* value);
    public static void UniformMatrix4(int location, int count, bool transpose, double[] value);
    public static void UniformMatrix4(int location, int count, bool transpose, float* value);
    public static void UniformMatrix4(int location, int count, bool transpose, float[] value);
    public static void UniformMatrix4(int location, int count, bool transpose, ref double value);
    public static void UniformMatrix4(int location, int count, bool transpose, ref float value);

所有API都遵循相同的形式。作为使用内置矩阵类的替代方法,我可以使用浮点指针或浮点数组等。

现在,我不想使用OpenTK的矩阵类或其他任何数学结构,但我确实想使用它们的API。我将自己的Matrix类与api连接起来有什么选择,既干净又高效。

我的矩阵类的内部存储不使用float []而是使用float字段。我不认为有一种方法可以提取浮点数组以传递给API,而不会将字段无效地复制到新数组中。

1 个答案:

答案 0 :(得分:1)

在C#中使用低级指针的操作是不安全的(参见details),这样你就可以获得第一个float元素的地址,并且可以将它传递给OpenTK& #39;的功能。

我认为,您可以使用"固定数组" (请参阅相同链接),如果您可以重新实现自己的Matrix类。