NSOpenGLView drawRect не вызывается после изменения размера окна

У меня есть объект NSOpenGLView в плавающем NSPanel, из которого я отображаю изображение, используя glDrawPixels. Все работает нормально, пока размер окна не изменится. Я предотвратил изменение размера, возвращая фиксированный размер, когда вызывается функция изменения размера объекта NSPanel, но когда курсор находится на краю окна и пытается изменить размер окна, окно не изменяет размер, но после удерживания в течение нескольких секунд автоматическое обновление для представления OpenGL перестает вызываться.

Ниже приведен упрощенный список шагов:

  1. DrawRect вызывается автоматически
  2. Пользователь пытается изменить размер окна (нажмите и перетащите на несколько секунд)
  3. drawRect перестает вызываться автоматически. (setNeedsDisplay или [openglcontext update] в функции изменения формы не помогает)

Мой OpenGLContext настроен в следующем формате:

NSOpenGLPFANoRecovery,
NSOpenGLPFAWindow,
NSOpenGLPFAAccelerated,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAlphaSize, 8,
NSOpenGLPFADepthSize, 2,
NSOpenGLPFAStencilSize, 8,
NSOpenGLPFAAccumSize, 0, 0

В рамках drawRect:

glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
[[self openGLContext] makeCurrentContext];
glOrtho(0, self.frame.size.width, 0, self.frame.size.height, 1, -1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
// Drawing code here.
[[self openGLContext] flushBuffer];

Кто-нибудь знает решение для автоматического перезапуска drawRect? Я знаю, что в качестве альтернативы я могу полностью избавиться от автоматического обновления и вызвать его самостоятельно с помощью NSNotificationCenter или NSTimer, но я бы предпочел использовать контекст OpenGL по умолчанию и методы обновления по умолчанию. Заранее благодарю за любую помощь!

--------- РЕДАКТИРОВАТЬ -----------

Я нашел возможное решение вышеупомянутой проблемы, но я понимаю, что была другая проблема, при которой обновление случайно останавливалось внезапно. Проблема вышеупомянутого решения не изящна, но она работает. Я в основном отключил маску стиля окна, которая включает маску изменения размера. У кого-нибудь есть идеи, почему drawRect остановился бы случайно? Иногда он рендерится полностью, но иногда он останавливается и никогда не продолжается.

0 ответов

Другие вопросы по тегам