рендеринг сцены с использованием многопоточности в opengles - PullRequest
0 голосов
/ 11 марта 2011

Я занимаюсь разработкой игры для 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 Ответ

1 голос
/ 11 марта 2011

Framebuffer - это многофункциональный ресурс. Если бы вы разбили кадровый буфер на отдельные области, параллельный доступ был бы возможен. Однако в обычном случае рендеринга с OpenGL вы получаете доступ к кадровому буферу Windows в целом. Таким образом, каждый поток должен блокировать доступ к кадровому буферу - это делается драйвером. Эта блокировка приводит к огромным накладным расходам, что приводит к серьезному снижению производительности. Или в двух словах: OpenGL и многопоточность не смешиваются (хорошо).

Любой, почему ты все равно? Графический процессор будет распараллеливать процесс рендеринга внутри, поэтому нет необходимости в многопоточном доступе. Особенно на таких устройствах, как iPhone / iPad, графический процессор которых не предназначен для многопоточного доступа (даже если это был отдельный буфер кадров).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...