高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先



QD3D 68 - Q3View_Sync と Q3View_Flush の違い

(更新日: 97年 7 月 11 日)

Q: Q3View_SyncQ3View_Flush の違いは何ですか。段階的なビット転送 (progressive blit) の途中で両方の関数を呼び出すと、QuickDraw 3D デバッグエクステンションから、サブミットループ内からどちらかの関数 (どちらかはわかりません) が呼ばれている、と警告が出ます。

A: Q3View_Flush は、イメージの描画を強制するための関数です。したがって、サブミットループの内側から呼び出します。これはブロックしない関数で、お探しの関数はこちらだと思います。 Q3View_Sync はブロックする関数で、レンダラーがフレーム処理を終え、サブミットループが終了したときに戻ります。したがってこの関数は、サブミットループの外側でしか使用してはいけません。レンダラーが「非同期」だと、サブミットループを抜けた後にフレーム処理が完了する場合もある、ということに注意してください。この場合イメージは、少し後、レンダラーの終了後に描画コンテキスト (つまりウィンドウ内) に現れます。Q3View_Sync はレンダラーの終了まで待ちます (もちろんすでに終了していればすぐに戻ります)。アプリケーションが Q3View_Sync を呼ばず、レンダラーが非同期だと、表示処理は次のフレームの開始時点で同期を取るため、そのときまでレンダラーが終了してないと、アプリケーションはブロックし、レンダラーの終了を待って再開されます。 サブミットループの直後に Q3View_Sync を呼び出すようなアプリケーションでは、常にレンダリングと同期が取られます。つまり、個々のフレームが終了しないかぎりアプリケーションは続行できません。しかし普通は、アプリケーションはそのまま処理を続行し、他の必要な処理を済ませてから、いよいよレンダリングの完了を待ちたいはずです (つまり Q3View_Sync はコードのもっと後、つまりこれ以上処理を続けるにはイメージが完成していなければならないという時点に置きたいはずです)。最も単純な方法としては、Q3View_Sync は飛ばして、イメージは次のフレームの開始時点で現れると仮定する方法があります。

----------------------------------------------------------------------------
-- Scott Kuechle
devsupport@apple.com

[ Technical Q&A's : Graphics & Media : QuickDraw 3D [QD3D] : : QD3D 68 ]