SDLレンダリングサーフェスをVCLフォームに埋め込むためのDelphiコンポーネントをビルドしています。これは、SDLサーフェスが作成された瞬間にフォームがオンスクリーンである限り、うまく動作します。それ以外の場合は、レンダリングテクスチャを作成できません。ウィンドウがオフスクリーンのときにCreateDIBSection()が失敗するのはなぜですか?
私はSDLコードにトレースして失敗し、次の関数呼び出し、になってしまった(NULLを返します):
data->hbm = CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS, &data->pixels, NULL, 0);
HDCが持つコントロールが所有する描画コンテキストに有効なハンドルでその独自のHWNDウィンドウハンドルが正しく設定されています。しかし、コントロールがオフスクリーンで作成されたとき(Delphiで一般的に起こる)、コントロールの実際の表示まで、CreateDIBSectionの呼び出しは失敗します(コントロールがあるすべてのフォームが非表示の状態で作成されます)。
また、画面上に作成され、非表示にして再表示された場合(タブシート上にあり、タブを切り替えるなど)、作成したテクスチャはこのプロセス中に空白になります。
これは私をナットにしています。誰が何が起こっているのか、私はそれを回避する方法を知っていますか?
Nope。 DestroyWndは決して呼び出されません。 –