在opengles中使用多线程渲染场景

时间:2011-03-11 06:21:13

标签: iphone opengl-es

我正在开发一款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

1 个答案:

答案 0 :(得分:1)

帧缓冲区是一种多种多样的资源。如果您将帧缓冲区拆分为不同的区域,则可以进行并行访问。但是,在通常使用OpenGL渲染的情况下,您可以访问整个Windows帧缓冲区。因此每个线程必须锁定对帧缓冲区的访问 - 这是由驱动程序完成的。这种锁定会导致巨大的开销,导致严重的性能损失。或者用几句话来说:OpenGL和多线程不会混合(好)。

你为什么还要关心? GPU将在内部并行化渲染过程,因此绝对不需要多线程访问。特别是在像iPhone / iPad这样的设备上,GPU不是为多线程访问而设计的(即使它是针对不同的帧缓冲区)。