我正在开发一款iphone游戏我正在使用多线程在屏幕上绘制多个对象,但我不清楚如何使用所有这些线程渲染特定场景,我应该在所有线程中使用相同的FOB来更新场景或者是否有任何其他技术使用多个线程渲染场景。请帮助 下面给出的代码(放在单独的线程中)给出了错误的访问
-(void)drawBricks1{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[EAGLContext setCurrentContext:context];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
//glViewport(0, 0,backingWidth, backingHeight);
Image *ii=[[Image alloc]initWithImage:[UIImage imageNamed:@"s_2.png"]];
[ii renderAtPoint:CGPointMake(100, 100) centerOfImage:YES];
// Clear screen
//glClear(GL_COLOR_BUFFER_BIT);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
[pool release];
}// end of the drawb
答案 0 :(得分:1)
帧缓冲区是一种多种多样的资源。如果您将帧缓冲区拆分为不同的区域,则可以进行并行访问。但是,在通常使用OpenGL渲染的情况下,您可以访问整个Windows帧缓冲区。因此每个线程必须锁定对帧缓冲区的访问 - 这是由驱动程序完成的。这种锁定会导致巨大的开销,导致严重的性能损失。或者用几句话来说:OpenGL和多线程不会混合(好)。
你为什么还要关心? GPU将在内部并行化渲染过程,因此绝对不需要多线程访问。特别是在像iPhone / iPad这样的设备上,GPU不是为多线程访问而设计的(即使它是针对不同的帧缓冲区)。