4

GLKView をスクロール ビューに追加しようとしていますが、成功しません。

現時点では、私の描画コードは背景を赤くするだけですが、それを行う前に「完全なフレームバッファ オブジェクト 8cd6 を作成できませんでした」というエラーがスローされます。OpenGLを標準のUIViewに描画することで、まったく同じことが正常に機能するようになりましたが、GLKViewに切り替えるとすぐにエラーがスローされます。

AppDelegate.m でスクロール ビューを初期化する方法は次のとおりです。

ScrollView *scroll = [[ScrollView alloc] init];
[[self window] setRootViewController:scroll];

そして、私の ScrollView.m 自体には次のものがあります。

CGRect screenRect;

float screenWidth = 1920;   
float screenHeight = 1280;

UIScrollView *scrollView;
GLKView *glkView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self)
    {
        // Custom initialization
    }

    return self;
}

-(void)loadView
{
    // initialise the view's size parameters
    screenRect.size.width = screenWidth;
    screenRect.size.height = screenHeight;

    // init the scrollview with the new screen rect
    scrollView = [[UIScrollView alloc] initWithFrame:screenRect];

    // set the delegate as itself
    [scrollView setDelegate:self];

    // make the scrollview our main view
    [self setView:scrollView];

    // now create the GLKView and context
    EAGLContext * context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
    glkView = [[GLKView alloc] initWithFrame:screenRect];
    glkView.context = context;
    glkView.delegate = self;

    // add the GLKView to the scrollView
    [scrollView addSubview:glkView];

    /* old code, which works fine */
    // OpenGLView openGLView = [[OpenGLView alloc] initWithFrame: screenRect];    
    // openGLView.delegate = self;
    // openGLView.opaque = NO;    
    // [scrollView addSubview:openGLView];
    /* end of old code */

    // and finally tell the scrollview the size of it's content
    [scrollView setContentSize:screenRect.size];
}

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    // ** THROWS THE ERROR BEFORE HERE ** //
    // set the background colour to red
    glClearColor(1.0, 0.0, 0.0, 1.0);

    // and now clear it    
    glClear(GL_COLOR_BUFFER_BIT);
}

このコードがこれを引き起こす理由は何ですか?

4

1 に答える 1

3

このエラーは、メイン スレッドからビューをインスタンス化するときに発生します。

エラー メッセージの 8cd6 は、GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT の OpenGL エラー コードです。これは、OpenGL フレーム バッファに関する何かが完全に設定されていないことを意味します。

于 2013-09-24T21:02:14.657 に答える