2017-04-14 9 views
-1

これは本当に面白い問題だと思うが、何年もの間私を悩ませていたが、何らかの理由で私はまっすぐな答えを見つけられなかった。私はここで何かを得ることができるかどうかを見てみましょう。独自のグラフィックスディスプレイエンジンをゼロから作成するにはどうすればよいですか?

絶対的な原子の塵から私自身のグラフィックスレンダリングと表示エンジンを構築したいと思います。私はまっすぐな直接I/Oについて話しています。

カラー値の配列をモニターに直接注入したいと思っています。

どこから始めるべきかアドバイスが必要です。

私の目標は、できるだけ効率的な方法で、少なくとも120フレームのハードコードされた画像データを1秒間にモニター表面に(またはモニターの最大リフレッシュレートが何であれ)出力する簡単なプログラムを作成することです。

これを行うには何が必要ですか?

WindowsはこれをC/C++ライブラリでサポートしていますか?

グラフィックスカード用に独自のドライバを作成する必要がありますか、またはAMD/nVidiaがこれらのAPIを提供する必要がありますか?

助けてください。

+0

あなたはlibaggを見てみるべきです:http://www.antigrain.com/ – sailfish009

+0

あまりにも広範な質問がありますが、続行してください。あなたは次のジョン・カーマックではないと誰が言いますか? "WindowsはこれをC/C++ライブラリでサポートしていますか?"はい。 Direct X.それ以外の場合、Windowsはハードウェアを直接操作することができません。 – user4581301

+0

Waylandのやり方を見ることができます。しかし、Waylandでも最初から作られていません。 –

答えて

1

Alomostすべての現代のコンピュータは、CPUが直接モニタを駆動しません。

代わりにGPUがあります。このGPUには、独自のメモリとプロセッサ(年、複数)があります。 GPUの製造元は、OSやその他の抽象化と対話するドライバを作成して、GPUに何をすべきかを伝えることができます。

GPUの製造元は、あなたのために十分な情報をリリースしていないため、独自のドライバを書くことはあまり実用的ではありません。多くの場合、マシンコードで構成されているか、または独自のコンパイラ(またはコンパイラバックエンド)を作成して問題のGPUファミリ用のマシンコードを生成します。

すべてが失われているわけではありません。 Vulkanや様々なシャドー言語では、「生のコード」をGPUに取り込み、モニタに表示される内容を変更する方法を提供します。これらの機能はドライバによって提供されます。通常、「シェーダ言語」の言語は、CPU側の「実際の」C(時にはC++ラッパ)インターフェイスを持つCまたはC++のバリアントです。

シェイプ(三角形)を操作し、C APIを使用してテクスチャを適用する古い学校の方法もあります。これは、新しい「GPUに独自のコードを送信する」アプローチのパワーと柔軟性が欠けています。

GPUは、高度に結合された高速メモリを備えた、大規模な並列の比較的弱いプロセッサです。これにより、CPUよりはるかに効率的にいくつかの操作を行うことができます。コアが100本あることは、多くの罪を補うものです。ポリゴンのラスタライズやテクスチャのサイズ変更などの問題は継承されており、GPUはこれらの問題をリアルタイムで解決するように設計されています。その後、GPU上の特別なハードウェアが結果をモニターに送信します。

0

私はとにかくAMDのグラフィックスカードのための答えを、見つけたと思う:

http://developer.amd.com/tools-and-sdks/graphics-development/display-library-adl-sdk/

これは、C/C++のための彼らのドライバAPIです。

私が記述したことを行うためのサンプルファイルがあります。

は、内部ボイラープレートコードのかなりありますが、最後にそれはありません:

ADL_Display_Color_Set - これは、生の画像データを受け入れます。

関連する問題