amr*_*tad 5 windows directx graphics
我想获得adpater RAM或图形RAM,您可以在显示设置或设备管理器中使用API查看.我在C++应用程序中.
我尝试过在网上搜索,根据我的RnD,我得出结论,我们可以从1.DirectX SDK结构中获取图形内存信息,称为DXGI_ADAPTER_DESC.但是,如果我不想使用DirectX API怎么办?2. Win32_videocontroller:但是如果视频控制器的可用性处于脱机状态,则此类并不总是为您提供适配器信息.我已经在vista上检查了它.
有没有其他方法来获得图形RAM?
没有办法在 Windows 上直接获取图形 RAM,Windows 会阻止您这样做,因为它保持对显示内容的控制。
但是,您可以创建 DirectX 设备。获取后台缓冲区表面,然后锁定它。锁定后,您可以在其中填充您想要的任何内容,然后解锁并呼叫出席。不过,这很慢,因为您必须通过总线将视频内存复制回主内存。有些卡还使用“swizzled”格式,在复制时必须取消swizzle。这会增加更多的时间,有些卡甚至会禁止你这样做。
一般来说,您希望避免直接访问视频卡并让 Windows/DirectX 为您进行绘图。不过,在 D3D1x 下,我非常确定您可以通过 IDXGIOutput 来完成此操作。但这确实是需要尝试和避免的事情......
您可以通过标准 win32 写入线性数组(此示例假设为 C),但它相当复杂。
首先你需要线性阵列。
unsigned int* pBits = malloc( width * height );
Run Code Online (Sandbox Code Playgroud)
然后你需要创建一个位图并将其选择到DC。
HBITMAP hBitmap = ::CreateBitmap( width, height, 1, 32, NULL );
SelectObject( hDC, (HGDIOBJ)hBitmap );
Run Code Online (Sandbox Code Playgroud)
然后您可以根据需要填充 pBits 数组。完成后,您可以设置位图的位。
::SetBitmapBits( hBitmap, width * height * 4, (void*)pBits )
Run Code Online (Sandbox Code Playgroud)
当您使用完位图后,不要忘记删除它(使用DeleteObject)并释放您的线性数组!
编辑:只有一种方法可以可靠地获取视频内存,那就是通过 DX Diag 接口。查看DX SDK 中的IDxDiagProvider和IDxDiagContainer 。
| 归档时间: |
|
| 查看次数: |
4393 次 |
| 最近记录: |