在GPU C#上获取Vsync状态



我正在开发一个.NET核心应用程序,我需要在其中检索有关系统的尽可能多的信息。我已经设法检索了很多东西,但是,我正在努力找出GPU是否已打开Vsync。我尝试了NVIDIA GPU的NVAPI包装器,但由于尝试初始化它时会引发异常(无法加载NVAPI64.dll),因此无法使其工作。原始的NVAPI用C编写,并为此特定的东西制作包装器似乎太多了。我想必须有一种更简单的方法来获取此信息。

我还尝试使用ManagementObjectSearcher来获取该值,如下所示,但无论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提供了托管包装器,有关更多信息,请参见此处。

首先,添加与.NET核心兼容的Nuget软件包:

Install-Package OpenTK.NetStandard -Version 1.0.4 

然后,您可以使用GameWindow实例创建一个虚拟类,您将可以访问所需的信息(以及其他):

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

最新更新