Как нарисовать в NSOpenGLView из объекта контроллера представления? - PullRequest
2 голосов
/ 14 февраля 2011

В IB я поместил экземпляр NSOpenGLView в окно.

У меня весь код для рисования внутри собственного NSViewController, например, так:

// MyOpenGLViewController.h

@interface MyOpenGLViewController : NSViewController 
{
    IBOutlet NSOpenGLView *glView;  
}

// MyOpenGLViewController.m

-(void)awakeFromNib
{
    [self drawFrame];
}

-(void)drawFrame
{
    [[glView openGLContext] makeCurrentContext];
    glClearColor(0, 0, 0, 1);
}

Все связано, и вызывается drawFrame, но я ничего не вижу на экране. Это всегда белое. Что я должен проверять?

Ответы [ 3 ]

4 голосов
/ 15 февраля 2011

Обычно один подкласс NSOpenGLView и устанавливает таймер для обновления вашей модели данных и, если что-то меняется, то рисует изменения.Контроллер не должен рисовать.У Apple есть хорошая документация о том, как заставить что-то работать.Начните с Руководство по программированию OpenGl для Mac OS X .

Кажется, я помню ошибку при использовании объекта NSOpenGLView в Интерфейсном Разработчике.Что я всегда делаю, так это добавляю общий NSObject, где вы хотите, чтобы представление и устанавливало его класс как ваш подкласс NSOpenGLView.

2 голосов
/ 15 февраля 2011

Не уверен насчет какао, но glClearColor() просто устанавливает какое-то состояние. glClear(GL_COLOR_BUFFER_BIT) фактически очистит буфер кадров.

1 голос
/ 18 января 2012

Немного поздно, чтобы ответить, но, поскольку я удивлялся тому же самому и обнаружил эту ветку, я подумал, что мне следует обновить ее с некоторыми недостающими битами: P

Поскольку кто-то еще упомянул, что glClearColor () только устанавливает атрибут, фактическое очищение должно быть выполнено с помощью glClear (обратите внимание, что помимо цветового буфера он также может очищать Z-буфер, аккумулятор и трафарет).

Наконец, ваши команды OpenGL stream должны быть фактически сброшены. Это можно сделать либо с помощью glFlush (), если у вас одиночная буферизация, либо с помощью glSwapAPPLE (), если у вас двойная буферизация.

...