1

VCL フォームにSDLレンダリング サーフェスを埋め込む Delphi コンポーネントを構築しています。SDL サーフェスが作成された時点でフォームが画面上にある限り、問題なく機能します。そうしないと、レンダリング テクスチャを作成できません。

SDL コードをトレースしたところ、失敗する (NULL を返す) 次の関数呼び出しに行き着きました。

data->hbm = CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS, &data->pixels, NULL, 0);

HDC は、適切に設定された独自の HWND ウィンドウ ハンドルを持つコントロールが所有する描画コンテキストへの有効なハンドルです。しかし、Delphi ではよくあることですが、コントロールがオフスクリーンで作成されると (コントロールを含むすべてのフォームは、表示されるまで非表示の状態で作成されます)、コントロールが実際に表示されるまで、CreateDIBSection 呼び出しは失敗します。

また、画面上で作成された場合は、非表示にして再表示します (たとえば、タブ シート上にあり、タブを切り替えると)、作成したテクスチャはこのプロセス中に空白になります。

これは私を夢中にさせています。何が起こっているのか、どうすれば回避できるのか知っている人はいますか?

4

1 に答える 1

0

描画コンテキストは、ペイント処理中にのみ有効です。

于 2016-07-05T20:29:01.323 に答える