このコールバックは Render Manager によって呼び出され、レンダラ プラグインに対して、可能な限り迅速に Process コールバックで行っているあらゆる動作を停止し、戻り値を得る必要があることを示します。 Abort コールバック自体は何も処理を行わず、Process コールバックに対して合図を送るだけです。 中止の合図を受け取った後、Process コールバックは可能な限り迅速にタイルの送信を停止するか、その後の処理の実行を停止して、CStatus::Abort で戻り値を得る必要があります。
Process コールバックは、長い操作を実行する一方でシーンをロックしたままにしている場合(シーン グラフ全体をレンダラに移動する場合など)、中止フラグが設定されているかどうかを定期的に確認する必要があります。 これを実行するための最適の方法は、まずシーン グラフのロックを解除してから、フラグが設定されているかどうかを確認することです。フラグが設定されている場合、コールバックは即座に停止します。フラグが設定されていなければ、再度シーンをロックし、操作を続行します。
以下のカスタム レンダラの例を使用して、isAborted 関数を少し変更し、これを自動的に実行することができます。 この場合、Renderer オブジェクトへのポインタが渡されると、このコールバックはシーンがロックされている間も呼び出されていると自動的に想定します。
CStatus <renderer_name>_Abort( CRef& in_context ) { ... } |
<renderer_name> は、PluginRegistrar::RegisterRenderer の呼び出しで指定されている名前です。この名前に含まれるスペースはアンダースコアに置き換えられます。
パラメータ | Language | タイプ | 説明 |
---|---|---|---|
in_context | C++ | CRef& | RendererContext オブジェクトへのリファレンス。 Context::GetSource は Renderer を返します。 |
bool isAborted( Renderer *in_renderer ) { bool bAbort; // If passed a Renderer object, assume that the scene lock is being held. if( in_renderer ) in_renderer->UnlockSceneData( ); ::EnterCriticalSection( &g_barrierAbort ); bAbort = g_bAborted; ::LeaveCriticalSection( &g_barrierAbort ); if( bAbort ) return( true ); if( in_renderer && in_renderer->LockSceneData() != CStatus::OK ) return( true ); return( false ); } |