c# - 从参数调用方法(使用任何参数)

标签 c# opentk

我正在尝试使用 OpenTK 编写游戏。 每次从 GL 类调用某些内容时,我都想检查错误。

所以,比方说,我有这门课:

public static class GLCheck
{
    public static void Call(function f)
    {
        // Call f function
        CheckError();
    }

    public static void CheckError()
    {
        ErrorCode errorCode = GL.GetError();

        if (errorCode != ErrorCode.NoError)
            Console.WriteLine("Error!");
    }
}

所以我可以这样调用函数:

GLCheck.Call(GL.ClearColor(Color.White));
GLCheck.Call(GL.MatrixMode(MatrixMode.Modelview));
GLCheck.Call(GL.PushMatrix());

我该怎么做? 谢谢

---------------- 答案: ----------------

感谢您的回答! 我刚刚意识到所有答案都在使用委托(delegate)(ActionFunc<>) 在 .NET 2.0 上,这是不可用的,因此您必须创建自己的,这里是我的 GLCheck 类:

public static class GLCheck
{
    public delegate void Action();
    public delegate void Action<T1, T2>(T1 arg1, T2 arg2);
    public delegate void Action<T1, T2, T3>(T1 arg1, T2 arg2, T3 arg3);
    public delegate void Action<T1, T2, T3, T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
    public delegate TResult Func<TResult>();
    public delegate TResult Func<T, TResult>(T arg);
    public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
    public delegate TResult Func<T1, T2, T3, TResult>(T1 arg1, T2 arg2, T3 arg3);
    public delegate TResult Func<T1, T2, T3, T4, TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);

    public static void Call(Action callback)
    {
        callback();
        CheckError();
    }

    public static void Call<T>(Action<T> func, T parameter)
    {
        func(parameter);
        CheckError();
    }
}

再次感谢您的回答!

最佳答案

它不会那么整洁,但您可以使用 Lambda 函数轻松完成此操作:

GLCheck.Call(() => GL.ClearColor(Color.White));
GLCheck.Call(() => GL.MatrixMode(MatrixMode.Modelview));
GLCheck.Call(() => GL.PushMatrix());

Call 的定义如下:

public static void Call(Action a)
{
    a();
    CheckError();
}

对于没有参数的方法 GL 方法,您可以更干净地传递它们:

GLCheck.Call(GL.PushMatrix);

(注意PushMatrix后没有()。)

关于c# - 从参数调用方法(使用任何参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21108940/

相关文章:

c# - 也许在 Linq 中找到了一个功能。具有多个字段的 Groupby

c# - Asp.net Web 应用程序基于角色的身份验证

c# - 错误 : Unable to load DLL '.dll' : The specified module could not be found.(HRESULT : 0x8007007E) - What is this error? 异常

c# - Opengl - "fullscreen"纹理渲染性能问题

objective-c - 开放托克 : OTCameraCaptureResolutionHigh equivalent variable in swift

c# - 如何捕获使用opentk绘制的图像

c# - PrintDialog.PrinterSettings 不工作

c# - 使用 C# 枚举远程系统上的 Windows 用户组成员

c# - 如何在 OpenTK 中设置无限 FPS?

c# - 在 C# 中使用交错顶点的 VBO