Технические вопросы и ответы QA1167

Используя NSOpenGLView Интерфейсного Разработчика или Пользовательское Представление возражает для приложения OpenGL

Q: Если я использую Интерфейсного Разработчика NSOpenGLView возразите или Пользовательский объект Представления, когда я создам окно для вовлечения с OpenGL?

A: В то время как любой может использоваться для рисования с OpenGL, Пользовательское Представление предлагает большую гибкость для приложения, чем NSOpenGLView в палитре с незначительной суммой дополнительной установки. Текущий Интерфейсный инспектор Разработчика для NSOpenGLView предлагает ограниченный набор атрибутов формата пикселя, таким образом, приложения, требующие дополнительных атрибутов формата пикселя, должны вместо этого использовать Пользовательский подход Представления. Например, двойная буферизация не в настоящее время доступно как атрибут формата пикселя в NSOpenGLView инспектор.

Обратите внимание на то, что, если представление создается путем перетаскивания NSOpenGLView из палитры Graphics Views, подпрограмм инициализации -initWithFrame: и -initWithFrame: pixelFormat: не требуются NSOpenGLView. В этом случае установка и код инициализации должны войти в представление -awakeFromNib метод, однако любые вызовы, требующие активного контекста OpenGL (такого как большая часть gl...() введите вызовы), должен быть сделан после того, как контекст OpenGL был создан и сделан текущий. В первый раз через -drawRect: метод является хорошим местом для этого. Также стоит упомянуть это с притянутым NSOpenGLView, формат пикселя и другие элементы инициализации обычно помещали в -initWithFrame: и -initWithFrame: pixelFormat: когда сам файл пера загружается, были уже сделаны и загружаются.

  Демонстрационная установка перечисления 1 для NSOpenGLView

@interface OpenGLView
{
    // Instance variable to control our initialization code
    BOOL readyToDraw;
}
@end


-(void)awakeFromNib
{
     // Do any other initialization code needed
     // in here.
     readyToDraw = NO;
}

-(void)drawRect:(NSRect)rect
{
     // Check to see if we're initialized
    if(!readyToDraw)
    {
       // ... do some setup code here
       // we have a valid OpenGL context at this point

       // Make sure we set this so we don't reinitialize next time
       readyToDraw = YES;
    }
}


История версии документа


ДатаПримечания
28.10.2004

Вырезанный капитал 'я' в NSOpenGLPixelFormat, Отредактированный блок кода для-awakeFromNib, чтобы быть более точным, Отредактированным блоком кода для добавления @interface разделяет для показа переменной экземпляра, Добавленной дополнительной дескриптивной информации относительно притянутого NSOpenGLView, Добавленное поле 'NOTE:' для текста после листинга кода

04.10.2004

Новый документ, описывающий случаи использования и для NSOpenGLViews и для Пользовательских Представлений для Какао приложения OpenGL