glGenTextures возвращает нуль в фоновом потоке

Я должен загрузить структуры в фоновом потоке в OpenGL ES. Но glGenTextures всегда возвращает нуль при вызове в фоновом потоке.

-(void) someMethodInMainThread {
   [self performSelectorInBackground:@selector(load) withObject:nil];
}

-(void) load {
   GLuint textureID = 0;
   glGenTextures(1, &textureID);        
}

textureID является нулем. Если я изменяю код на [сам performSelector:@selector (tmp) withObject:nil]; это будет работать корректное и возвращаться 1. Как я должен загрузить структуры в фоновом потоке?

7
задан Division 12 August 2010 в 13:18
поделиться

1 ответ

Это распространенная ошибка, каждый контекст OpenGL может быть активным (текущим) только в одном потоке, поэтому, когда вы создаете новый поток, у него нет контекста OpenGL, и все GL звонки терпят неудачу.

Решение: создайте еще один контекст OpenGL, сделайте его текущим в фоновом потоке. Чтобы загрузить текстуры, вы также хотите поделиться именами OpenGL (идентификаторами текстур и т. Д.) С основным контекстом.

10
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: