2009-12-08 5 views
5

디스플레이 설정 또는 API를 사용하는 장치 관리자에서 볼 수있는 adpater RAM 또는 그래픽 RAM을 얻고 싶습니다. 저는 C++ 응용 프로그램에 있습니다.그래픽 또는 비디오 메모리를 가져 오는 API

그물에 seraching을 시도하고 내 RnD에 따라 우리가 에서 그래픽 메모리 정보를 얻을 수 있다고 결론을 내 렸습니다. 1. DXXI_ADAPTER_DESC라는 DirectX SDK 구조. 하지만 DirectX API를 사용하고 싶지 않으면 어떻게해야할까요? 2. Win32_videocontroller : 비디오 컨트롤러의 가용성이 오프라인이면이 클래스가 adapterRAM 정보를 제공하지는 않습니다. 나는 비스타에서 그것을 검사했다.

다른 방법으로 그래픽 RAM을 사용할 수 있습니까?

+0

** 그래픽 RAM **에 액세스 하시겠습니까, 아니면 ** 그래픽 어댑터에 ** RAM 양 **을 가져 오시겠습니까? – atzz

+0

그냥 그래픽 RAM의 양을 원한다. – amritad

답변

3

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에서 IDxDiagProviderIDxDiagContainer을보십시오.

+0

링크가 끊어졌습니다 (최소한 직접적으로 연결되지는 않습니다). – Ruslan

1

사용자 모드 스레드는 프레임 버퍼를 포함하여 하드웨어 장치에서 매핑 된 메모리 영역 및 I/O에 액세스 할 수 없습니다. 어쨌든, 당신이하고 싶은 것은 무엇입니까? 프레임 버퍼에 직접 액세스 할 수 있다고 가정합니다. 이제는 프레임 버퍼에서 가능한 많은 픽셀 형식을 처리해야합니다. 32 비트 RGBA 또는 ARGB 조직을 사용할 수 있습니다. 15/16/24 비트 디스플레이 (RGBA555, RGBA5551, RGBA4444, RGBA565, RGBA888 ...)가 있습니다. YUV 기반의 비디오 표면 포맷 (오버레이)도 지원하고 싶지 않은 경우입니다.

그래서 디스플레이 드라이버 및/또는 하위 API를 사용하여 그러한 노력을하십시오.

디스플레이 화면 (프레임 버퍼 메모리와 정확히 같지 않음, 개념 상 거의 동일하지만)에 쓰기를 원한다면 많은 옵션이 있습니다. DX, Win32 또는 SDL 라이브러리 (libsdl)를 사용해보십시오.

2

Win32_videocontroller는 gfx 메모리 양을 얻는 가장 좋은 과정입니다. 이것이 Doom3 소스에서의 작업입니다.

"비디오 컨트롤러의 가용성은 오프라인입니다. 나는 비스타에서 확인했습니다." 어떤 상황에서 비디오 컨트롤러가 오프라인 상태입니까? 덧붙여서, you can find the Doom3 source here. 찾고있는 기능은 Sys_GetVideoRam이며 win_shared.cpp 파일에 있습니다. 솔루션 전체 검색을 수행하면 검색 기능이 활성화됩니다.

관련 문제