Apple Developer Connection
Advanced Search
Member Login 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
}

このコードが実行することを以下に示します。

  1. コンポジション時間を、現在の時間とレンダリングの開始時間との差として計算する。

  2. マウスの現在位置をスクリーン座標で取得する。マウス座標は、OpenGLコンテキストのビューポート([0,1],x[0,1])を基準とし、原点(0,0)を左下隅として、正規化する必要があります。

  3. マウスのx座標を正規化する。

  4. マウスのy座標を正規化する。

  5. 辞書を作成し、正規化したマウス座標を書き込む。座標は、NSValueオブジェクトに格納されるNSPointとして指定します。

  6. ユーザイベントがある場合、ユーザイベントを引数辞書に追加する。

  7. コンポジションのルートマクロパッチに公開されている入力パラメータについて、その値を設定するコードを、ここに追加できる。setValue:forInputKey:メソッドを使用して、必ず有効なキーを渡すようにします。

  8. 引数辞書を渡して、指定した時間にフレームをレンダリングする。

  9. 公開されている出力パラメータの値を取得するコードをここに追加できる。valueForOutputKey:メソッドを使用して、必ず有効なキーを渡すようにします。

  10. OpenGLコンテキストをフラッシュし、レンダリングされたフレームを画面上に表示する。



< Previous PageNext Page >


Last updated: 2006-12-05




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
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