OpenGL на платформе Mac

Можно сказать, что Apple имеет реализацию OpenGL на ее платформе путем рассмотрения пользовательского интерфейса для многих приложений, установленных с OS X. Отражения, встроенные в iChat (рисунок 1-1), обеспечивают один из более известных примеров. Скорость отклика окон, мгновенные результаты применения эффекта в iPhoto и многих других операций в OS X вследствие использования OpenGL. OpenGL доступен всем приложениям Macintosh.

OpenGL для OS X реализован как ряд платформ, содержащих механизм исполнения OpenGL и его программное обеспечение получения. Эти платформы используют независимые от платформы виртуальные ресурсы для освобождения программирования как можно больше от базового аппаратного обеспечения машинной графики. OS X обеспечивает ряд прикладных программных интерфейсов (APIs), который приложения Какао могут использовать для поддержки получения OpenGL.

Рисунок 1-1  OpenGL обеспечивает отражения в iChat
OpenGL provides the reflections in iChat

Эта глава обеспечивает обзор OpenGL и интерфейсов Ваше использование приложения на платформе Mac для наслаждения его.

Понятия OpenGL

Чтобы понять, как OpenGL вписывается в OS X и Ваше приложение, необходимо сначала понять, как разработан OpenGL.

OpenGL реализует клиент-серверную модель

OpenGL использует клиент-серверную модель, как показано на рисунке 1-2. Когда Ваше приложение вызывает функцию OpenGL, оно говорит с клиентом OpenGL. Клиент поставляет команды рисования серверу OpenGL. Природа клиента, сервера и канала связи между ними является определенной для каждой реализации OpenGL. Например, сервер и клиенты могли быть на различных компьютерах, или они могли быть различными процессами на том же компьютере.

Рисунок 1-2  клиент-серверная модель OpenGL

Клиент-серверная модель позволяет графической рабочей нагрузке быть разделенной между клиентом и сервером. Например, все компьютеры Macintosh поставляют со специализированным аппаратным обеспечением машинной графики, оптимизированным для выполнения графических вычислений параллельно. Рисунок 1-3 показывает общее расположение CPUs и GPUs. С этой аппаратной конфигурацией клиент OpenGL выполняется на CPU, и сервер выполняется на GPU.

  Модель платформы Графики рисунка 1-3

Команды 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.

Рисунок 1-4  MacOS X моделей драйвера OpenGL

OS X поддерживает выставочное пространство, которое может включать многократные несходные дисплеи, каждый управляемый различными видеокартами с различными возможностями. Кроме того, многократные средства рендеринга OpenGL могут управлять каждой видеокартой. Для размещения этой универсальности OpenGL для OS X сегментируется на четко определенные уровни: уровень оконной системы, уровень платформы и уровень драйвера, как показано на рисунке 1-5. Эта сегментация допускает сменные интерфейсы и к уровню оконной системы и к уровню платформы. Плагин соединяет интерфейсом с гибкостью предложения в конфигурации программного и аппаратного обеспечения, не нарушая стандарт OpenGL.

  Уровни рисунка 1-5 OpenGL для OS X
Layers of OpenGL for OS X

Уровень оконной системы является специфичным для 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.

Рисунок 1-6  интерфейсы программирования используется для содержания OpenGL
The programing interfaces used for OpenGL content

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.)

  Поток данных рисунка 1-7 через OpenGL
Data flow through OpenGL

Виртуальные экраны

Характеристики и качество содержания OpenGL, которое видит пользователь, зависят и от средства рендеринга и от физического дисплея, используемого для просмотра содержания. Комбинацию средства рендеринга и физического дисплея вызывают виртуальным экраном. Это важное понятие имеет импликации для любого приложения OpenGL, работающего на OS X.

Простая система, с одной видеокартой и одним физическим дисплеем, обычно имеет два виртуальных экрана. Один виртуальный экран состоит из основанного на аппаратных средствах средства рендеринга и физического дисплея, и другой виртуальный экран состоит из основанного на программном обеспечении средства рендеринга и физического дисплея. OS X обеспечивает основанное на программном обеспечении средство рендеринга как нейтрализацию. Для Вашего приложения возможно уменьшить использование этой нейтрализации. Вы будете видеть как в Выборе Renderer и Buffer Attributes.

Зеленый прямоугольник вокруг изображения OpenGL на рисунке 1-8 окружает виртуальный экран для системы с одной видеокартой и одним дисплеем. Обратите внимание на то, что виртуальный экран не является физическим дисплеем, который является, почему зеленый прямоугольник нарисован вокруг окна приложения, показывающего содержание OpenGL. В этом случае это - средство рендеринга, предоставленное видеокартой, объединенной с характеристиками дисплея.

Рисунок 1-8  виртуальные отображения на экране, что видит пользователь
A virtual screen displays what the user sees

Поскольку виртуальный экран не является просто физическим дисплеем, система с одним дисплеем может использовать больше чем один виртуальный экран за один раз, как показано на рисунке 1-9. Зеленые прямоугольники нарисованы для указания на каждый виртуальный экран. Предположите, что виртуальный экран на правой стороне использует средство рендеринга только для программного обеспечения и что то на левом использовании аппаратно-зависимое средство рендеринга. Несмотря на то, что это - изобретенный пример, он иллюстрирует тезис.

Рисунок 1-9  Два виртуальных экрана
Two virtual screens

Также возможно иметь виртуальный экран, который может представлять больше чем один физический дисплей. Зеленый прямоугольник на рисунке 1-10 нарисован вокруг виртуального экрана, охватывающего два физических дисплея. В этом случае то же аппаратное обеспечение машинной графики управляет парой идентичных дисплеев. Зеркальный дисплей также имеет единственный виртуальный экран, связанный с многократными физическими дисплеями.

Рисунок 1-10  виртуальный экран может представлять больше чем один физический экран
A virtual screen can represent more than one physical screen

Понятие виртуального экрана особенно важно, когда пользователь перетаскивает изображение от одного физического экрана до другого. Когда это происходит, виртуальный экран может измениться, и с ним, много атрибутов процесса обработки изображений, таких как текущее средство рендеринга, могут измениться. С видеокартой с двойной головкой, показанной на рисунке 1-10, перетаскивающем между дисплеями, сохраняет тот же виртуальный экран. Однако рисунок 1-11 показывает случай, для которого два дисплея представляют два уникальных виртуальных экрана. Мало того, что эти две видеокарты отличаются, но и возможно, что средство рендеринга, буферные атрибуты и пиксельные характеристики отличаются. Изменение в любом из этих трех элементов может привести к изменению на виртуальном экране.

Когда пользователь перетаскивает изображение от одного дисплея до другого, и виртуальный экран является тем же для обоих дисплеев, качество изображения должно казаться подобным. Однако для случая, показанного на рисунке 1-11, качество изображения может очень отличаться.

Рисунок 1-11  Два виртуальных экрана и две видеокарты
Two virtual screens and two graphics cards

OpenGL для OS X прозрачно управляет рендерингом через многократные мониторы. Пользователь может перетащить окно от одного монитора до другого, даже при том, что их возможности дисплея могут отличаться, или они могут управляться несходными видеокартами с несходными разрешениями и глубиной цвета.

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

Приложения должны отследить виртуальные экранные изменения и, при необходимости обновить текущее состояние приложения для отражения изменений в возможностях средства рендеринга. Посмотрите Работу с Рендерингом Контекстов.

Оффлайновое средство рендеринга

Оффлайновое средство рендеринга является тем, в настоящее время не связывающимся с дисплеем. Например, графический процессор мог бы быть выключен для сохранения питания, или не могло бы быть дисплея, сцепленного до видеокарты. Оффлайновые средства рендеринга не обычно видимы к Вашему приложению, но Ваше приложение может включить им путем добавления надлежащего атрибута средства рендеринга. Использование в своих интересах оффлайновых средств рендеринга полезно, потому что оно дает пользователю бесшовный опыт, когда они включают или демонтируют дисплеи.

Для получения дополнительной информации о конфигурировании контекста для наблюдения оффлайновых средств рендеринга посмотрите Renderer Выбора и Buffer Attributes. Чтобы позволить Вашему приложению переключиться на средство рендеринга, когда дисплей будет присоединен, посмотрите Обновление Контекст Рендеринга Когда Изменения Средства рендеринга или Геометрии.

Выполнение программы OpenGL в OS X

Рисунок 1-12 показывает поток данных в программе OpenGL, независимо от платформы, что работает программа.

Рисунок 1-12  поток данных через OpenGL
The OpenGL pipeline

Операции на вершину включают такие вещи как применение матриц трансформации, чтобы добавить перспективу или отсечь, и применение эффектов освещения. Операции на пиксель включают такие вещи как преобразование цветов и применение эффекты искажения и размытость. Пиксели, предназначенные для текстур, отправляются для текстурирования блока, где OpenGL хранит текстуры, пока это не должно применять их на объект.

OpenGL растеризирует обработанную вершину и пиксельные данные, означая, что данные сходятся для создания фрагментов. Фрагмент инкапсулирует все значения для пикселя, включая цвет, глубину, и иногда текстурируйте значения. Эти значения используются во время сглаживания и любых других вычислений, необходимых к формам заливки и соединить вершины.

Операции на фрагмент включают применение эффектов среды, глубины и тестирования шаблона и выполнения других операций, таких как смешивание и размывание. Некоторые операции — такие как удаление невидимой поверхности — заканчивают обработку фрагмента. OpenGL вовлекает полностью обработанные фрагменты в надлежащее расположение в кадровом буфере.

Штриховые стрелки на рисунке 1-12 указывают на пиксельные данные чтения назад от кадрового буфера. Они представляют операции, выполняемые функциями OpenGL такой как glReadPixels, glCopyPixels, и glCopyTexImage2D.

До сих пор Вы видели, как OpenGL воздействует на любую платформу. Но как приложения Какао предоставляют данные OpenGL для обработки? Приложение Mac должно выполнить эти задачи:

Задачи, описанные в первых пяти элементах маркера, специфичны для платформы. Рисование к Окну или Представлению обеспечивает простые примеры того, как выполнить их. Поскольку Вы читаете другие части этого документа, Вы будете видеть, что существует много других задач, которые, несмотря на то, что не обязательный для рисования, действительно довольно необходимы для любого приложения, хотящего использовать OpenGL для выполнения сложного 3D получения эффективно на большом разнообразии систем Macintosh.

Подавание больших заявок OpenGL на Macintosh

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