解決済みの質問
はじめまして。
どこのカテゴリで質問すべきか分からないので
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とか画面表示の仕組みを知らないので、
有知識者様、ご教授願いたいです。よろしくお願いいたします。
投稿日時 - 2009-11-23 02:07:27
画面表示の仕組みですが、下記凡例表記に従って簡単に書くと
# 凡例:
# データ入力元→(処理担当)⇒データ出力先
古典的な画面表示:
メモリ→(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回分の内容は表示されない)
投稿日時 - 2009-11-23 04:13:24
お礼
詳細な回答ありがとうございます。
非常に分かりやすく、VRAMが何なのか
少しずつ分かってきました。
ちなみに、現在のモニタはDVI-D接続しております。
無知なために適当に記載したイメージについての
回答もありがとうございます。
今後も、気になって眠れないような疑問が発生したら
質問させて頂くと思いますので、見かけられましたら、
回答頂けると嬉しいです。
投稿日時 - 2009-11-23 15:44:41
1人が「このQ&Aが役に立った」と投票しています