在 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
我正在开发一个 .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