dポイントプレゼントキャンペーン実施中!

はじめまして。
どこのカテゴリで質問すべきか分からないので
C言語カテゴリで質問させていただきます。

VRAM(ビデオメモリ)って、どんな風に
使われているのでしょう?仕組みが分かりません。

<今、想像したVRAMのイメージ1>
CPUがメインメモリ(またはCDROM等)から画面の
データを読み取った後、表示するまでの間に
格納しておく領域がVRAM?
一時的に退避させておくバッファみたいなもの?

<今、想像したVRAMのイメージ2>
100×100ドットの画面があった場合、
1ドットにつき8ビットの情報量を持たせる。
すると、画面は256色表示可能となり、
表示に必要なVRAMの容量は100×100×8ビット=80000ビット。
つまり、10kバイトのVRAMが必要ということになる?

<今、想像したVRAMのイメージ3>
CPUがVRAMのデータを書き換えると、
画面の表示も変わる?
例えば、アドレス0x0001を書き換えたら、
画面の左端の1ドットだけ色が変わるとか…。

根本的に考え方が間違っているかもしれません。
まったくVRAMとか画面表示の仕組みを知らないので、
有知識者様、ご教授願いたいです。よろしくお願いいたします。

A 回答 (1件)

画面表示の仕組みですが、下記凡例表記に従って簡単に書くと


# 凡例:
# データ入力元→(処理担当)⇒データ出力先

古典的な画面表示:
メモリ→(CPU)⇒VRAM→(RAMDAC)⇒モニタ

最近の画面表示:
(CPU)⇒描画命令→(GPU)⇒VRAM→(RAMDAC)⇒モニタ
           ↑
           メモリ

「古典的な画面表示」も、「最近の画面表示」もVRAMから先は同じです。なお、液晶モニタでDVI-D接続の場合、
「RAMDAC」は「DVIトランスミッタ」という部品に置き換わります。

CPUやGPUはそれぞれのクロック周波数の速度で動きますが、
RAMDACは画面のリフレッシュレート(例:60Hz)の速度で動きます。

###<今、想像したVRAMのイメージ1>について
バッファという表現は正しいですが、「退避している」というより、
「速いCPUと遅いRAMDACとの間に緩衝地帯(バッファ)を設けている」イメージです。

###<今、想像したVRAMのイメージ2>について
古典的な狭義のVRAM(フレームメモリ)は、その定義で正しいです。
なお、チラツキ防止のため、ダブルバッファリングをする場合、2倍の容量が必要になります。
また、最近の広義な意味のVRAMは、
・ビデオオーバーレイを実現するのに必要な追加メモリ、
・GPUの作業領域メモリ
等を含んでいて、大容量ですね。

###<今、想像したVRAMのイメージ3>について
VRAMのデータ書換えは、即時反映ではありません。
次にRAMDACが動くタイミングでモニタ上に反映されます。
とはいえ、リフレッシュレート:60Hzの場合、
1秒間に60回もRAMDACが動いているので、人間の視点では即時反映です。
逆に、CPUと比べると遅いので、
CPUのVRAMの書換え間隔が頻繁すぎる(例:1秒間に100回以上)と
RAMDACからモニタへの出力が追いつかなくなります。(例:40回分の内容は表示されない)
    • good
    • 1
この回答へのお礼

詳細な回答ありがとうございます。

非常に分かりやすく、VRAMが何なのか
少しずつ分かってきました。
ちなみに、現在のモニタはDVI-D接続しております。

無知なために適当に記載したイメージについての
回答もありがとうございます。

今後も、気になって眠れないような疑問が発生したら
質問させて頂くと思いますので、見かけられましたら、
回答頂けると嬉しいです。

お礼日時:2009/11/23 15:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!