Không có cách nào để trực tiếp nhận RAM đồ họa trên cửa sổ, cửa sổ ngăn bạn thực hiện việc này vì nó duy trì quyền kiểm soát nội dung được hiển thị.
Bạn CÓ THỂ, tuy nhiên, hãy tạo thiết bị DirectX. Lấy bề mặt đệm sau và khóa lại. Sau khi khóa bạn có thể điền nó với bất cứ điều gì bạn muốn và sau đó mở khóa và gọi hiện tại. Điều này là chậm, tuy nhiên, khi bạn phải sao chép bộ nhớ video trở lại trên xe buýt vào bộ nhớ chính. Một số thẻ cũng sử dụng các định dạng "bị xáo trộn" mà nó phải bỏ đi khi nó sao chép. Điều này cho biết thêm thời gian để làm điều đó và một số thẻ thậm chí sẽ cấm bạn làm điều đó.
Nói chung, bạn muốn tránh truy cập trực tiếp vào thẻ video và để cửa sổ/DirectX thực hiện bản vẽ cho bạn. Dưới D3D1x Im 'khá chắc chắn bạn có thể làm điều đó thông qua một IDXGIOutput mặc dù. Nó thực sự là một cái gì đó để thử và tránh mặc dù ...
Bạn có thể ghi vào một mảng tuyến tính thông qua tiêu chuẩn win32 (Ví dụ này giả định C) nhưng nó khá tham gia.
Trước tiên, bạn cần mảng tuyến tính.
unsigned int* pBits = malloc(width * height);
Sau đó, bạn cần tạo bitmap và chọn bitmap đó vào DC.
HBITMAP hBitmap = ::CreateBitmap(width, height, 1, 32, NULL);
SelectObject(hDC, (HGDIOBJ)hBitmap);
Sau đó, bạn có thể điền vào mảng pBits như bạn muốn. Khi bạn đã hoàn thành, bạn có thể thiết lập bit bitmap.
::SetBitmapBits(hBitmap, width * height * 4, (void*)pBits)
Khi bạn hoàn tất việc sử dụng bitmap, đừng quên xóa nó (Sử dụng DeleteObject) VÀ giải phóng mảng tuyến tính của bạn!
Chỉnh sửa: Chỉ có một cách đáng tin cậy để nhận được ram video và đó là đi qua các giao diện DX Diag. Hãy xem IDxDiagProvider và IDxDiagContainer trong DX SDK.
Bạn có muốn ** truy cập RAM đồ họa ** hoặc chỉ nhận được ** lượng RAM ** trên bộ điều hợp đồ họa không? – atzz
Chỉ muốn lượng RAM đồ họa. – amritad