Сбой приложения Cocoa при вызове OpenGL
-
21-09-2019 - |
Вопрос
Я сделал новый проект и в значительной степени скопировал это руководство, но всякий раз, когда я вызываю любую функцию OpenGL, это место отмечено // Drawing code here
он выходит из строя.У меня там есть это:
glViewport(0, 0, [self bounds].size.width, [self bounds].size.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, [self bounds].size.width, [self bounds].size.height, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.375, 0.375, 0.0);
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 0, 0);
glBegin(GL_LINES);
glVertex2f(10, 10);
glVertex2f(300, 300);
glEnd();
glFlush();
Но простой вызов одной функции OpenGL приводит к сбою, сообщая GDB: Program received signal: "EXC_BAD_ACCESS".
Прежде всего, если это сработало, хорош ли этот код?Делать все эти вещи вверху каждый раз, когда его вызывают?Предполагается, что это 2d, с началом координат вверху слева.И почему он рушится?У меня есть CoreVideo и OpenGL, связанные и импортированные...Я хочу настроить приложение Cocoa для использования OpenGL, чтобы я мог сосредоточиться на коде игры.
Спасибо.
Решение
Статья, на которую вы ссылаетесь, на самом деле не является законченным проектом — это просто обсуждение и пример использования CVDisplayLink для управления циклом рисования.Вероятно, вы добьетесь большего, начав с Apple. Руководство по программированию OpenGL.
Другие советы
Проверьте MyOpenGLView.m в Пример кода Apple для GLFullScreen.Они успешно используют CVDisplayLink.В разделе «Управление циклами рендеринга OpenGL» отсутствует тот факт, что вам нужно добавить мьютекс, чтобы избежать доступа двух потоков к одному и тому же контексту opengl.
Вы можете попробовать заменить «[самограницы].size.width» жестко запрограммированными числами, чтобы проверить, является ли это частью проблемы.