2
我想添加一個GLKView滾動視圖沒有成功。GLKView給'無法使完整的幀緩衝區對象8cd6'錯誤
此刻,我的繪圖代碼只是簡單地將背景變成紅色,但在它發生之前,它會引發錯誤「無法完成幀緩衝區對象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);
}
任何理由爲什麼這個代碼將導致這發生?
英雄。如此明顯,現在我想到了!使用'dispatch_async(dispatch_get_main_queue(),^ {...})'來包裝視圖操作及其固定。 – ComethTheNerd