多くの人が一見するとすぐに「Java」と叫ぶかもしれないことを私は知っていますが、いいえ、私はJavaの品質を知っています。最初に私の質問を詳しく説明させてください。
通常、Windows、Mac OS X、Linuxのいずれであっても、システム上でプログラムをネイティブの速度で実行する場合は、ソースコードからコンパイルする必要があります。システム内の別のシステムのプログラムを実行する場合は、仮想マシンまたはエミュレーターを使用する必要があります。これらのツールを使用すると、非ネイティブOSで必要なプログラムを使用できますが、パフォーマンスや不具合の問題が発生する場合があります。
また、「JITコンパイラ」と呼ばれる新しいコンパイラがあり、コンパイラは実行前にバイトコードプログラムをネイティブの機械語に解析します。JITコンパイラを使用すると、パフォーマンスが大幅に向上する可能性がありますが、それでも、パフォーマンスはネイティブシステムで実行した場合と同じではありません。
Linux上の別のプログラムであるWINEも、LinuxシステムでWindowsプログラムを実行するための優れたツールです。その上でTeamFortress2を実行してみて、いくつかの設定を試してみました。Windowsでは1280x1024の中高設定で最大40fpsを取得しました。Linuxでは、最大40 fpsを取得するには、すべてを1280x1024で低くする必要があります。ただし、注目すべき点が2つあります。
- ポリゴンモデルの設定は、低く設定しても高く設定しても、フレームレートに影響を与えないようです。
- 現在のフレームの描画されたピクセルの操作を必要とする後処理効果またはいくつかの特殊効果がある場合、フレームレートは10〜20fpsに低下します。
この時点から、通常のポリゴンレンダリングは問題ないことがわかりますが、ジョブにグラフィックカードを必要とする新しいレンダリング方法になると、クロールが遅くなります。
とにかく、この質問はかなり理論的です。何かできることはありますか?WINEはSTEAMとTeamFortress2を実行できることがわかります。欠陥はありますが、より低い設定で実行できます。あるいは、「ソースから再コンパイルせずに、システム上のプログラム全体を別のシステムに変換して、ネイティブの速度を得ることができるか」という質問もする必要があります。AOTコンパイラもあるので、何かに使用することはできますか。このような?または、ネイティブ速度で実行されるシステムプログラムにネイティブではなく、完璧なものを作成することを不可能にする非常に多くの制約(DirectX呼び出しやソフトウェアアーキテクチャの違いなど)がありますか?