将现有 API 与新类接口

本文关键字:新类 接口 API | 更新日期: 2023-09-27 18:37:04

考虑一下 OpenTK 库,它包装了 c# 的 opengl。它带有 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。我将自己的矩阵类连接到 API 时有哪些选项,既干净又高效。

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

将现有 API 与新类接口

在 C# 中使用低级指针的操作存在不安全的可能性(请参阅详细信息),因此您可以获取第一个浮点元素的地址,并将其传递给 OpenTK 的函数。

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