Это не совсем мой отдел - довольно ванильный пользователь NSOpenGLView
- но из Mac OpenGL docs похоже, что вы, возможно, захотите использовать CVDisplayLink
( Q & A1385 ) за это.Даже если это не сработает, другие вещи там, вероятно, должны помочь.
РЕДАКТИРОВАТЬ
Я только провел некоторые базовые испытания по этому вопросу, но выглядитнапример, вы можете делать то, что хотите, до тех пор, пока вы сначала устанавливаете правильный контекст OpenGL, а затем меняете буферы после каждого кадра (при условии, что вы используете контекст с двойной буферизацией):
// inside an NSOpenGLView subclass, somewhere outside the usual drawing loop
- (void) drawMultipleFrames
{
// it might be advisable to also do a [self lockFocus] here,
// although it seems to work without that in my simple tests
[[self openGLContext] makeCurrentContext];
// ... set up common OpenGL state ...
for ( i = 0; i < LOTS_OF_FRAMES; ++i )
{
// ... draw your frame ...
glFinish();
glSwapAPPLE();
}
// unlockFocus here if locked earlier
}
Я ранее пытался использовать *Вместо 1016 * в конце каждого кадра - это не требует glSwapAPPLE
, но не блокирует, как glFinish
, так что вы можете получить растоптанные кадры друг над другом.Кажется, это работает нормально с другими приложениями, работает в фоновом режиме и т. Д., Но, конечно, YMMV.