OpenGL на платформе Mac
Можно сказать, что Apple имеет реализацию OpenGL на ее платформе путем рассмотрения пользовательского интерфейса для многих приложений, установленных с OS X. Отражения, встроенные в iChat (рисунок 1-1), обеспечивают один из более известных примеров. Скорость отклика окон, мгновенные результаты применения эффекта в iPhoto и многих других операций в OS X вследствие использования OpenGL. OpenGL доступен всем приложениям Macintosh.
OpenGL для OS X реализован как ряд платформ, содержащих механизм исполнения OpenGL и его программное обеспечение получения. Эти платформы используют независимые от платформы виртуальные ресурсы для освобождения программирования как можно больше от базового аппаратного обеспечения машинной графики. OS X обеспечивает ряд прикладных программных интерфейсов (APIs), который приложения Какао могут использовать для поддержки получения OpenGL.
Эта глава обеспечивает обзор OpenGL и интерфейсов Ваше использование приложения на платформе Mac для наслаждения его.
Понятия OpenGL
Чтобы понять, как OpenGL вписывается в OS X и Ваше приложение, необходимо сначала понять, как разработан OpenGL.
OpenGL реализует клиент-серверную модель
OpenGL использует клиент-серверную модель, как показано на рисунке 1-2. Когда Ваше приложение вызывает функцию OpenGL, оно говорит с клиентом OpenGL. Клиент поставляет команды рисования серверу OpenGL. Природа клиента, сервера и канала связи между ними является определенной для каждой реализации OpenGL. Например, сервер и клиенты могли быть на различных компьютерах, или они могли быть различными процессами на том же компьютере.
Клиент-серверная модель позволяет графической рабочей нагрузке быть разделенной между клиентом и сервером. Например, все компьютеры Macintosh поставляют со специализированным аппаратным обеспечением машинной графики, оптимизированным для выполнения графических вычислений параллельно. Рисунок 1-3 показывает общее расположение CPUs и GPUs. С этой аппаратной конфигурацией клиент OpenGL выполняется на CPU, и сервер выполняется на GPU.
Команды OpenGL могут быть выполнены асинхронно
Преимущество клиент-серверной модели OpenGL - то, что клиент может возвратить управление приложению, прежде чем команда закончила выполняться. Клиент OpenGL может также буферизовать или задержать выполнение команд OpenGL. Если бы OpenGL потребовал, чтобы все команды завершились перед возвращением управления к приложению, то или CPU или GPU были бы неактивным ожиданием другого для обеспечения его данные, приводящие к сокращенной производительности.
Некоторые команды OpenGL неявно или явно требуют, чтобы клиент ожидал, пока некоторые или все ранее представленные команды не завершились. Приложения OpenGL должны быть разработаны для сокращения частоты синхронизаций клиент-сервер. См. Стратегии Проектирования приложений OpenGL для получения дополнительной информации о том, как разработать Ваше приложение OpenGL.
Команды OpenGL выполняются в порядке
OpenGL гарантирует, что команды выполняются в порядке, они получены OpenGL.
OpenGL копирует клиентские данные во времени вызова
Когда приложение вызывает функцию OpenGL, клиент OpenGL копирует любые данные, предоставленные в параметрах перед возвращением управления к приложению. Например, если параметр указывает на массив данных вершины, хранивших в памяти приложения, OpenGL должен скопировать те данные перед возвратом. Поэтому приложение является бесплатным изменить память, которой оно владеет независимо от вызовов, которые оно выполняет к OpenGL.
Данные, которые копирует клиент, часто переформатированы, прежде чем они будут переданы к серверу. Копирование, изменяя и передавая параметры к серверу добавляет наверху к вызову OpenGL. Приложения должны быть разработаны для минимизации копии наверху.
OpenGL полагается на специфичные для платформы библиотеки для критической функциональности
OpenGL обеспечивает богатый набор межплатформенных команд рисования, но не определяет функции для взаимодействия с графической подсистемой операционной системы. Вместо этого OpenGL ожидает, что каждая реализация определит интерфейс, чтобы создать контексты рендеринга и связать их с графической подсистемой. Контекст рендеринга содержит все данные, хранившие в конечном автомате OpenGL. Разрешение многократных контекстов позволяет состоянию в одной машине быть измененным приложением, не влияя на другие контексты.
Соединение OpenGL с графической подсистемой обычно означает позволять содержанию OpenGL быть представленным к определенному окну. Когда содержание связано с окном, реализация создает любые ресурсы, требуются, чтобы позволять OpenGL представлять и изображения на дисплее.
OpenGL в OS X
OpenGL в OS X реализует клиент-серверную модель OpenGL с помощью общей платформы OpenGL и сменных драйверов. Платформа и драйвер объединяются для реализации клиентской части OpenGL, как показано на рисунке 1-4. Специализированное аппаратное обеспечение машинной графики обеспечивает сервер. Несмотря на то, что это - общий сценарий, Apple также обеспечивает средство рендеринга программного обеспечения, реализованное полностью на CPU.
OS X поддерживает выставочное пространство, которое может включать многократные несходные дисплеи, каждый управляемый различными видеокартами с различными возможностями. Кроме того, многократные средства рендеринга OpenGL могут управлять каждой видеокартой. Для размещения этой универсальности OpenGL для OS X сегментируется на четко определенные уровни: уровень оконной системы, уровень платформы и уровень драйвера, как показано на рисунке 1-5. Эта сегментация допускает сменные интерфейсы и к уровню оконной системы и к уровню платформы. Плагин соединяет интерфейсом с гибкостью предложения в конфигурации программного и аппаратного обеспечения, не нарушая стандарт OpenGL.
Уровень оконной системы является специфичным для OS X уровнем что Ваше использование приложения, чтобы создать контексты рендеринга OpenGL и связать их с системой управления окнами OS X. NSOpenGL
классы и Ядро OpenGL (CGL), API также обеспечивает некоторые дополнительные средства управления для того, как OpenGL воздействует на тот контекст. Посмотрите OpenGL APIs, Определенный для OS X для получения дополнительной информации. Наконец, этот уровень также включает библиотеки OpenGL — GL, GLU и GLUT. (См. Реализованные Apple Библиотеки OpenGL для подробных данных.)
Общий уровень платформы OpenGL является программным интерфейсом к аппаратному обеспечению машинной графики. Этот уровень содержит реализацию Apple спецификации OpenGL.
Уровень драйвера содержит дополнительный сменный интерфейс GLD и один или несколько сменных драйверов GLD, которые могут иметь различные возможности поддержки программного и аппаратного обеспечения. Сменный интерфейс GLD поддерживает сторонние сменные драйверы, позволяя сторонним поставщикам оборудования обеспечить драйверы, оптимизированные для пользования преимуществами лучшим преимуществом их аппаратного обеспечения машинной графики.
Доступ к OpenGL в приложении
Интерфейсы программирования, что Ваши вызовы приложения попадают в две категории — определенные для платформы Macintosh и определенных Рабочей группой OpenGL. Специфичные для Apple интерфейсы программирования что использование приложений Какао связаться с системой управления окнами OS X. Этот APIs не создает содержание OpenGL, они управляют довольный, направляют его к месту назначения получения и управляют различными аспектами работы рендеринга. Ваше приложение вызывает OpenGL APIs для создания содержания. Подпрограммы OpenGL принимают вершину, пиксель, и текстурируют данные и собирают данные для создания изображения. Заключительное изображение находится в кадровом буфере, представленном пользователю через систему управления окнами определенный API.
OpenGL APIs, определенный для OS X
OS X предлагает два простых в использовании APIs, который является определенным для платформы Macintosh: NSOpenGL
классы и API CGL. Всюду по этому документу этот APIs упоминается как специфичный для Apple OpenGL APIs.
Какао обеспечивает много классов в частности для OpenGL:
NSOpenGLContext
класс реализует стандартный контекст рендеринга OpenGL.NSOpenGLPixelFormat
класс используется приложением, чтобы указать, что параметры раньше создавали контекст OpenGL.NSOpenGLView
класс является подклассомNSView
это используетNSOpenGLContext
иNSOpenGLPixelFormat
вывести на экран содержание OpenGL в представлении. Приложения тот подклассNSOpenGLView
не должны непосредственно разделять на подклассыNSOpenGLPixelFormat
илиNSOpenGLContext
. Приложения, для которых нужны настройка или гибкость, могут разделить на подклассыNSView
и создайтеNSOpenGLPixelFormat
иNSOpenGLContext
объекты вручную.NSOpenGLLayer
класс позволяет Вашему приложению интегрировать получение OpenGL с Базовой Анимацией.NSOpenGLPixelBuffer
класс обеспечивает аппаратно ускоренный вне экрана получение.
Ядро OpenGL API (CGL) находится в платформе OpenGL и используется для реализации NSOpenGL
классы. CGL предлагает наиболее прямой доступ к функциональности системы и обеспечивает высший уровень производительности при обработке графики и управления для рисования на полный экран. Ссылка CGL предоставляет полное описание этого API.
Реализованные Apple библиотеки OpenGL
OS X также обеспечивает полный комплект графических библиотек, которые являются частью каждой реализации OpenGL: GL, GLU, GLUT и GLX. Два из них — GL и GLU — предоставляют низкоуровневую поддержку рисования. Другие два — GLUT и GLX — получение поддержки на экран.
Ваше приложение обычно взаимодействует через интерфейс непосредственно с базовой библиотекой OpenGL (GL), библиотекой OpenGL Utility (GLU) и Инструментарием Утилиты OpenGL (GLUT). Библиотека GL обеспечивает низкоуровневый модульный API, позволяющий Вам определять графические объекты. Это поддерживает базовые функции, определяемые спецификацией OpenGL. Это предоставляет поддержку для двух фундаментальных типов графических примитивов: объекты, определенные наборами вершин, такими как линейные сегменты и простые многоугольники и объекты, которые являются основанными на пикселе изображениями, такими как заполненные прямоугольники и битовые массивы. GL API не обрабатывает сложные пользовательские графические объекты; Ваше приложение должно анализировать их в более простые конфигурации.
Библиотека GLU комбинирует функции от библиотеки GL, чтобы поддерживать более усовершенствованные графические функции. Это работает на всех реализациях приспосабливания OpenGL. GLU способен к созданию и обработке сложных многоугольников (включая биквадратные уравнения), обработка неоднородных рациональных кривых B-сплайна (NURBs), масштабирование изображений и разложение поверхности к серии многоугольников (составление мозаики).
Библиотека GLUT обеспечивает межплатформенный API для выполнения операций, связанных с пользовательской оконной средой — отображение и перерисовка содержания, обработка событий, и т.д. Это реализовано на большей части UNIX, Linux и платформах Windows. Код, который Вы пишете с GLUT, может быть снова использован через многократные платформы. Однако такой код ограничивается универсальным набором опций обработки событий и элементов пользовательского интерфейса. Этот документ не показывает, как использовать GLUT. Демонстрационный проект GLUTBasics показывает Вам, как начать с GLUT.
GLX является расширением OpenGL, поддерживающим использование OpenGL в окне, предоставленном X-оконной системой. X11 для OS X доступен как дополнительная установка. (Это не показано на рисунке 1-6.) Посмотрите, что OpenGL Программирует для X-оконной системы, опубликованной Аддисоном Уэсли для получения дополнительной информации.
Этот документ не показывает, как пользоваться этими библиотеками. Для получения дальнейшей информации или перейдите к веб-сайту Основы OpenGL http://www .opengl.org или посмотрите новую версию «Красной книги» — Руководство по программированию OpenGL, опубликованное Аддисоном Уэсли.
Терминология
Существует много условий, которые Вы захотите понять так, чтобы можно было записать код эффективно с помощью OpenGL: средство рендеринга, атрибуты средства рендеринга, буферизует атрибуты, объекты формата пикселя, представляя контексты, drawable объекты и виртуальные экраны. Как программист OpenGL, некоторые из них могут казаться знакомыми Вам. Однако понимание специфичных для Apple нюансов этих условий поможет Вам получить все возможное от OpenGL на платформе Macintosh.
Средство рендеринга
Средство рендеринга является комбинацией аппаратного и программного обеспечения что использование OpenGL для выполнения команд OpenGL. Характеристики заключительного изображения зависят от возможностей аппаратного обеспечения машинной графики, связанного со средством рендеринга, и устройство раньше выводило на экран изображение. OS X поддерживает карты графического акселератора с переменными возможностями, а также средство рендеринга программного обеспечения. Для многократных средств рендеринга, каждого с различными возможностями или функциями, возможно управлять единственным набором аппаратного обеспечения машинной графики. Чтобы изучить, как определить точные функции средства рендеринга, посмотрите Определение Возможностей OpenGL, Поддерживаемых Средством рендеринга.
Средство рендеринга и буферные атрибуты
Ваше приложение использует средство рендеринга и буферные атрибуты для передачи средства рендеринга и буферных требований к OpenGL. Реализация Apple OpenGL динамично выбирает лучшее средство рендеринга для текущей задачи рендеринга и делает так прозрачно к Вашему приложению. Если Ваше приложение имеет очень определенные требования рендеринга и хочет управлять выбором средства рендеринга, оно может сделать так путем предоставления надлежащих атрибутов средства рендеринга. Буферные атрибуты описывают такие вещи как размеры цветного и буфера глубины, и являются ли данные стереоскопическими или monoscopic.
Средство рендеринга и буферные атрибуты представлены константами, определенными в специфичном для Apple OpenGL APIs. OpenGL использует атрибуты, которые Вы предоставляете для выполнения работы установки, необходимой до рисования содержания. Рисование к Окну или Представлению обеспечивает простой пример, показывающий, как использовать средство рендеринга и буферные атрибуты. Выбор Renderer и Buffer Attributes объясняет, как выбрать средство рендеринга и буферные атрибуты для достижения определенных целей рендеринга.
Объекты формата пикселя
Формат пикселя описывает формат для хранения пиксельных данных в памяти. Описание включает число и порядок компонентов, а также их имен (обычно красный, синий, зеленый и альфа). Это также включает другую информацию, такой как, содержит ли пиксель значения глубины и шаблон. Объект формата пикселя является непрозрачной структурой данных, содержащей формат пикселя вместе со списком средств рендеринга и дисплеев, удовлетворяющих требования, указанные приложением.
Каждый специфичный для Apple OpenGL, APIs определяет тип данных формата пикселя и подпрограммы средства доступа, которые можно использовать для получения информации, на которую ссылается этот объект. Посмотрите Виртуальные Экраны для получения дополнительной информации о средстве рендеринга и дисплеях.
Профили OpenGL
Профили OpenGL являются новыми в OS X 10.7. Профиль OpenGL является атрибутом средства рендеринга, используемым для запроса определенной версии спецификации OpenGL. Когда Ваше приложение обеспечивает профиль OpenGL, поскольку часть его средства рендеринга приписывает, это только получает средства рендеринга, обеспечивающие полный набор функций, обещанный тем профилем. Рендеринг может реализовать различную версию OpenGL, пока версия, которую это предоставляет к Вашему приложению, обеспечивает ту же функциональность, которую запросило Ваше приложение.
Рендеринг контекстов
Контекст рендеринга, или просто контекст, содержит информацию о состоянии OpenGL и объекты для Вашего приложения. Переменные состояния включают такие вещи как рисование цвета, преобразований для просмотра и трансформаций проекции, освещая характеристики и свойства материала. Переменные состояния установлены на контекст. Когда Ваше приложение создает объекты OpenGL (например, текстуры), они также связаны с контекстом рендеринга.
Несмотря на то, что Ваше приложение может поддержать больше чем один контекст, только один контекст может быть текущим контекстом в потоке. Текущий контекст является контекстом рендеринга, получающим команды OpenGL, данные Вашим приложением.
Объекты Drawable
drawable объект относится к объекту, выделенному системой управления окнами, которая может служить кадровым буфером OpenGL. drawable объект является местом назначения для операций рисования OpenGL. Поведение drawable объектов не является частью спецификации OpenGL, но определяется системой управления окнами OS X.
drawable объект может быть любым следующим: представление Cocoa, внеэкранная память, полноэкранное графическое устройство или пиксельный буфер.
Прежде чем OpenGL может нарисовать к drawable объекту, объект должен быть присоединен к контексту рендеринга. Характеристики drawable объекта сужают выбор аппаратного и программного обеспечения, указанного контекстом рендеринга. OpenGL Apple автоматически выделяет буферы, создает поверхности и указывает, какое средство рендеринга является текущим средством рендеринга.
Логический поток данных от приложения до OpenGL к drawable объекту показан на рисунке 1-7. Команды OpenGL проблем приложения, отправляющиеся в текущий контекст рендеринга. Текущий контекст, содержащий информацию состояния, ограничивает, как команды интерпретируются надлежащим средством рендеринга. Средство рендеринга преобразовывает примитивы OpenGL в изображение в кадровом буфере. (См. также Выполнение Программы OpenGL в OS X.)
Виртуальные экраны
Характеристики и качество содержания OpenGL, которое видит пользователь, зависят и от средства рендеринга и от физического дисплея, используемого для просмотра содержания. Комбинацию средства рендеринга и физического дисплея вызывают виртуальным экраном. Это важное понятие имеет импликации для любого приложения OpenGL, работающего на OS X.
Простая система, с одной видеокартой и одним физическим дисплеем, обычно имеет два виртуальных экрана. Один виртуальный экран состоит из основанного на аппаратных средствах средства рендеринга и физического дисплея, и другой виртуальный экран состоит из основанного на программном обеспечении средства рендеринга и физического дисплея. OS X обеспечивает основанное на программном обеспечении средство рендеринга как нейтрализацию. Для Вашего приложения возможно уменьшить использование этой нейтрализации. Вы будете видеть как в Выборе Renderer и Buffer Attributes.
Зеленый прямоугольник вокруг изображения OpenGL на рисунке 1-8 окружает виртуальный экран для системы с одной видеокартой и одним дисплеем. Обратите внимание на то, что виртуальный экран не является физическим дисплеем, который является, почему зеленый прямоугольник нарисован вокруг окна приложения, показывающего содержание OpenGL. В этом случае это - средство рендеринга, предоставленное видеокартой, объединенной с характеристиками дисплея.
Поскольку виртуальный экран не является просто физическим дисплеем, система с одним дисплеем может использовать больше чем один виртуальный экран за один раз, как показано на рисунке 1-9. Зеленые прямоугольники нарисованы для указания на каждый виртуальный экран. Предположите, что виртуальный экран на правой стороне использует средство рендеринга только для программного обеспечения и что то на левом использовании аппаратно-зависимое средство рендеринга. Несмотря на то, что это - изобретенный пример, он иллюстрирует тезис.
Также возможно иметь виртуальный экран, который может представлять больше чем один физический дисплей. Зеленый прямоугольник на рисунке 1-10 нарисован вокруг виртуального экрана, охватывающего два физических дисплея. В этом случае то же аппаратное обеспечение машинной графики управляет парой идентичных дисплеев. Зеркальный дисплей также имеет единственный виртуальный экран, связанный с многократными физическими дисплеями.
Понятие виртуального экрана особенно важно, когда пользователь перетаскивает изображение от одного физического экрана до другого. Когда это происходит, виртуальный экран может измениться, и с ним, много атрибутов процесса обработки изображений, таких как текущее средство рендеринга, могут измениться. С видеокартой с двойной головкой, показанной на рисунке 1-10, перетаскивающем между дисплеями, сохраняет тот же виртуальный экран. Однако рисунок 1-11 показывает случай, для которого два дисплея представляют два уникальных виртуальных экрана. Мало того, что эти две видеокарты отличаются, но и возможно, что средство рендеринга, буферные атрибуты и пиксельные характеристики отличаются. Изменение в любом из этих трех элементов может привести к изменению на виртуальном экране.
Когда пользователь перетаскивает изображение от одного дисплея до другого, и виртуальный экран является тем же для обоих дисплеев, качество изображения должно казаться подобным. Однако для случая, показанного на рисунке 1-11, качество изображения может очень отличаться.
OpenGL для OS X прозрачно управляет рендерингом через многократные мониторы. Пользователь может перетащить окно от одного монитора до другого, даже при том, что их возможности дисплея могут отличаться, или они могут управляться несходными видеокартами с несходными разрешениями и глубиной цвета.
OpenGL динамично переключает средства рендеринга, когда изменяется виртуальный экран, содержащий большинство пикселей в окне OpenGL. Когда окно разделено между многократными виртуальными экранами, кадровый буфер растеризируется полностью средством рендеринга, управляющим экраном, содержащим самый большой сегмент окна. Области окна на других виртуальных экранах нарисованы путем копирования растеризированного изображения. Когда весь OpenGL нет никакого влияния производительности от многократной поддержки монитора, drawable объект выведен на экран на одном виртуальном экране.
Приложения должны отследить виртуальные экранные изменения и, при необходимости обновить текущее состояние приложения для отражения изменений в возможностях средства рендеринга. Посмотрите Работу с Рендерингом Контекстов.
Оффлайновое средство рендеринга
Оффлайновое средство рендеринга является тем, в настоящее время не связывающимся с дисплеем. Например, графический процессор мог бы быть выключен для сохранения питания, или не могло бы быть дисплея, сцепленного до видеокарты. Оффлайновые средства рендеринга не обычно видимы к Вашему приложению, но Ваше приложение может включить им путем добавления надлежащего атрибута средства рендеринга. Использование в своих интересах оффлайновых средств рендеринга полезно, потому что оно дает пользователю бесшовный опыт, когда они включают или демонтируют дисплеи.
Для получения дополнительной информации о конфигурировании контекста для наблюдения оффлайновых средств рендеринга посмотрите Renderer Выбора и Buffer Attributes. Чтобы позволить Вашему приложению переключиться на средство рендеринга, когда дисплей будет присоединен, посмотрите Обновление Контекст Рендеринга Когда Изменения Средства рендеринга или Геометрии.
Выполнение программы OpenGL в OS X
Рисунок 1-12 показывает поток данных в программе OpenGL, независимо от платформы, что работает программа.
Операции на вершину включают такие вещи как применение матриц трансформации, чтобы добавить перспективу или отсечь, и применение эффектов освещения. Операции на пиксель включают такие вещи как преобразование цветов и применение эффекты искажения и размытость. Пиксели, предназначенные для текстур, отправляются для текстурирования блока, где OpenGL хранит текстуры, пока это не должно применять их на объект.
OpenGL растеризирует обработанную вершину и пиксельные данные, означая, что данные сходятся для создания фрагментов. Фрагмент инкапсулирует все значения для пикселя, включая цвет, глубину, и иногда текстурируйте значения. Эти значения используются во время сглаживания и любых других вычислений, необходимых к формам заливки и соединить вершины.
Операции на фрагмент включают применение эффектов среды, глубины и тестирования шаблона и выполнения других операций, таких как смешивание и размывание. Некоторые операции — такие как удаление невидимой поверхности — заканчивают обработку фрагмента. OpenGL вовлекает полностью обработанные фрагменты в надлежащее расположение в кадровом буфере.
Штриховые стрелки на рисунке 1-12 указывают на пиксельные данные чтения назад от кадрового буфера. Они представляют операции, выполняемые функциями OpenGL такой как glReadPixels
, glCopyPixels
, и glCopyTexImage2D
.
До сих пор Вы видели, как OpenGL воздействует на любую платформу. Но как приложения Какао предоставляют данные OpenGL для обработки? Приложение Mac должно выполнить эти задачи:
Установите список буфера и атрибутов средства рендеринга, определяющих вид рисования, Вы хотите выполнить. (См. Средство рендеринга и Буферные Атрибуты.)
Запросите систему создать объект формата пикселя, содержащий формат пикселя, встречающий ограничения буфера и атрибутов рендеринга и списка всех подходящих комбинаций дисплеев и средств рендеринга. (См. Объекты Формата пикселя и Виртуальные Экраны.)
Создайте контекст рендеринга для содержания информации состояния, управляющей такими вещами как рисование цвета, представления и матриц проекции, характеристик света, и соглашения раньше упаковывали пиксели. При установке этого контекста необходимо обеспечить объект формата пикселя, потому что контекст рендеринга должен знать набор виртуальных экранов, которые могут использоваться для рисования. (См. Контексты Рендеринга.)
Свяжите drawable объект с контекстом рендеринга. drawable объект - то, что получает получение OpenGL, отправленное в тот контекст рендеринга. (См. Объекты Drawable.)
Сделайте контекст рендеринга текущим контекстом. OpenGL автоматически предназначается для текущего контекста. Несмотря на то, что Ваше приложение могло бы иметь несколько установленных контекстов рендеринга, только текущий является активным для рисования целей.
Выпустите команды рисования OpenGL.
Сбросьте содержание контекста рендеринга. Это заставляет ранее представленные команды быть представленными к drawable объекту и выводит на экран их пользователю.
Задачи, описанные в первых пяти элементах маркера, специфичны для платформы. Рисование к Окну или Представлению обеспечивает простые примеры того, как выполнить их. Поскольку Вы читаете другие части этого документа, Вы будете видеть, что существует много других задач, которые, несмотря на то, что не обязательный для рисования, действительно довольно необходимы для любого приложения, хотящего использовать OpenGL для выполнения сложного 3D получения эффективно на большом разнообразии систем Macintosh.
Подавание больших заявок OpenGL на Macintosh
OpenGL позволяет Вам создать приложения с выдающейся производительностью при обработке графики, а также большим пользовательским опытом — но ни одна из этих вещей не прибывает бесплатно. Ваше приложение выполняет лучше всего, когда оно работает с OpenGL, а не против него. С этим в памяти, вот инструкции, за которыми необходимо следовать для создавания высокоэффективных, выглядящих будущим образом приложений OpenGL:
Гарантируйте свое выполнение приложения успешно оффлайновыми средствами рендеринга и многократными видеокартами.
Apple поставляет много конфигураций усовершенствованного аппаратного обеспечения. Ваше приложение должно обработать изменения средства рендеринга беспрепятственно. Необходимо протестировать приложение на Mac с многократными графическими процессорами и включать тесты для присоединения и удаления дисплеев. Для получения дополнительной информации о том, как реализовать замену в горячем режиме правильно, посмотрите Работу с Рендерингом Контекстов
Избегите заканчивать и сбрасывать операции.
Обратите особое внимание на функции OpenGL, вынуждающие ранее представленные команды завершиться. Синхронизация аппаратного обеспечения машинной графики к CPU может привести к существенно более низкой производительности. Производительность покрыта подробно в Стратегиях Проектирования приложений OpenGL.
Используйте многопоточность для улучшения производительности приложения OpenGL.
Много Macs поддерживают многократные одновременные потоки выполнения. Ваше приложение должно использовать в своих интересах параллелизм. Приложения хорошего поведения могут использовать в своих интересах параллелизм в только некоторых, выравнивают кода. Посмотрите Параллелизм и OpenGL.
Используйте буферные объекты управлять Вашими данными.
Буферные объекты вершины (VBOs) позволяют OpenGL управлять данными вершины Вашего приложения. Используя вершину буферные объекты дают OpenGL больше возможностей кэшировать данные вершины в формате, который является дружественным по отношению к аппаратному обеспечению машинной графики, улучшая производительность приложения. Для получения дополнительной информации посмотрите Методы наиболее успешной практики для Работы с Данными Вершины.
Точно так же пиксельные буферные объекты (PBOs) должны использоваться для управления данными изображения. Посмотрите Методы наиболее успешной практики для Работы с Данными Текстуры
Используйте объекты кадрового буфера (FBOs), когда необходимо будет представить к внеэкранной памяти.
Объекты кадрового буфера позволяют Вашему приложению создавать вне экрана представляющие цели без многих ограничений зависимых от платформы интерфейсов. Посмотрите Рендеринг к Объекту Кадрового буфера.
Генерируйте объекты прежде, чем связать их.
Более ранняя версия OpenGL позволила Вашим приложениям создавать свои собственные имена объектов прежде, чем связать их. Однако необходимо избежать этого. Всегда используйте OpenGL API для генерации имен объектов.
Переместите свои Приложения OpenGL на OpenGL 3.2
Профиль Ядра OpenGL 3.2 обеспечивает полный разрыв от более ранних версий OpenGL в пользу более простого основанного на программе построения теней конвейера. Для лучшей совместимости с будущими аппаратными средствами и выпусками OS X, переместите свои приложения далеко от устаревших версий OpenGL. Когда Ваше приложение использует OpenGL 3.2, многие упомянутые выше рекомендации требуются.
Используйте питание средств разработки Apple.
Apple обеспечивает много инструментов, что справка создает приложения OpenGL и анализирует и настраивает их производительность. Изучение, как использовать эти инструменты, помогает Вам создать быстрые, надежные приложения. Настройка Вашего Приложения OpenGL описывает многие из этих инструментов.