Windows에서 그래픽 RAM을 직접 가져올 방법이 없으며 Windows는 표시되는 내용을 제어 할 수 있으므로이 작업을 수행하지 못하게합니다.
그러나 DirectX 장치를 만들 수는 있습니다. 뒤쪽 버퍼 표면을 가져 와서 잠급니다. 잠금 후 원하는대로 무엇이든 채울 수 있으며 현재 잠금을 해제하고 전화 할 수 있습니다. 하지만 비디오 메모리를 버스를 통해 메인 메모리에 다시 복사해야하므로 느립니다. 일부 카드는 또한 "swizzled"포맷을 사용합니다. 이것은 그것을하기에 더 많은 시간을 추가하고 일부 카드는 심지어 그것을하지 못하게합니다.
일반적으로 비디오 카드에 직접 액세스하지 않고 Windows/DirectX에서 그림을 그릴 수 있도록하고 싶습니다. D3D1x Im에서는 꽤 IDXGIOutput을 통해 할 수 있다고 확신합니다. 그것은 실제로 시도하고 피할 수있는 무언가입니다 ...
표준 win32 (이 예제는 C로 가정)를 통해 선형 배열에 쓸 수 있지만 상당히 복잡합니다.
먼저 선형 배열이 필요합니다.
그런 다음 비트 맵을 만들어 DC로 선택해야합니다.
HBITMAP hBitmap = ::CreateBitmap(width, height, 1, 32, NULL);
SelectObject(hDC, (HGDIOBJ)hBitmap);
그런 다음 원하는대로 pBits 배열을 채울 수 있습니다. 작업이 끝나면 비트 맵 비트를 설정할 수 있습니다.
::SetBitmapBits(hBitmap, width * height * 4, (void*)pBits)
비트 맵 사용을 마쳤 으면 (DeleteObject 사용) 반드시 삭제하고 선형 배열을 해제하십시오!
편집 : 비디오 램을 안정적으로 얻는 유일한 방법은 DX Diag 인터페이스를 통과하는 것입니다. DX SDK에서 IDxDiagProvider과 IDxDiagContainer을보십시오.
출처
2009-12-08 11:42:12
Goz
** 그래픽 RAM **에 액세스 하시겠습니까, 아니면 ** 그래픽 어댑터에 ** RAM 양 **을 가져 오시겠습니까? – atzz
그냥 그래픽 RAM의 양을 원한다. – amritad