加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 用于获取图形或视频内存的API

发布时间:2020-12-14 01:58:16 所属栏目:Windows 来源:网络整理
导读:我想获得adpater RAM或图形RAM,您可以在显示设置或设备管理器中使用API??查看.我在C申请中. 我尝试过在网上搜索,根据我的RnD,我得出结论,我们可以从中获取图形内存信息 1. DirectX SDK结构名为DXGI_ADAPTER_DESC.但是,如果我不想使用DirectX API怎么办? 2.
我想获得adpater RAM或图形RAM,您可以在显示设置或设备管理器中使用API??查看.我在C申请中.

我尝试过在网上搜索,根据我的RnD,我得出结论,我们可以从中获取图形内存信息
1. DirectX SDK结构名为DXGI_ADAPTER_DESC.但是,如果我不想使用DirectX API怎么办?
2. Win32_videocontroller:但是如果视频控制器的可用性处于脱机状态,则此类并不总是为您提供适配器信息.我已经在vista上检查了它.

有没有其他方法来获得图形RAM?

解决方法

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

但是,您可以创建DirectX设备.获取后缓冲区表面然后将其锁定.锁定后,您可以填写任何您想要的,然后解锁并调用当前.但这很慢,因为你必须将视频内存通过总线复制回主内存.有些卡片也使用“混合”格式,它必须在复制时不要调整.这增加了进行操作的时间,有些卡甚至会禁止你这样做.

一般情况下,您希望避免直接访问视频卡,让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)并释放线性阵列!

编辑:只有一种方法可靠地获取视频RAM,即通过DX Diag接口.在DX SDK中查看IDxDiagProvider和IDxDiagContainer.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读