|
|
Log In | Not a Member? |
Contact ADC |
| < Previous PageNext Page > |
タイマーが発行されるか、ユーザイベントを処理する必要が生じると、renderWithEvent:メソッドが呼び出されます。このアプリケーションでは、タイマーは毎秒60回発行されるように設定されています。Listing 5-4に、_renderメソッドとrenderWithEvent:メソッドを示します。コードで番号を付けた各行については、リストの後に詳しく説明します。
Listing 5-4 レンダリングメソッド
- (void) _render:(NSTimer*)timer |
{ |
[self renderWithEvent:nil]; |
} |
- (void) renderWithEvent:(NSEvent*)event |
{ |
NSTimeInterval time = [NSDate timeIntervalSinceReferenceDate]; |
NSPoint mouseLocation; |
NSMutableDictionary *arguments; |
if(_startTime == 0)// 1 |
{ |
_startTime = time; |
time = 0; |
} |
else |
time -= _startTime; |
mouseLocation = [NSEvent mouseLocation];// 2 |
mouseLocation.x /= _screenSize.width;// 3 |
mouseLocation.y /= _screenSize.height;// 4 |
arguments = [NSMutableDictionary dictionaryWithObject:[NSValue // 5 |
valueWithPoint:mouseLocation] |
forKey:QCRendererMouseLocationKey]; |
if(event)// 6 |
[arguments setObject:event forKey:QCRendererEventKey]; |
// 入力ポート値を設定するコードをここに記述する // 7 |
if(![_renderer renderAtTime:time arguments:arguments])// 8 |
NSLog(@"Rendering failed at time %.3fs", time); |
// 出力ポート値を取得するコードをここに記述する // 9 |
[_openGLContext flushBuffer];// 10 |
} |
このコードが実行することを以下に示します。
コンポジション時間を、現在の時間とレンダリングの開始時間との差として計算する。
マウスの現在位置をスクリーン座標で取得する。マウス座標は、OpenGLコンテキストのビューポート([0,1],x[0,1])を基準とし、原点(0,0)を左下隅として、正規化する必要があります。
マウスのx座標を正規化する。
マウスのy座標を正規化する。
辞書を作成し、正規化したマウス座標を書き込む。座標は、NSValueオブジェクトに格納されるNSPointとして指定します。
ユーザイベントがある場合、ユーザイベントを引数辞書に追加する。
コンポジションのルートマクロパッチに公開されている入力パラメータについて、その値を設定するコードを、ここに追加できる。setValue:forInputKey:メソッドを使用して、必ず有効なキーを渡すようにします。
引数辞書を渡して、指定した時間にフレームをレンダリングする。
公開されている出力パラメータの値を取得するコードをここに追加できる。valueForOutputKey:メソッドを使用して、必ず有効なキーを渡すようにします。
OpenGLコンテキストをフラッシュし、レンダリングされたフレームを画面上に表示する。
| < Previous PageNext Page > |
Last updated: 2006-12-05
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |