知識ベース

フレームバッファ

フレームバッファーフレームバッファー 、または場合によってはframestore )は、ビデオディスプレイを駆動するビットマップを含むRAMの一部です。これは、データの完全なフレームを含むメモリバッファです。最新のビデオカードには、コアにフレームバッファ回路が含まれています。この回路は、メモリ内のビットマップをコンピューターのモニターに表示できるビデオ信号に変換します。

コンピューティングでは、 スクリーンバッファは、コンピュータディスプレイに表示されるコンテンツを表現するためにコンピュータアプリケーションによって使用されるコンピュータメモリの一部です。スクリーンバッファも短いためのビデオバッファ再生バッファ 、またはREGENバッファと呼ばれることもあります。画面バッファは、ビデオメモリと区別する必要があります。このため、 オフスクリーンバッファという用語も使用されます。

バッファ内の情報は通常、ディスプレイに表示されるすべてのピクセルのカラー値で構成されます。色の値は通常、1ビットバイナリ(モノクロ)、4ビットパレット化、8ビットパレット化、16ビットハイカラー、24ビットトゥルーカラー形式で保存されます。ピクセルの透明度に関する情報を保持するために、追加のアルファチャネルが使用される場合があります。フレームバッファに必要なメモリの総量は、出力信号の解像度、および色深度またはパレットサイズによって異なります。

歴史

コンピュータ研究者は、フレームバッファの理論的な利点について長い間議論してきましたが、経済的に実行可能なコストで十分なメモリを備えたマシンを製造することはできませんでした。 1947年、マンチェスターベイビーコンピューターはウィリアムズチューブ、後にウィリアムズキルバーンチューブを使用して、1024ビットをブラウン管(CRT)メモリに保存し、2番目のCRTに表示しました。他の研究所では、1950年に4096ディスプレイを達成したMITリンカーン研究所でこれらの技術を調査していました。

1960年代後半には、ドラムメモリとテレビモニターを使用したBrookhaven RAster Display(BRAD)と呼ばれるカラースキャンディスプレイが実装されました。 1969年、Bell LabsのA. Michael Nollは、フレームバッファを備えたスキャンディスプレイを実装しました。その後、Bell Labsシステムが拡張され、標準のカラーテレビモニターに3ビットの色深度の画像が表示されました。 1970年代の集積回路メモリの進歩により、標準的なビデオ画像を保持できるフレームバッファを作成することがより実用的になりました。

1972年、Richard ShoupはXerox PARCでSuperPaintシステムを開発しました。 Shoupは、SuperPaintフレームバッファを使用して初期のデジタルビデオキャプチャシステムを作成することもできました。出力信号を入力信号に同期させることにより、Shoopはシフトしたデータの各ピクセルを上書きすることができました。Shoupは、カラーテーブルを使用して出力信号を変更する実験も行いました。これらのカラーテーブルにより、SuperPaintシステムは、含まれる限られた8ビットデータの範囲外のさまざまな色を生成できました。このスキームは、後でコンピューターのフレームバッファーで一般的になります。

1974年、Evans&Sutherlandは最初の商用フレームバッファであるPicture Systemをリリースしました。価格は約15,000ドルです。 8ビットグレースケールで最大512 x 512ピクセルの解像度を生成でき、独自のフレームバッファを構築するリソースを持っていなかったグラフィック研究者にとっては恩恵となりました。ニューヨーク工科大学は、3つのEvans&Sutherlandフレームバッファを使用して、最初の24ビットカラーシステムを作成しました。各フレームバッファは、RGBカラー出力(1つは赤、1つは緑、もう1つは青)に接続され、Digital Equipment CorporationのPDP 11/04ミニコンピューターが3つのデバイスを1つとして制御しました。

1975年、英国の企業Quantelは、最初の商用フルカラー放送フレームバッファであるQuantel DFS 3000を生産しました。1976年のモントリオールオリンピックのテレビ報道で最初に使用され、写真の残りの部分は、スタジアムに入ったランナーを特色としました。

集積回路技術の急速な改善により、1970年代後半の家庭用コンピュータの多くが低色深度のフレームバッファを搭載できるようになりました。現在、グラフィカル機能を備えたほぼすべてのコンピューターは、ビデオ信号の生成にフレームバッファーを使用しています。 1980年代に作成されたAmigaコンピューターは、グラフィックパフォーマンスに特別な注意を払い、4096色を表示できる独自のHold-And-Modifyフレームバッファーを備えていました。

フレームバッファは、1980年代を通じてハイエンドワークステーションやアーケードシステムボードでも人気を博しました。 SGI、Sun Microsystems、HP、DEC、およびIBMはすべて、この期間にワークステーションコンピューター用のフレームバッファーをリリースしました。これらのフレームバッファーは通常、ほとんどの家庭用コンピューターで見られるよりもはるかに高品質であり、テレビ、印刷、コンピューターモデリング、3Dグラフィックスで定期的に使用されていました。また、フレームバッファは、セガのハイエンドアーケードボードにも使用されていました。これは、家庭用コンピューターよりも高品質でした。

表示モード

パーソナルコンピューティングおよびホームコンピューティングで使用されるフレームバッファには、多くの場合、フレームバッファが動作できる定義済みモードのセットがありました。これらのモードは、異なる解像度、色深度、メモリレイアウト、およびリフレッシュレートのタイミングを出力するようにハードウェアを再構成します。

Unixマシンとオペレーティングシステムの世界では、ハードウェア設定を直接操作するために、そのような便利さは通常は避けられました。この操作は、任意の解像度、色深度、およびリフレッシュレートを達成できるという点ではるかに柔軟性があり、フレームバッファで使用可能なメモリによってのみ制限されていました。

この方法の残念な副作用は、ディスプレイデバイスがその能力を超えて駆動される可能性があることです。場合によっては、これによりディスプレイのハードウェアが損傷します。より一般的には、単に文字化けして使用できない出力を生成しました。最新のCRTモニターは、保護回路の導入によりこの問題を修正しています。表示モードが変更されると、モニターは新しい更新頻度で信号ロックを取得しようとします。モニターが信号ロックを取得できない場合、または信号が設計上の制限範囲外の場合、モニターはフレームバッファ信号を無視し、ユーザーにエラーメッセージを表示する場合があります。

LCDモニターには、同様の保護回路が含まれる傾向がありますが、理由は異なります。 LCDは表示信号をデジタル的にサンプリングする必要があるため(電子ビームをエミュレートします)、範囲外の信号はモニターに物理的に表示できません。

カラーパレット

フレームバッファーは、従来からさまざまなカラーモードをサポートしています。メモリのコストのために、ほとんどの初期のフレームバッファは1ビット(2色)、2ビット(4色)、4ビット(16色)、または8ビット(256色)の色深度を使用していました。このような小さな色深度の問題は、すべての色を生成できないことです。この問題の解決策は、ルックアップテーブルをフレームバッファに追加するインデックス付きカラーでした。フレームバッファメモリに保存されている各色は、色のインデックスとして機能します。ルックアップテーブルは、限られた数の異なる色のパレットとして機能します。

典型的なインデックス付きの256色画像とそのパレット(スウォッチの長方形として表示)は次のとおりです。

一部のデザインでは、実行時にLUTにデータを書き込む(または既存のパレットを切り替える)ことも可能で、画像を独自のパレットで水平バーに分割して、はるかに広いパレットを持つイメージをレンダリングできました。たとえば、屋外で撮影した写真を見ると、写真を4つのバーに分割することができます。一番上のバーは空のトーン、次は葉のトーン、次は肌と衣服のトーン、下のバーは地色です。これには、各パレットに重複する色が必要でしたが、慎重に行われたため、非常に柔軟になりました。

メモリアクセス

フレームバッファは、一般的にCPUメモリ空間に直接マッピングされたメモリを介してアクセスされますが、これがアクセスされる唯一の方法ではありません。フレームバッファは、メモリへのアクセスに使用される方法が大きく異なります。最も一般的なものは次のとおりです。

  • フレームバッファ全体を特定のメモリ範囲にマッピングします。
  • 各ピクセル、ピクセル範囲、またはパレットエントリを設定するポートコマンド。
  • フレームバッファメモリよりも小さいメモリ範囲をマッピングし、必要に応じてバンクを切り替えます。

フレームバッファの構成は、ピクセルまたは平面でパックされます。フレームバッファは、アドレス可能なすべてのポイントであるか、更新方法に制限がある場合があります。

ビデオカードのRAM

ビデオカードには常に一定量のRAMがあります。このRAMは、画像データのビットマップが表示用に「バッファリング」される場所です。したがって、 フレームバッファという用語は、このRAMを指すときに交換可能に使用されることがよくあります。

CPUは画像更新をビデオカードに送信します。カードのビデオプロセッサは画面イメージの画像を形成し、RAMの大きなビットマップとしてフレームバッファに保存します。 RAMのビットマップは、画面イメージを継続的に更新するためにカードによって使用されます。

仮想フレームバッファー

多くのシステムは、多くの場合互換性の理由から、フレームバッファデバイスの機能をエミュレートしようとします。最も一般的な2つの仮想フレームバッファは、Linuxフレームバッファデバイス(fbdev)とX仮想フレームバッファ(Xvfb)です。 XvfbがX Window Systemディストリビューションに追加され、グラフィカルフレームバッファなしでXを実行する方法が提供されました。 Linuxフレームバッファデバイスは、基盤となるフレームバッファにアクセスするための物理的方法を、プログラムがアクセスしやすい保証されたメモリマップに抽象化するために開発されました。メモリマップがばらばらになっているシステムやバンクの切り替えが必要なシステムをプログラムで処理する必要がないため、移植性が向上します。

ページめくり

フレームバッファは、2フレーム分のビデオデータを格納するのに十分なメモリを備えて設計される場合があります。一般的にダブルバッファリング、またはより具体的にはページフリッピングとして知られる手法では、フレームバッファはメモリの半分を使用して現在のフレームを表示します。そのメモリが表示されている間、メモリの残りの半分は次のフレームのデータで満たされます。セカンダリバッファがいっぱいになると、代わりにフレームバッファがセカンダリバッファを表示するように指示されます。プライマリバッファがセカンダリバッファになり、セカンダリバッファがプライマリになります。この切り替えは、多くの場合、古いフレームの半分と新しいフレームの半分が一緒に表示される画面の裂けを避けるために、垂直ブランキング間隔の後に行われます。

ページめくりは、PCゲームプログラマーが使用する標準的な手法になりました。

グラフィックスアクセラレーター

より良いグラフィックスへの要求が高まるにつれて、ハードウェアメーカーは、フレームバッファを満たすために必要なCPU時間を削減する方法を作成しました。これは一般にグラフィックアクセラレーションと呼ばれます。一般的なグラフィックス描画コマンド(多くはジオメトリック)は、生の形でグラフィックスアクセラレータに送信されます。次に、アクセラレータはコマンドの結果をフレームバッファにラスタライズします。このメソッドは、CPUを解放して他の作業を実行します。

初期のアクセラレータは、2D GUIシステムのパフォーマンスの向上に焦点を合わせていました。これらの2D機能を保持しながら、最新のアクセラレータのほとんどは、リアルタイムで3D画像を生成することに重点を置いています。一般的な設計では、OpenGLやDirect3Dなどのグラフィックライブラリを使用して、グラフィックドライバーとインターフェイスし、受信したコマンドをアクセラレータのグラフィック処理ユニット(GPU)の命令に変換します。 GPUはこれらの命令を使用して、ラスタライズされた結果を計算し、結果はフレームバッファーにビットブリットされます。フレームバッファの信号は、組み込みのビデオオーバーレイデバイス(通常、フレームバッファのデータを変更せずにマウスカーソルを生成するために使用)および出力信号を変更することによって生成される最終的な特殊効果と組み合わせて生成されます。そのような最終的な特殊効果の例は、3dfx Voodooカードで使用される空間アンチエイリアシング技術でした。これらのカードは、出力信号にわずかなぼかしを追加します。これにより、ラスタライズされたグラフィックのエイリアシングがはるかに目立たなくなります。

かつて、グラフィックアクセラレータのメーカーは次のように多くありました。3dfxInteractive。 ATI;ヘラクレス;トライデント; Nvidia;半径; S3グラフィックス。 SiSおよびシリコングラフィックス。 2015年時点で、x86ベースシステムのグラフィックアクセラレータの市場は、Nvidia(2002年に3dfxを買収)、AMD(2006年にATIを買収)、およびIntel(現在、個別のビデオカードではなく統合GPUのみを生産)に支配されています。

比較

フレームバッファーを使用すると、電子ビーム(ディスプレイテクノロジーが使用する場合)に、テレビが放送信号をレンダリングする方法であるラスタースキャンを実行するように命令されます。このように画面に表示される各ポイントの色情報は、スキャン中にフレームバッファーから直接取得され、一連の個別の画像要素、つまりピクセルが作成されます。

フレームバッファーは、ラスターグラフィックスが登場する前に一般的に使用されていたベクターディスプレイとは大きく異なります(その結果、フレームバッファーの概念も変わります)。ベクトル表示では、グラフィックプリミティブの頂点のみが保存されます。次に、出力ディスプレイの電子ビームは、頂点から頂点へ移動するように命令され、これらのポイント間のエリアを横切る線をトレースします。

同様に、フレームバッファは、バッファが個々のピクセルではなく文字のコードを保持する初期のテキストモード表示で使用される技術とは異なります。ビデオディスプレイデバイスは、フレームバッファと同じラスタスキャンを実行しますが、ビームを向けるときにバッファ内の各文字のピクセルを生成します。