iPhone / iPad, OpenGL ES, CADisplayLink - PullRequest
       19

iPhone / iPad, OpenGL ES, CADisplayLink

0 голосов
/ 11 января 2011

Я только начал играть с OpenGL ES, в основном на iPad, и заметил некоторые проблемы, на которые я не могу найти ответ. Сначала я попытался использовать два EAGLViews, используя отдельные средства визуализации в одном окне. В основном, представьте пример проекта OpenGL ES в XCode, но с двумя EAGLViews и двумя средствами визуализации и т. Д. Теперь это не похоже на работу в симуляторе, оно показывает только одно из представлений (кажется, что выполняется код визуализации, но только одно представление отображается с помощью openGL), но при запуске на устройстве (iPad с iOS 4.2) оно работает, по крайней мере вид, который приводит к следующему вопросу.

Обновления рендеринга запускаются с использованием CADisplayLink в обоих этих представлениях. Это, однако, вызывает некоторые проблемы. Большую часть времени, спустя короткое время, обновления на одном из представлений прекращаются, а CADisplayLink перестает запускаться. Это происходит только на устройстве, а не в симуляторе. Это можно «исправить», используя таймеры вместо CADisplayLink или таймер в одном представлении и DisplayLink в другом, хотя я хотел бы знать, что вызывает это. Я создаю ссылку для отображения, как это (в обоих видах):

self.displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(drawView:)];</p> <p>[displayLink setFrameInterval:animationFrameInterval];</p> <p>[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

Теперь последний вопрос о странной вещи, которую я заметил. При запуске примера проекта OpenGL ES, предоставленного в Xcode в симуляторе iPad с видом, измененным по ширине ниже 760, он ничего не отображает на экране. Он касается только ширины, хотя высота может быть изменена любым способом. Это происходит только в симуляторе, а не на устройстве.

Таким образом, вопросы в основном, являются ли упомянутые выше вещи ошибками, функциями или я просто делаю это неправильно?

Спасибо / J0h

1 Ответ

0 голосов
/ 08 июня 2012

Я обнаружил похожую проблему при запуске двух представлений OpenGL одновременно, каждое из которых работает на отдельном CADisplayLink, оба выполняются для forMode: NSDefaultRunLoopMode.При тестировании на iPhone 4S под управлением iOS 5.1 проблем не возникало, за исключением того, что при выходе из MPMediaPickerController одно из представлений перестало отображаться.Однако на iPod Touch 3-го поколения под управлением iOS 5.0.1 я заметил проблему, из-за которой один или другой вид перестали отображаться случайным образом (из-за того, что CADisplayLink не запускается).Я смог исправить это, переключившись на NSTimer для обоих представлений (просто сделать это для одного или другого не получится).Размеры, кратные 32, не имели для меня никакого значения.

...