Я должен загрузить структуры в фоновом потоке в 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. Как я должен загрузить структуры в фоновом потоке?
Это распространенная ошибка, каждый контекст OpenGL может быть активным (текущим) только в одном потоке, поэтому, когда вы создаете новый поток, у него нет контекста OpenGL, и все GL звонки терпят неудачу.
Решение: создайте еще один контекст OpenGL, сделайте его текущим в фоновом потоке. Чтобы загрузить текстуры, вы также хотите поделиться именами OpenGL (идентификаторами текстур и т. Д.) С основным контекстом.