在 GPU C# 上获取 Vsync 状态

Get Vsync status on GPU C#

我正在开发一个 .net 核心应用程序,我需要在其中检索尽可能多的系统信息。我已经设法检索了很多,但是,我正在努力找出 GPU 是否打开了 Vsync。我已经为 Nvidia GPU 尝试了 NvApi Wrapper,但无法正常工作,因为它在尝试初始化时抛出异常(无法加载 nvapi64.dll)。最初的 NvApi 是用 C 语言编写的,只为这个特定的东西制作一个 Wrapper 似乎有点太多了。我想一定有更简单的方法来获取这些信息。

我也尝试使用 ManagementObjectSearcher 获取值,如下所示,但它不会 return vsync 是否处于活动状态:

var managementObjectSearcher = new ManagementObjectSearcher("select * from Win32_VideoController");
foreach (ManagementObject obj in managementObjectSearcher.Get())
{
    foreach(var prop in obj.Properties)
    {
        Console.WriteLine($"Name: {prop.Name} Value: {prop.Value}");
    }
}

我可以使用开源库 OpenTK 获取您需要的信息,它为 OpenGL 提供了托管包装器,有关详细信息,请参阅 here

首先添加兼容.net core的NuGet包:

Install-Package OpenTK.NetStandard -Version 1.0.4 

然后,您只需创建一个带有 GameWindow 实例的虚拟 class,您就可以访问您正在寻找的信息(以及其他信息):

public sealed class DummyInfoGameWindow : GameWindow
{
    private DummyInfoGameWindow() {}

    public static DummyInfoGameWindow InitAndGetInfo()
    {
        return new DummyInfoGameWindow();
    }
}

然后只需从您的代码中调用静态方法:

static void Main(string[] args)
{
    var info = DummyInfoGameWindow.InitAndGetInfo();

    Console.WriteLine($"VSync enabled {info.VSync}");

    Console.Read();
}

输出为:

VSync enabled On