gpt4 book ai didi

windows - 获取图形或显存的API

转载 作者:可可西里 更新时间:2023-11-01 13:30:01 25 4
gpt4 key购买 nike

我想获取适配器 RAM 或图形 RAM,您可以使用 API 在显示设置或设备管理器中看到它们。我在 C++ 应用程序中。

我试过在网上搜索,根据我的 RnD,我得出的结论是我们可以从1. DirectX SDK 结构称为 DXGI_ADAPTER_DESC。但是,如果我不想使用 DirectX API 怎么办。2. Win32_videocontroller:但是如果视频 Controller 的可用性处于离线状态,此类并不总是为您提供 adapterRAM 信息。我在vista上查过了。

有没有其他方法获取图形 RAM?

最佳答案

没有办法在 Windows 上直接获取图形 RAM,Windows 会阻止您这样做,因为它保持对显示内容的控制。

但是,您可以创建 DirectX 设备。获取后台缓冲区表面,然后将其锁定。锁定后,您可以随心所欲地填充它,然后解锁并调用 present。但是,这很慢,因为您必须通过总线将视频内存复制回主内存。有些卡片还使用“混合”格式,它在复制时必须取消混合。这会增加执行此操作的时间,有些卡片甚至会禁止您执行此操作。

通常您希望避免直接访问视频卡并让 Windows/DirectX 为您绘图。在 D3D1x 下,我很确定你可以通过 IDXGIOutput 来完成。这确实是要尝试避免的事情......

您可以通过标准 win32 写入线性数组(此示例假定使用 C),但它非常复杂。

首先你需要线性阵列。

    unsigned int* pBits = malloc( width * height );

然后你需要创建一个位图并选择它到DC。

    HBITMAP hBitmap = ::CreateBitmap( width, height, 1, 32, NULL );
SelectObject( hDC, (HGDIOBJ)hBitmap );

然后您可以随意填充 pBits 数组。完成后,您可以设置位图的位。

    ::SetBitmapBits( hBitmap, width * height * 4, (void*)pBits )

当您使用完位图后,不要忘记删除它(使用 DeleteObject)并释放您的线性阵列!

编辑:只有一种方法可以可靠地获取视频内存,那就是通过 DX Diag 界面。看看IDxDiagProviderIDxDiagContainer在 DX SDK 中。

关于windows - 获取图形或显存的API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1866371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com