3

GLKitのGLKViewController/GLKViewを使用して、基本的なOpenGL描画を行っています。

ViewDidLoadメソッドでViewPortを設定したいのですが。GLKViewリファレンスを読んだ後、私は次のようにそれを行うことができると思いました:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
    if (!self.context) {
        NSLog(@"Failed to create ES context");
    }
    GLKView *view = (GLKView *)self.view;
    view.context = self.context;
    glViewport( 0, 0, view.DrawableWidth, view.DrawableHeight );
}

問題は、DrawableWidthDrawableHeightプロパティの両方がゼロであるということです。何故ですか?GLKViewがDrawInRectを呼び出すと、それらが設定され、それらの値は私が期待するものです。

4

2 に答える 2

3

GLKViewクラスリファレンスには次のように書かれています。

この後、ビューを再描画する必要がある場合は常に、ビューはフレームバッファオブジェクトを自動的に作成または更新します。

viewDidLoadビューをまだ描画する必要がないため、フレームバッファは受信するまでに作成されていません。したがって、フレームバッファのサイズも存在しません。

この時点までにシステムがフレームバッファを作成することは不適切です。ビューはまだ画面上のビュー階層に追加されていません。画面上のビュー階層に追加された後、サイズが調整される場合があります。これには、古いフレームバッファを破棄して、新しいフレームバッファを作成する必要があります。

ビューは、フレームバッファを作成するために実際に描画するように要求されるまで待機するため、後で破棄するためだけにフレームバッファを作成する時間を無駄にすることはありません。

于 2012-03-04T18:53:55.493 に答える
1

最初に電話する必要があります[view bindDrawable];

その後drawableWidthheight正しいでしょう。これは、セットアップ後にフレームバッファがバインド解除され、drawableWidth/heightフレームバッファのプロパティが反映されるためです。

于 2015-09-27T10:11:27.130 に答える