Почему macOS Mojave требует Metal и не поддерживает OpenGL
Чтобы запустить новый macOS Mojave, компьютеры Mac должны иметь графическое оборудование, способное поддерживать Metal, современное низкоуровневое программное обеспечение Apple с низкими накладными расходами, которое обеспечивает доступ к обработке графики.
Примечание редактора: фурор по поводу того, почему Apple отказывается от OpenGL, снова вспыхнул с выпуском Mojave. Изначально эта часть была запущена в июне, но остается точной и актуальной сегодня
Список оборудования Apple Mac, поддерживающего новую macOS Mojave, идентичен его списку. компьютеров Mac, поддерживающих Metal. В частности, Metal – это аппаратно-ускоренная трехмерная графика и вычислительная среда Apple, стандартная библиотека и язык затенения графического процессора.
Для Mojave потребуется как минимум iMac конца 2012 года или Mac mini, MacBook Air или MacBook Pro середины 2012 года. Он также, конечно, работает на любом новом iMac Pro 2017 года или новых MacBook с Retina (выпущенных в 2015 году) и поддерживает все Mac Pro с черным цилиндром (выпущенные с 2013 года). Он также поддерживает более ранние модели Mac Pro с «теркой для сыра» до середины 2010 года, если они оснащены видеокартой с поддержкой Metal.

Почему Mojave требуется графический процессор с поддержкой Metal
Отсутствие поддержки графики Metal является причиной того, что некоторые компьютеры Mac, поддерживаемые в сегодняшней macOS High Sierra, не могут быть обновлены для работы с Mojave. Сюда входят iMac 2009-2011 («не тонкие»); 2010-2011 Mac mini; Пластиковые MacBook без Retina 2009-2010 годов; и модели MacBook Pro и MacBook Air 2011 года или более ранние без Retina.
В новом Mojave в течение нескольких лет прекращается поддержка моделей без Retina, но по-прежнему поддерживается некоторые Mac без Retina, поскольку проблема не в разрешении экрана, а в возможностях графического процессора. Старые модели Mac Pro, выпущенные в 2010 году, могут быть оснащены новыми графическими процессорами с поддержкой Metal для запуска новой версии, что дает понять, что Apple не просто отказывается от устаревших компьютеров, чтобы заставить их делать новые покупки.
Рисование черты на графических процессорах с поддержкой Metal позволяет Apple оптимизировать графическую производительность – особенно для совершенно новых программных функций, включая многопользовательский FaceTime и другие новые функции пользовательского интерфейса, знакомые iOS. Если у вас есть Mac в течение 8-9 лет, Mojave предлагает хороший повод обновить ваше оборудование и присоединиться к современной компании Metal.
Новый Mojave Выпуск будет официально выпущен этой осенью вместе с новой iOS 12, watchOS 5 и новой tvOS, следуя тому, что было регулярным графиком Apple для обновлений ОС в течение нескольких лет. В преддверии этого Apple предлагает программу общедоступной бета-версии Mojave, в которой пользователи могут выбрать загрузку предварительного выпуска программного обеспечения, заранее протестировать его новые функции и сообщить Apple обо всех обнаруженных ошибках..
Металл заменяет OpenGL
Металл впервые был поставлен в 2014 году для iPhone предыдущего года. 5s, чтобы в полной мере использовать графические возможности своей пользовательской системы A7 «Система на кристалле», которая включает в себя 64-разрядный ЦП и независимый графический процессор.

Повышение производительности Metal во многом связано с его оптимизацией, направленной на сокращение Загрузка процессора, позволяющая программному обеспечению более эффективно использовать мощность графического процессора. Metal достигает этого с помощью явной синхронизации и совместного использования пространства памяти между GPU и CPU; меньшая нагрузка на драйверы, предварительно вычисленные шейдеры и предварительная проверка состояния; и эффективная многопоточность, когда каждый поток ЦП может отправлять команды ГП.
Metal получил свое название из-за низкого уровня оптимизации оборудования, поскольку он работает на ” голый металл », а не нависать над большим уровнем аппаратной абстракции в модели кроссплатформенных графических фреймворков, таких как OpenGL, которые были разработаны для поддержки широкого спектра процессоров.
Apple изначально перешла на OpenGL в конце 90-х, после того, как Стив Джобс объявил о планах отказаться от собственного QuickDraw 3D компании, раннего проекта по созданию поддержки для программного рендеринга графики. в Mac. В то время переход на OpenGL позволил Apple воспользоваться преимуществами уже проделанной работы для создания программного обеспечения, обеспечивающего аппаратное ускорение на различных графических процессорах.
Однако пятнадцать лет спустя iOS от Apple стала крупнейшей платформой унифицированного мобильного оборудования. Параллельно с Metal, Apple выпустила первый 64-битный пользовательский процессор ARM, а также оптимизировала общий дизайн графического процессора, созданный Imagination Technologies. Забегая вперед, Apple знала, что все ее устройства iOS получат 64-битный процессор и усовершенствованный графический процессор.
За пределами iOS, лицензиаты Android и Windows Mobile использовали самые разные процессоры и графическое оборудование. Им суждено было отставать на годы в области производства 64-битных процессоров, и им приходилось сталкиваться с экономически эффективной «экономичной инженерией», которая требовала поставки устройств с неэффективной графикой.
Разработка современных мобильных графических процессоров была дорогой и рискованной предложение, которое полностью вытеснило гигантов мобильных графических процессоров AMD, Texas Instruments и Nvidia из бизнеса смартфонов.
Целью Apple для iOS было создание чрезвычайно высокопроизводительной графики, способной быстро повысить производительность, а затем так же быстро уменьшить ее, чтобы продлить срок службы батареи. Требовалась возможность оптимизировать поддержку будущих продуктов, особенно iPhone 6 и 6 Plus с более высоким разрешением, а также будущих моделей iPad, которые потребовали бы большей графической мощности, чем было у большинства ноутбуков ПК.
У лицензиатов Android и Windows были гораздо менее амбициозные планы. Samsung представила новые панели с высоким разрешением, но поставляла их с базовыми графическими процессорами под управлением стандартного программного обеспечения Android. Основное внимание уделялось характеристикам хвастовства, а не фактическому удобству использования или производительности в играх, творческих или ресурсоемких программах.
В 2015 году Apple предоставила поддержку Metal для последних моделей Mac ( с графическими процессорами 2012 года выпуска, включая Intel HD 4000 и Iris Graphics; графические процессоры AMD Graphics Core Next; и графические процессоры на базе Kepler от Nvidia) в macOS El Capitan.
Metal 2 фокусируется на будущем ML, AR, VR
В прошлом году Apple анонсировала Metal 2 для macOS High Sierra с улучшениями, включая новый отладчик шейдеров и средство просмотра зависимостей графического процессора для более эффективного профилирования и отладки в Xcode; поддержка ускорения вычислительно-ресурсоемкой задачи обучения нейронных сетей, включая машинное обучение; снизить нагрузку на ЦП с помощью конвейеров, управляемых графическим процессором, где графический процессор может создавать свои собственные команды рендеринга и планировать их практически без взаимодействия с ЦП; и поддержка виртуальной реальности.
Metal 2 также поддерживается в iOS на устройствах, использующих новые модели A11 Bionic: iPhone 8, 8 Plus и X. Этот чип также запустил первый независимый графический процессор Apple собственной разработки, еще более сильно оптимизированный не только для ускорения графики, но и для ускорения машинного обучения и дополненной реальности (включая такие приложения, как VR и отслеживание лиц).
Apple больше не пытается работать в сообществе товарной графики, где ее собственный продукт является просто частным вариантом. компьютера Intel, оснащенного одним из нескольких патентованных графических процессоров, которые все должны быть абстрагированы, чтобы они выглядели так же, как разработчики, пытающиеся их использовать.
Сегодня , Apple создает собственные микросхемы с высокой степенью адаптации, включая собственные ЦП, ГП и Neural Engine, и ей необходимо разработать программное обеспечение на «голом железе», чтобы они работали эффективно и с максимальной производительностью.
Android и другие платформы начали поддерживать разработанный сообществом фреймворк Vulkan для графики, который вносит улучшения по сравнению с OpenGL эпохи 1990-х годов, но они не разделяют то же самое достижимые цели как Apple. Большинство производителей Android ориентированы на крупные продажи базовых телефонных устройств, которые в среднем продаются по цене около 200 долларов.
Прекращение поддержки OpenGL
Ранее в этом месяце в документации для разработчиков Apple сообщалось, что активная разработка OpenGL и OpenCL на Mac прекращена, и что в дальнейшем в API будут внесены только «незначительные изменения».
«Приложения, созданные с использованием OpenGL и OpenCL, будут продолжать работать в macOS 10.14, но эти устаревшие технологии устарели в macOS 10.14. Игры и приложения с интенсивной графикой, которые use OpenGL теперь должен принять Metal. Аналогичным образом, приложения, использующие OpenCL для вычислительных задач, теперь должны использовать шейдеры Metal и Metal Performance Shaders », – отметили в компании.
В программном обеспечении« устаревание »означает, что функция была заменена, и, хотя старая версия должна все еще работать в настоящее время, рекомендуется прекратить ее использование в дальнейшем и подготовиться к будущему, когда она будет полностью удалена.
Это вызвало резкую реакцию кликбейта, предупреждающего о том, что “разработчики” возмущаются и размахивают вилами по поводу объявления. Однако основные применения OpenGL и OpenCL (инфраструктура вычислений на GPU, которую Apple первоначально разработала и распространила с сообществом OpenGL) портируют низкоуровневый код между Linux, Windows и Mac.
Большинство современных игр с 3D-графикой жестко не запрограммированы с использованием низкоуровневого кода. OpenGL. Вместо этого разработчики используют фреймворки графического «движка» более высокого уровня, такие как Unreal Engine 4 от Epic Games, WoW и SC2 Engine от Blizzard; или Unity Engine. Подобно собственным графическим фреймворкам Apple более высокого уровня, таким как SceneKit, SpriteKit и ARKit, они уже используют Metal в своей основе.
Это означает, что устаревание OpenGL не повлияет на игры, в которые вы играете сегодня, и на новые игры, которые вы будете искать в будущем. . Однако они будут значительно ускорены последними достижениями Apple в области кремния низкого уровня и почти такого же низкого уровня металлического покрытия сверху. Кроме того, Metal также поддерживает развертывание новых передовых приложений, включая многопользовательский FaceTime, в публичной бета-версии macOS Mojave.
OpenGL Core Details
OpenGL Core is the new back-end capable of supporting the latest OpenGL features on Windows, MacOS X and Linux. This scales from OpenGL 3.2 to OpenGL 4.5 depending on the OpenGL driver support.
The new OpenGL Core is used by default on MacOSX and Linux.
MacOSX OpenGL driver limitations
As a new feature, the OS X Editor and Standalone now support the new OpenGL backend, which enables the use of OpenGL 3.x and 4.x features such as tessellation and geometry shaders.
However, as Apple restricts the OpenGL version on OS X desktop to 4.1 at most, it does not support all DirectX 11 features (such as Unordered Access Views or Compute Shaders). This means that all shaders that are configured to target Shader Level 5.0 (with #pragma target 50) will fail to load on OS X.
Therefore a new shader target level is introduced: #pragma target gl4.1. This target level requires at least OpenGL 4.1 or DirectX 11.0 Shader Level 5 on desktop, or OpenGL ES 3.1 + Android Extension Pack on mobiles.
OpenGL Core features
The new OpenGL back-end introduces many new features (previously mostly DX11/GLES3 only):
- Compute shaders (as well as ComputeBuffers and “random write” render textures)
- Tessellation and Geometry shaders
- Indirect draw (Graphics.DrawProcedural and Graphics.DrawProceduralIndirect)
- Advanced blend modes
Shader changes
When using the existing #pragma targets, they map to following GL levels:
- #pragma target 4.0 // OpenGL ES 3.1, desktop OpenGL 3.x, DX Shader Model 4.0
- #pragma target gl4.1 // Desktop OpenGL 4.1, SM 4.0 + tessellation to match MacOSX 10.9 capabilities
- #pragma target 5.0 // OpenGL ES 3.1 + Android Extension Pack, desktop OpenGL >= 4.2, DX Shader Model 5.0
For including and excluding shader platforms from using a specific shaders, the following #pragma only_renderers / exclude_renderers targets can be used:
- #pragma only_renderers glcore: Only compile for the desktop GL. Like the ES 3 target, this also scales up to contain all desktop GL versions, where basic shaders will support GL 2.x while shaders requiring SM5.0 features require OpenGL 4.2+.
OpenGL core profile command line arguments
It’s possible to start the editor or the player with OpenGL using the command line arguments:
- -force-opengl: To use the legacy OpenGL back-end
- -force-glcore: To use the new OpenGL back-end. With this argument, Unity will detect all the features the platform support to run with the best OpenGL version possible and all available OpenGL extensions
- -force-glcoreXY: XY can be 32, 33, 40, 41, 42, 43, 44 or 45; each number representing a specific version of OpenGL. If the platform doesn’t support a specific version of OpenGL, Unity will fallback to a supported version
- -force-clamped: Request that Unity doesn’t use OpenGL extensions which guarantees that multiple platforms will execute the same code path. This is an approach to test if an issue is platform specific (a driver bug for example).
Native OpenGL ES on desktop command line arguments
OpenGL ES graphics API is available on Windows machines with Intel or NVIDIA GPUs with drivers supporting OpenGL ES.
- -force-gles: To use the new OpenGL back-end in OpenGL ES mode. With this argument, Unity will detect all the features the platform support to run with the best OpenGL ES version possible and all available OpenGL ES extensions
- -force-glesXY: XY can be 20, 30, 31 or 31aep; each number representing a specific version of OpenGL ES. If the platform doesn’t support a specific version of OpenGL ES, Unity will fallback to a supported version. If the platform doesn’t support OpenGL ES, Unity will fallback to another graphics API.
- -force-clamped: Request that Unity doesn’t use OpenGL extensions which guarantees that multiple platforms will execute the same code path. This is an approach to test if an issue is platform specific (a driver bug for example).
OpenGL на Apple M1
Apple ведёт активную борьбу с открытыми стандартами и некоторое время назад объявила OpenGL «устаревшим» на своей платформе macOS Mojave 10.14, двигая разработчиков в сторону проприетарного графического API Metal. Анонсы Mac mini на чипсете Apple M1 (ARM) и macOS 11 Big Sur были восприняты с тревогой за судьбу OpenGL на этой платформе, однако различные источники успокаивали — OpenGL всё ещё поддерживается macOS Big Sur.
Оставался один вопрос — какую версию OpenGL может предложить графический процессор «новичка» Apple M1? Официальная документация Apple не обновлялась с 2017го года, и в ней, разумеется, нет упоминаний M1, а доступные на момент написания статьи не освещают данный момент.
Наконец, одним вопросом стало меньше! Как оказалось, macOS заявляет о поддержке OpenGL 4.1 для данного чипа, реализованного поверх Metal — то есть достигает верхней планки OpenGL, доступной на данной платформе для других GPUs, даже GeForce и Radeon.
Для сравнения — сверху скриншот CAD Assistant, запущенного на M1 (Mac mini ‘2020), а снизу на Intel UHD Graphics 630 (Mac mini ‘2018). Скриншот демонстрирует работу трассировки путей (Path Tracing) на GPU реализованного открытым графическим движком Open CASCADE Technology. Path Tracing требует OpenGL 4+ и представляется собой достаточно сложную GLSL программу — так что это неплохой способ проверить работоспособность GPU и реализации OpenGL.
К сведению, самая распространённые реализации OpenGL на Windows давно поддерживают версию OpenGL 4.5 (‘2014) и выше, спецификации которой вышли без малого шесть лет назад, тогда как OpenGL 4.1 (‘2010) уже исполнилось 10 лет! Но удивляться «отсталости» Apple тут нет смысла — компания нигде не объявляла войну OpenGL, но план вытеснения его с платформы macOS прослеживался уже давно, даже до представления общественности проприетарного графического API Metal в 2014ом году — сначала для iOS, а затем и для macOS. И, к сожалению, в отличие от других платформ, производители видеокарт не могут обновить версию OpenGL независимо от Apple.
Счётчик кадров в секунду в простой тестовой сцене со стеклянным шариком демонстрирует преимущество до двух раз M1 над Intel HD 630: 48 FPS против 25 FPS для маленького окошка и 14.8 FPS против 6.5 FPS для разрешения 1080p. Конечно, тут M1 выглядит достойно только по сравнению со слабым GPU процессора Intel i5 — цифры не идут ни в какое сравнение со 100+ FPS для 1080p на мобильных видеокартах среднего сегмента, таких как четырёхлетний GeForce 1060 GTX.
Для простоты эксперимента, CAD Assistant запускался через Rosetta — программное решение Apple для запуска x86-64 приложений на ARM64 процессоре (коим является новый M1). Важность такого инструмента трудно недооценить, ведь на момент анонса 99.9% программного обеспечения, доступного для macOS, рассчитано на процессоры Intel.
И тем удивительнее, как смело Apple играет своими мускулами, ведь Rosetta даже не предустановлена на macOS Big Sur! Приложения .app для Intel в Finder просто не запускаются на свежей системе, при этом система не показывает ни единого сообщения об ошибке. А вот запуск инсталлционного пакета .pkg сразу предложила установить Rosetta, после чего запуск старых приложений стал возможен.
Проблема совместимости со старыми приложениями при появлении новых платформ была актуальна не один раз. IA-64 (64битная архитектура процессоров Intel Itanium) не поддерживала запуск x86 приложений, а вот x86_64 (или AMD64, 64-битная архитектура современных процессоров Intel и AMD) была изначально рассчитана на совместимость с существующими x86 платформами и приложениями. Более того, 64-битная версия Windows XP для процессоров AMD вышла только в 2005 году — то есть спустя два года после выпуска первых процессоров AMD Athlon 64 / Opteron с этой архитектурой. Благодаря обратной совместимости (в том числе реализации WoW64 для прозрачного запуска 32битных приложений на 64битной Windows), 32битные x86 приложения и операционные системы оставались популярными ещё долгие годы.
Процессоры ARM физически не поддерживают инструкции x86 (как и наоборот), поэтому реализация запуска и эффективной работы приложений, написанных для другой архитектуры процессоров, представляет собой определённые сложности. Для Apple этот опыт был уже не первым в истории — первая версия Rosetta использовалась для запуска PowerPC приложений на процессорах Intel в 2006 году.
Подобные решения можно было наблюдать и на других платформах, таких как Android — когда аутсайдер мобильного рынка Intel пытался конкурировать с ARM. Такие версии Android на процессорах Intel позволяли запускать приложения собранные для архитектуры ARM. По моему опыту, работала такая комбинация не очень стабильно — многие приложения падали и работали некорректно. Тем интереснее понаблюдать за работой приложений через Rosetta 2:
- Видеоплеер sView заработал без видимых проблем, но наблюдаются падения приложения при изменении размера окна.
- CAD Assistant запускается и в целом работает, однако вскоре возникают артефакты отображения текста через рендер QtQuick.
- Telegram запустился и вроде бы работает.
- Edge также заработал на паре сайтов.
- Firefox запустился, но работает некорректно (зависает открытие сайтов, падения).
Не могу сказать, связаны ли наблюдаемые проблемы именно с Rosetta, или с самой системой macOS Big Sur, или даже с графическими драйверами Apple M1. В будущем с появлением нативных ARM приложений для macOS этот вопрос может прояснится.
Английская версия публикации может быть найдена по следующей ссылке.
Обновление #1
Похоже артефакты текста в QtQuick (Qt5) связаны с проблемами реализации OpenGL на Apple M1 (судя по комментариям пользователей — проблема не воспроизводится на Intel). В Qt есть даже переменная, которая позволяет обойти проблему:
export QT_ENABLE_GLYPH_CACHE_WORKAROUND=1 open -a "/Applications/CAD Assistant.app"
Падения sView в момент масштабирования окна могут быть связаны с проблемами в обработке OpenGL из не-GUI потока (данная возможность была объявлена «устаревшей» в предыдущем обновлении macOS). Отключить отрисовку в отдельном потоке в sView можно специальным ключом:
/Applications/sView.app/Contents/MacOS/sView --cocoa-threaded=off
Что такое OpenGL?
Сейчас трёхмерные изображения можно увидеть везде, начиная от компьютерных игр и заканчивая системами моделлирования в реальном времени. Раньше, когда трёхмерная графика существовала только на суперкомпьютерах, не существовало единого стандарта в области графики. Все программы писались с «нуля» или с использованием накопленного опыта, но в каждой программе реализовывались свои методы для отображения графической информации. С приходом мощных процессоров и графических ускорителей трёхмерная графика стала реальностью для персональных компьютеров. Но в тоже время производители программного обеспечения столкнулись с серьёзной проблемой — это отсутствие каких-либо стандартов, которые позволяли писать программы, независимые от оборудования и операционной системы. Одним из первых таких стандартов, существующий и по сей день является OpenGL.
OpenGL — это графический стандарт в области компьютерной графики. На данный момент он является одним из самых популярных графических стандартов во всём мире. Ещё в 1982 г. в Стенфордском университете была разработана концепция графической машины, на основе которой фирма Silicon Graphics в своей рабочей станции Silicon IRIS реализовала конвейер рендеринга. Таким образом была разработана графическая библиотека IRIS GL. На основе библиотеки IRIS GL, в 1992 году был разработан и утверждён графический стандарт OpenGL. Разработчики OpenGL — это крупнейшие фирмы разработчики как оборудования так и программного обеспечения: Silicon Graphics, Inc., Microsoft, IBM Corporation, Sun Microsystems, Inc., Digital Equipment Corporation (DEC), Evans & Sutherland, Hewlett-Packard Corporation, Intel Corporation и Intergraph Corporation.
OpenGL переводится как Открытая Графическая Библиотека (Open Graphics Library), это означает, что OpenGL — это открытый и мобильный стандарт. Программы, написанные с помощью OpenGL можно переносить практически на любые платформы, получая при этом одинаковый результат, будь это графическая станция или суперкомпьютер. OpenGL освобождает программиста от написания программ для конкретного оборудования. Если устройство поддерживает какую-то функцию, то эта функция выполняется аппаратно, если нет, то библиотека выполняет её программно.
Что же представляет из себя OpenGL? С точки зрения программиста OpenGL — это программный интерфейс для графических устройств, таких как графические ускорители. Он включает в себя около 150 различных команд, с помощью которых программист может определять различные объекты и производить рендеринг. Говоря более простым языком, вы определяете объекты, задаёте их местоположение в трёхмерном пространстве, определяете другие параметры (поворот, масштаб, . ), задаёте свойства объектов (цвет, текстура, материал, . ), положение наблюдателя, а библиотека OpenGL позаботится о том чтобы отобразить всё это на экране. Поэтому можно сказать, что библиотека OpenGL является только воспроизводящей (Rendering), и занимается только отображением 3Д обьектов, она не работает с устройствами ввода (клавиатуры, мыши). Также она не поддерживает менеджер окон.
OpenGL имеет хорошо продуманную внутреннюю структуру и довольно простой процедурный интерфейс. Несмотря на это с помощью OpenGL можно создавать сложные и мощные программные комплексы, затрачивая при этом минимальное время по сравнению с другими графическими библиотеками.
В некоторых библиотеках OpenGL (например под X Windows) имеется возможность изображать результат не только на локальной машине, но также и по сети. Приложение, которое вырабатывает команды OpenGL называется клиентом, а приложение, которое получает эти команды и отображает результат — сервером. Таким образом можно строить очень мощные воспроизводящие комплексы на основе нескольких рабочих станций или серверов, соединённых сетью.
Основные возможности OpenGL.
- Геометрические и растровые примитивы. На основе геометрических и растровых примитивов строятся все объекты. Из геометрических примитивов библиотека предоставляет: точки, линии, полигоны. Из растровых: битовый массив(bitmap) и образ(image)
- Использование В-сплайнов. B-сплайны используются для рисования кривых по опорным точкам.
- Видовые и модельные преобразования. С помощью этих преобразований можно располагать обьекты в пространстве, вращать их, изменять форму, а также изменять положение камеры из которой ведётся наблюдение.
- Работа с цветом. OpenGL предоставляет программисту возможность работы с цветом в режиме RGBA (красный-зелёный-синий-альфа) или используя индексный режим, где цвет выбирается из палитры.
- Удаление невидимых линий и поверхностей. Z-буферизация.
- Двойная буферизация. OpenGL предоставляет как одинарную так и двойную буферизацию. Двойная буферизация используется для того, чтобы устранить мерцание при мультипликации, т.е. изображение каждого кадра сначала рисуется во втором(невидимом) буфере, а потом, когда кадр полностью нарисован, весь буфер отображается на экране.
- Наложение текстуры. Позволяет придавать объектам реалистичность. На объект, например шар, накладывается текстура(просто какое-то изображение), в результате чего наш объект теперь выглядит не просто как шар, а как разноцветный мячик.
- Сглаживание. Сглаживание позволяет скрыть ступенчатость, свойственную растровым дисплеям. Сглаживание изменяет интенсивность и цвет пикселей около линии, при этом линия смотрится на экране без всяких зигзагов.
- Освещение. Позволяет задавать источники света, их расположение, интенсивность, и т.д.
- Атмосферные эффекты. Например туман, дым. Всё это также позволяет придать объектам или сцене реалистичность, а также «почувствовать» глубину сцены.
- Прозрачность объектов.
- Использование списков изображений.
Дополнительные библиотеки OpenGL
Несмотря на то, что библиотека OpenGL (сокращённо GL) предоставляет практически все возможности для моделирования и воспроизведения трёхмерных сцен, некоторые из функций, которые требуются при работе с графикой, отсутствуют в стандартной библиотеке OpenGL.. Например, чтобы задать положение и направление камеры, с которой будет наблюдаться сцена, нужно самому рассчитывать модельную матрицу, а это далеко не все умеют. Поэтому для OpenGL существуют так называемые вспомогательные библиотеки.
Первая из этих библиотек называется GLU. Эта библиотека уже стала стандартом и поставляется вместе с главной библиотекой OpenGL. В состав этой библиотеки вошли более сложные функции, например для того чтобы определить цилиндр или диск потребуется всего одна команда. Также в библиотеку вошли функции для работы со сплайнами, реализованы дополнительные операции над матрицами и дополнительные виды проекций.
Следующая библиотека, также широко используемая — это GLUT. Это также независимая от платформы библиотека. Она реализует не только дополнительные функции OpenGL, но и предоставляет функции для работы с окнами, клавиатурой и мышкой. Для того чтобы работать с OpenGL в конкретной операционной системе (например Windows или X Windows), надо провести некоторую предварительную настройку и эта предварительная настройка зависит от конкретной операционной системы. С библиотекой GLUT всё намного упрощается, буквально несколькими командами можно определить окно, в котором будет работать OpenGL, определить прерывание от клавиатуры или мышки и всё это не будет зависеть от операционной системы. Библиотека предоставляет также некоторые функции, с помощью которых можно определять некоторые сложные фигуры, такие как конусы, тетраэдры, и даже можно с помощью одной команды определить чайник!
Есть ещё одна библиотека похожая на GLUT, называется она GLAUX. Это библиотека разработана фирмой Microsoft для операционной системы Windows. Она во многом схожа с библиотекой GLUT, но немного отстаёт от неё по своим возможностям. И ещё один недостаток заключается в том, что библиотека GLAUX предназначена только для Windows, в то время как GLUT поддерживает очень много операционных систем.
Существуют и другие дополнительные библиотеки для OpenGL. Все они добавляют что-то своё или ориентированы на какую-то платформу. Например существует такая библиотека как GLX — это расширение для X Windows, позволяющее использовать в X Windows OpenGL. GLX предоставляет не только локальный рендеринг, но и рендеринг по сети.
Альтернативы OpenGL
Хотя библиотека OpenGL и считается одной из лучших библиотек как для профессионального применения так и для игр, у неё существуют и конкуренты.
Одним из главных конкурентов считается Direct3D из пакета DirectX, разработанный фирмой Microsoft. Direct3D создавался исключительно для игровых приложений. Если сравнивать эти две библиотеки, то нельзя сказать, что одна из них лучше, а другая хуже, у каждой библиотеки имеются свои особенности. Например, если сравнивать их в плане переносимости программ с одной платформы на другую, то Direct3D будет работать только на Intel платформах под управлением операционной системы Windows, в то время программы, написанные с помощью OpenGL можно успешно перенести на такие платформы как Unix, Linux, SunOS, IRIX, Windows, MacOS и многие другие. А вот в плане объектно-ориентированного подхода OpenGL уступает Direct3D. OpenGL работает по принципу конечного автомата, переходя из одного состояния в другое, совершая при этом какие-то преобразования. Ещё одним преимуществом Direct3D является поддержка дешёвого оборудования, OpenGL же поддерживается не на всех графических картах, но для профессиональных ускорителей OpenGL является стандартом де-факто. И ещё, OpenGL легче чем Direct3D для изучения основ графики, OpenGL можно применять например для начального изучения трёхмерной графики.
GLide до недавнего времени тоже являлся довольно широко используемым стандартом для игровых приложений. Этот стандарт создала фирма 3Dfx и библиотека GLide создавалась исключительно для видео ускорителей фирмы 3Dfx Voodoo и была оптимизирована исключительно под них. GLide является более низкоуровневым по отношению к OpenGL и по своим командам похож на него. GLide мало чем отличается от OpenGL по своим возможностям, за исключением некоторых функций, которые специально предназначались для Voodoo ускорителей. Но к сожалению 3Dfx отказалась от этого стандарта, передав его в руки разработчиков открытого программного обеспечения.
Есть ещё несколько библиотек, среди них можно отметить Heidi. Heidi это библиотека или даже лучше сказать драйвер для визуализации трёхмерных сцен, используемый только в 3D Studio Max и только под Windows NT.
Стоит также отметить совместную разработку двух гигантов — Microsoft и Silicon Graphics в области стандартизации компьютерной графики. Этот проект носит название Fahrenheit и сейчас находится в стадии разработки.
Заключение
Заканчивая вводный рассказ про OpenGL хочется подвести некоторые итоги. Итак OpenGL представляет собой единый стандарт для разработки трёхмерных приложений, сочетает в себе такие качества как мощь и в то же время простоту. Мультиплатформенность позволяет без труда переносить программное обеспечение с одной операционной системы в другую. OpenGL предоставляет вам в распоряжение всю мощь аппаратных возможностей, которые вы имеете на данном компьютере и при написании программ вам не нужно будет беспокоится о конкретных деталях используемого оборудования, за вас побеспокоится драйвер OpenGL. OpenGL прекрасно подходит как для профессионалов так и для новичков в области компьютерной графики.
