在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。
来源
2009-12-08 11:42:12
Goz
是否要**访问图形RAM **或只获得**图形适配器上的RAM **量? – atzz 2009-12-08 12:27:27
只需要图形RAM的数量。 – amritad 2009-12-08 13:37:44