VCL フォームにSDLレンダリング サーフェスを埋め込む Delphi コンポーネントを構築しています。SDL サーフェスが作成された時点でフォームが画面上にある限り、問題なく機能します。そうしないと、レンダリング テクスチャを作成できません。
SDL コードをトレースしたところ、失敗する (NULL を返す) 次の関数呼び出しに行き着きました。
data->hbm = CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS, &data->pixels, NULL, 0);
HDC は、適切に設定された独自の HWND ウィンドウ ハンドルを持つコントロールが所有する描画コンテキストへの有効なハンドルです。しかし、Delphi ではよくあることですが、コントロールがオフスクリーンで作成されると (コントロールを含むすべてのフォームは、表示されるまで非表示の状態で作成されます)、コントロールが実際に表示されるまで、CreateDIBSection 呼び出しは失敗します。
また、画面上で作成された場合は、非表示にして再表示します (たとえば、タブ シート上にあり、タブを切り替えると)、作成したテクスチャはこのプロセス中に空白になります。
これは私を夢中にさせています。何が起こっているのか、どうすれば回避できるのか知っている人はいますか?