2009-12-08 18 views
5

APIを使用してディスプレイ設定またはデバイスマネージャで表示できるadpater RAMまたはグラフィックスRAMを取得したいとします。私はC++アプリケーションです。グラフィックスまたはビデオメモリを取得するためのAPI

私はRnDによると、グラフィックスメモリ情報を から得ることができると結論づけました。DXGI_ADAPTER_DESCというDirectX SDK構造。しかし、DirectX APIを使用したくない場合はどうしたらいいですか? 2. Win32_videocontroller:ビデオコントローラの使用可能性がオフラインの場合、このクラスはアダプタRAM情報を提供するとは限りません。私は眺めでそれをチェックした。

他にグラフィックスRAMを取得する方法はありますか?

+0

**グラフィックスRAM **にアクセスしたいのですか、または**グラフィックスアダプターの** RAM量**を取得しますか? – atzz

+0

グラフィックスRAMの量を欲しいだけです。 – amritad

答えて

3

グラフィックスRAMをウィンドウに直接表示する方法はありません。ウィンドウは、表示されているものを制御しながらこれを行うことを防ぎます。

ただし、DirectXデバイスを作成することはできません。バックバッファー面を取得してロックします。ロック後、あなたはそれをあなたが欲しいものでいっぱいにしてから、ロックを解除してプレゼントに電話することができます。ただし、ビデオメモリをバスを介してメインメモリにコピーする必要があるので、これは遅いです。一部のカードでは、「スウィズル」形式も使用されます。これはそれを行うためにさらに時間を追加し、いくつかのカードはそれを行うことからあなたを禁止するでしょう。

一般的に、ビデオカードに直接アクセスしてWindows/DirectXで描画するのを避けたいとします。 D3D1x Imの下では、あなたは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を確実に取得する方法は1つだけあり、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。なお、you can find the Doom3 source here。探している機能はSys_GetVideoRamと呼ばれ、win_shared.cppというファイルに入っていますが、ソリューション全体を検索すると、あなたのためにそれが表示されます。

関連する問題