問題タブ [directdraw]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - DirectDraw 出力適応
古いゲームに機能を追加するプロジェクトに取り組んでいます。アイデアは、ウィンドウ表示で実行するオプションを追加することです (元は 800x600 フルスクリーンのみをサポートしています)。
これまでのところ、directDraw の初期化を変更してフルスクリーン排他モードを削除し、GDI で動作できるようにし、クリッパーを作成し、すべてを適切に設定しました。ポイントは、ゲームがフルスクリーン モードを 8 ビットの色深度に設定し、ウィンドウ表示で実行すると、出力が発生することです。この画像のようなゴミ:
これまでのところ、問題を回避するために GetDIBits と SetDIBits を使用していくつかのトリックを試みましたが、成功しませんでした。
ゲームは非常に古いバージョンの directDraw で動作します (このバージョンに関するドキュメントはまったくありません。私の作業のほとんどは推測とテストに基づいています)。
このゲームは、BltFast を使用して画面に情報を取得します。
これは、DIBits を使用して問題を修正するために作成されたコードの一部です。
PrimarySurface = ゲームのプライマリ サーフェス自体
BltFast への呼び出しを変更して画面に正しく出力することで、8 ビット カラー フォーマットをバッファから直接変換する方法はありますか?
出力を別の DC に再ルーティングしてから、GetDIBits/SetDIBits を使用してイメージを修正する方が良い解決策ですか?
c++ - DirectDraw Surface GetDC() のより高速な代替手段は?
問題
Direct2D コンテンツを DirectDraw サーフェス (バックバッファー) に描画しようとしていますが、この部分は問題ありません。問題は、DirectDraw サーフェス (最新の PC) で GetDC() を使用するコストです。これは、Direct2D 描画が発生する前に Direct2D で BindDC() に使用されるデバイス コンテキストをロックして取得します。GetDC と ReleaseDC にはかなりのコストがかかるため、フレームごとに 1 回実行すると、15 FPS のように感じられます。
DirectDraw サーフェスで Get/ReleaseDC() を取得するためのより高速な方法または代替方法はありますか、または何らかの方法でキャッシュして、耐えられないパフォーマンスが得られないようにする方法はありますか?
バックストーリー 古いDirectDraw でビルドされた古いゲームのソースが失われ、フックを使用してグラフィック API をアップグレードしようとしています。最終的には、すべての directdraw API 呼び出しを direct2d に移動したいと考えています。