0

そのため、実行環境 (Python や JVM など) について多くのことを読んできましたが、自分で実行環境を実装し始めています。これは、C で記述されたレジスター・ベースの環境です。基本的なバイト・コード・フォーマットが定義されており、実行は今のところ非常にスムーズに進んでいます。私の質問は、VE が GUI をどのようにレンダリングするかです。これまでの私の作業について詳しく説明すると、私の VE にはスクリーン バッファがあります (実験中)。突くたびに、出力を知るために画面バッファを完全に出力します。

これまでのところ、基本的な計算などはうまくいっていますが、GUI をレンダリングする方法を理解したいと思ったときに問題が発生しました。私はこれでどこにもいません。どんな助けでも大歓迎です。私がこれについて完全に間違って考えていたとしても、正しい方向への出発点としての指針は本当に素晴らしいでしょう. ありがとう。

4

1 に答える 1

1

Python のすべての GUI ツールキットは、C/C++ コードのラッパーです。Java には、Swing のような「純粋な」Java ツールキットがいくつかありますが、最低レベルでは、描画を行い、ユーザー入力を処理するために C コードに依存しています。Java VM では、グラフィックなどの特別なサポートはありません。

GUI が最下位レベルでどのようにレンダリングされるかについては、状況によって異なります。Windows では、ユーザー モード ソフトウェアがビデオ ハードウェアに直接アクセスすることは許可されていません。最終的に、C/C++ GUI コードは、レンダリングを行うために GDI または Direct3D のいずれかを通過する必要があります。カーネル モードの GDI コードは、フレーム バッファーに書き込むことですべてのレンダリング自体を実行できますが、操作をディスプレイ ドライバーに渡すことで高速化もサポートします。一方、Direct3D カーネル コードはほとんどすべてをドライバーに渡し、ドライバーはすべてを GPU に渡します。ほとんどすべてのカーネル モード コードは C で記述されていますが、GPU で実行されるコードは、より高度なシェーディング言語で記述されたハンド コード アセンブリとコードが混在しています。

GPU アセンブリ言語は Intel x86 アセンブリ言語とは大きく異なり、メーカーや GPU の世代によってかなり異なることに注意してください。

Linux やその他の Unix タイプのオペレーティング システムで現在どのような慣行が行われているのかはわかりませんが、以前は、ユーザー モード プロセスである X サーバーにフレーム バッファへの直接アクセスを与えるのが一般的でした。X サーバーの C コードは、最終的にレンダリングを担当していました。おそらく、GPU アクセラレーションがより一般的になった現在、これは少なくともいくらか変化しています。

于 2014-08-05T06:20:02.557 に答える