Opengl в android — руководство о том, как работает opengl?

Как работает OpenGL

Если смотреть с точки зрения разработчика, то OpenGL — программный интерфейс, который управляет работой видеокарты. Всего есть чуть более 150 команд, с помощью которых программист определяет, какие именно объекты будут отправлены на рендеринг.

Нет необходимости создавать разные версии графических объектов для отображения в различных режимах качества графики: все подстраивается «на автомате», исходя из заданных программистов параметров.

Можно утверждать, что этот инструмент только воспроизводит объекты, но не взаимодействует с устройствами ввода — мышью, клавиатурой, геймпадом или игровым рулем. За это, а также за работу менеджера окон, отвечают уже другие компоненты.

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

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

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

Если же вы используете эмулятор Андроид на ПК, в этом случае рекомендую переключиться OpenGL: для систем семейства Unix этот инструмент подходит больше.

Архитектура

OpenGL ориентируется на следующие две задачи:

Основным принципом работы OpenGL является получение наборов векторных графических примитивов в виде точек, линий и многоугольников с последующей математической обработкой полученных данных и построением растровой картинки на экране и/или в памяти. Векторные трансформации и растеризация выполняются графическим конвейером (graphics pipeline), который по сути представляет собой дискретный автомат. Абсолютное большинство команд OpenGL попадают в одну из двух групп: либо они добавляют графические примитивы на вход в конвейер, либо конфигурируют конвейер на различное исполнение трансформаций.

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

Дополнительные библиотеки

Существует ряд библиотек, созданных поверх или в дополнение к OpenGL. Например, библиотека GLU, являющаяся практически стандартным дополнением OpenGL и всегда её сопровождающая, построена поверх последней, то есть использует её функции для реализации своих возможностей. Другие библиотеки, как, например, GLUT и SDL, созданы для реализации возможностей, недоступных в OpenGL. К таким возможностям относятся создание интерфейса пользователя (окна, кнопки, меню и др.), настройка контекста рисования (область рисования, использующаяся OpenGL), обработка сообщений от устройств ввода/вывода (клавиатура, мышь и др.), а также работа с файлами. Обычно, каждый оконный менеджер имеет собственную библиотеку-расширение для реализации вышеописанных возможностей, например, WGL в Windows или GLX в X Window System, однако библиотеки GLUT и SDL являются кросс-платформенными, что облегчает перенос написанных приложений на другие платформы.

Библиотеки GLEW (The OpenGL Extension Wrangler Library) и GLEE (The OpenGL Easy Extension library) созданы для облегчения работы с расширениями и различными версиями OpenGL. Это особенно актуально для программистов в Windows, так как заголовочные и библиотечные файлы, поставляемые с Visual Studio, находятся на уровне версии OpenGL 1.1.

OpenGL имеет только набор геометрических примитивов (точки, линии, многоугольники) из которых создаются все трёхмерные объекты. Порой подобный уровень детализации не всегда удобен при создании сцен. Поэтому поверх OpenGL были созданы более высокоуровневые библиотеки, такие как Open Inventor и VTK. Данные библиотеки позволяют оперировать более сложными трёхмерными объектами, что облегчает и ускоряет создание трёхмерной сцены.

GLM (OpenGL Mathematics) — вспомогательная библиотека, предоставляющая программистам на C++ классы и функции для выполнения математических операций. Библиотека может использоваться при создании 3D-программ с использованием OpenGL. Одной из характеристик GLM является то, что реализация основана на спецификации GLSL. Исходный код GLM использует лицензию MIT.

Расширения в OpenGL

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

Разработчик должен знать, доступны ли какие-либо из этих расширений, прежде чем их использовать (или использовать библиотеку расширений OpenGL). Это позволяет разработчику делать вещи лучше или эффективнее в зависимости от того, доступно ли расширение:

Android, Skia и графика с аппаратным ускорением

Однако на странице Skia http://code.google.com/p/skia/ говорится, что Skia может поддерживать OpenGL.

Кроме того, в этом FAQ по Skia https://sites.google.com/site/skiadocs/user-documentation/faq говорится: «SkGLCanvas был написан для направления вызовов отрисовки в OpenGL».

Поэтому мне интересно, есть ли какая-то конкретная причина, по которой Android просто не использует поддержку Skia на OpenGL для получения графики с аппаратным ускорением? (Может быть, разница между OpenGL и OpenGL ES?)

Они явно предназначались для того, чтобы Skia был чем-то ускорен, но на самом деле этого не произошло. PixelFlinger и libagl также очень похожи на раннюю версию OpenGL, но также никогда не были ускорены.

Большим прорывом стала версия 2.0 OpenGL ES. Большая часть его силы заключается в его языке затенения, и не было простого способа использовать это через Skia. ICS была действительно серьезной переработкой, когда они отказались от Skia и вместо этого использовали OpenGL ES 2.0 — со всеми его возможностями GLSL.

Они также остро нуждались в улучшенной поддержке FBO в 2.0. Это основа новых классов TextureView и VideoView.

Также важно, что более 99% всех устройств Android теперь имеют ускорение OpenGL ES 2.0. Чтобы увидеть пример того, как они предоставили GLSL Canvas API в ICS, взгляните на класс Effects

Принципы реализации OpenGL в Java

В настоящее время Java очень широко распространена и все
больше и больше различных технологий переносятся на этот язык.
Не исключением является и OpenGL. OpenGL дополняет Java таким
образом, что перспективные технологии 3D графики становятся
реальностью при написании апплетов для WEB с помощью Java.
OpenGL реализован в Java посредством дополнительных расширений
и библиотек. Существует несколько видов этих библиотек, все
они выпускаются различными небольшими компаниями. Коммерческие
библиотеки я рассматривать не буду, а рассмотрю самую
распространенную и самое главное бесплатную (GNU лицензия)
библиотеку GL4Java (Ее можно взять по адресу
http://www.jausoft.com). Кроме того, эта библиотека имеет
меньше всего недостатков и вдобавок к этому существует
практически под все операционные системы. Поэтому далее мы
будем рассматривать именно эту библиотеку.

Хоть Java и OpenGL являются мультиплатформенными, GL4Java
устанавливается на различные платформы по разному. GL4Java
является связующим элементом между Java и конкретной
реализацией OpenGL на данной платформе. Например в Windows
OpenGL реализован через динамическую библиотеку opengl32.dll и
GL4Java позволяет обращаться из Java апплетов к функциям этой
библиотеки. Конечно для каждой конкретной операционной
системы существуют библиотеки GL4Java, откомпилированные
именно под эту операционную систему.

Но существует небольшая хитрость. Так как в Java апплетах
запрещено использование локальных файлов пользователя, то
возникает вопрос, каким образом программа на Java обращается к
динамическим библиотекам Windows? Сделано это таким образом,
что в GL4Java имеются специальные библиотеки (называемые
wrapper библиотеками, т.е. находящимися между Java и OpenGL
библиотеками), к которым возможно обращение из Java апплетов.
Таким образом через эти библиотеки происходит уже
непосредственное обращение к библиотекам OpenGL. Еще одной
особенностью такой реализации является то, что скорость работы
Java апплета сравнима со скоростью стандартных OpenGL
программ, написанных например на C/C++, так как OpenGL команды
обрабатываются не в интерпретаторе Java, а выполняются
системой, обращаясь к локальным библиотекам.

Построение Java апплета с использованием OpenGL

Построение апплета мало чем отличается от стандартного.
Рассмотрим на примере, приведенном ниже.

Класс MainApp — это основной класс апплета, наследуемый от
класса Applet. Класс MainGL наследуется от специального класса
GLAnimCanvas, который определен в библиотеке GL4Java. От этого
класса должны наследоваться классы, которые отвечают за
рисование на поверхности OpenGL апплета. GLAnimCanvas
унаследован от класса GLCanvas и является его расширением,
добавляя поддержку потоков для анимации. В основном
большинство OpenGL апплетов используют именно этот класс.

Рассмотрим теперь, какие основные методы (которые
необходимы для работы OpenGL программы) можно переопределять в
своем классе и для чего они нужны.

public void preInit() — Вызывается до того как создается
OpenGL контекст. Обычно используется для установки параметров
OpenGL, например использование двойной буфферизации.

public void init() — Вызывается после того, как создается
OpenGL контекст. Тут можно вызывать команды установки проекции
OpenGL и другие команды по инициализации.

public void display() — Это метод, который вызывается для
того, чтобы перерисовать содержимое на поверхности для
рисования. В данном примере он вызывается автоматически, но
его можно вызывать и самостоятельно. В этом методе вызываются
команды OpenGL, отвечающие за рисование.

Это в принципе и все, что нужно знать. Подробную
информацию, а также дополнительные методы смотрите в
документации по GL4Java.

Процесс написания OpenGL программы на Java, мало чем
отличается от программы на C/C++. Единственное, что хочу
отметить, это то, что перед OpenGL командой надо ставить «gl.»
(gl с точкой), соответственно перед командой из GLU библиотеки
«glu.» и т.д.

Далее я привожу пример (скелет) апплета на Java,
использующего OpenGL.

 
// Подключаем библиотеки GL4Java
import gl4java.GLContext;
import gl4java.awt.GLCanvas;
import gl4java.awt.GLAnimCanvas;

// Подключаем стандартные библиотеки Java
import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
import java.applet.*;

// Наш основной класс GL
class MainGL extends GLAnimCanvas
{
 // Конструктор
 public MainGL(int w, int h)
 {
  super(w, h);
 }
	
 // Преинициализация
 public void preInit()
 {
  // Устанавливаем двойную буфферизацию
  doubleBuffer = true; 
 }
 
 // Инициализация. Устанавливаем OpenGL проекции
 public void init() 
 {
  gl.glMatrixMode(GL_PROJECTION);
  gl.glLoadIdentity();
  gl.glOrtho(-5.0, 5.0, -5.0, 5.0, 2.0, 50.0);
  gl.glMatrixMode(GL_MODELVIEW);
  gl.glTranslatef(0, 0, -5);
  glj.gljCheckGL();
  glj.gljMakeCurrent(false);
  gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 }
 
 // Функция рисования.
 public void display()
 {
  // Если есть какие то проблемы с OpenGL, то выходим
  if (glj.gljMakeCurrent() == false) return; 
 		
  // Тут идет стандартный поток OpenGL команд
 
  gl.glClear(GL_COLOR_BUFFER_BIT);
 
  // ... OpenGL команды ...
  // Отображаем буффер на экран 
  // (при двойной буфферизации)
  glj.gljSwap(); 
 }
}
 
// Основной класс апплета
public class MainApp extends Applet 
{
 MainGL glmain = null;
 // Инициализация апплета
 public void init()
 {
  setLayout(null);
  setSize(640,480); // Размер апплета

  // Создаем наш GL объект
  glmain = new MainGL(640, 480); 
  // Устанавливаем параметры для него
  glmain.setBounds(0,0,640,480); 
  // И добавляем его к нашему апплету
  add(glmain); 
 } 

 // Эта функция вызывается тогда, 
 // когда апплет стартует
 public void start()
 {
  glmain.start();
 }

 // Эта функция вызывается тогда, 
 // когда апплет останавливается
 public void stop()
 {
  glmain.stop();
 }

 // Эта функция вызывается тогда, 
 // когда апплет уничтожается
 public void destroy()
 {
  glmain.stop();
  glmain.cvsDispose();
 }
}

Core-profile vs. Непосредственный режим

В старые времена использование OpenGL означало разработку в непосредственном режиме (так называемом «конвейере фиксированных функций»), который был простым в использовании методом для рисования графики. Большая часть функционала OpenGL была скрыта внутри библиотеки, и разработчики не имели контроля над тем, как OpenGL выполняет свои вычисления. Поскольку разработчики жаждали большей гибкости, то со временем спецификации стали более гибкими; разработчики получили больше контроля над своей графикой. Непосредственный режим действительно прост в использовании и понимании, но он также крайне неэффективен. По этой причине, начиная со спецификации версии 3.2, функционал непосредственного режима начали считать устаревшим, мотивируя тем самым разработчиков перейти на разработку в режиме core-profile, который является разделом спецификации OpenGL с полностью удаленным устаревшим функционалом.

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

Это также одна из причин, по которой данный туториал более ориентирован на core-profile в OpenGL версии 3.3.

На сегодняшний день доступны более новые версии OpenGL (на момент написания — версия 4.6), поэтому следует логичный вопрос: «Почему я должен изучать OpenGL 3.3, когда уже есть OpenGL 4.6?». Дело в том, что все последующие версии OpenGL, начиная с версии 3.3, добавляют дополнительные полезные возможности в OpenGL без изменения фундаментального ядра/базиса, используемого в OpenGL; более новые версии просто предоставляют несколько более эффективных или полезных способов решения одних и тех же задач. В результате все концепции и техники остаются неизменными при выходе новых версий OpenGL, поэтому изучение OpenGL 3.3 является совершенно справедливым.

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

OpenGL ES в деталях

OpenGL ES — это облегченный низкоуровневый API, основанный на широко распространенной библиотеке OpenGL.
OpenGL ES выступает посредником между приложением и аппаратным или программным графическим движком.

Использование единого стандарта для работы с 3D графикой позволяет упростить и систематизировать процесс разработки графических приложений и игр для
различных мобильных и встраевыемых платформ. Поскольку OpenGL ES основан на OpenGL, вам не понадобится изучать новую технологию, что значительно упрощает портирование и адаптацию приложений под различные устройства.

Достоинства API

  • Широко распространенный, относительно открытый стандарт
    Любой желающий может скачать OpenGL ES спецификацию и свободно использовать ее в своих продуктах. В настоящее время OpenGL единственный независимый графический стандарт, получивший признание и поддержку производителей различных устройств.
  • Компактность и экономичность
    OpenGL ES занимает мало места и требует для работы минимум оперативной памяти. Оптимизирован поток команд/данных. Все это позволяет получать на выходе компактный и эффективный программный код.
  • Незаметное переключение с аппаратного на программный рендеринг
    Хотя OpenGL ES и предназначен для работы с аппаратными ускорителями графики, он может в случае необходимости реализовать запросы в виде подпрограмм, выполняемых непосредственно процессором устройства. Поэтому, если даже сейчас устройство не поддерживает аппаратно какой-нибудь OpenGL запрос, возможно в будущих моделях он будет реализован и Вам не потребуется заново переписывать программу.
  • Расширяемая архитектура
    Новые аппаратные возможности могут быль легко интегрированы в систему с помощью механизма расширений (OpenGL extension). По мере того, как расширение становится широко распространенным, оно включается в ядро OpenGL ES.
  • Простота использования
    Как и OpenGL, OpenGL ES хорошо структурирован и интуитивно понятен.
  • Нет проблем с документацией

    В сети существует огромное количество документации по OpenGL. Работа с OpenGL ES практически не отличается от работы с простым OpenGL

OpenGL в смартфонах — что это и зачем нужно?

Принцип работы и применение технологии OpenGL ES 2.0.

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

Позже, когда трехмерная графика стала доступной не только для суперокомпьютеров, но и для обычных ПК, появилась насущная потребность в едином стандарте в области графики. Одним из них и стал OpenGL (Open Graphics Library — «открытая графическая библиотека»). На сегодня это один из самых популярных графических стандартов в мире.

OpenGL основан на графической библиотеке IRIS GL, созданной компанией Silicon Graphics. Стандарт был разработан и утвержден в 1992 году целой группой крупнейших разработчиков, в число которых вошли Silicon Graphics, IBM Corporation, Microsoft, Hewlett-Packard Corporation, Sun Microsystems, Intel Corporation, Evans & Sutherland и другие.

OpenGL в смартфонах — что это и зачем нужно?

Принцип работы и применение технологии OpenGL ES 2.0.

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

Позже, когда трехмерная графика стала доступной не только для суперокомпьютеров, но и для обычных ПК, появилась насущная потребность в едином стандарте в области графики. Одним из них и стал OpenGL (Open Graphics Library — «открытая графическая библиотека»). На сегодня это один из самых популярных графических стандартов в мире.

OpenGL основан на графической библиотеке IRIS GL, созданной компанией Silicon Graphics. Стандарт был разработан и утвержден в 1992 году целой группой крупнейших разработчиков, в число которых вошли Silicon Graphics, IBM Corporation, Microsoft, Hewlett-Packard Corporation, Sun Microsystems, Intel Corporation, Evans & Sutherland и другие.

Технология OpenGL в телефонах

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

OpenGL позволяет получить на смартфоне более быструю и плавную работу интерфейса, а также высокую производительностью в 3D-приложениях, в том числе и в играх. В современных смартфонах используется версия OpenGL ES 2.0.

Данную опцию можно включить на мобильном устройстве через режим разработчика. Для этого нужно войти в «Настройках» в раздел «О телефоне» и 7 раз подряд нажать по надписи с версией операционной системы или по версии сборки (в зависимости от производителя). Далее нужно найти в разделе «Для разработчиков» опцию 4X MSAA. Если ее включить, активируется четырехкратное сглаживание в технологии OpenGL ES 2.0. Это улучшит качество графики на смартфоне, но приведет к более быстрой разрядке аккумулятора.

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

Что такое OpenGL?

OpenGL (англ. «Open Graphics Library») рассматривается как API (англ. «Application Programming Interface» = «Интерфейс прикладного программирования»), предоставляющий большой набор функций, которые мы можем использовать для управления графикой и изображениями. Если конкретнее, то OpenGL является спецификацией, разработанной и поддерживаемой Khronos Group.

Спецификация OpenGL определяет, каким должен быть результат/вывод каждой функции, и как она должна выполняться. А вот реализация этой спецификации уже зависит от конкретных разработчиков. Поскольку спецификация OpenGL не предоставляет нам подробностей реализации, то, фактически, разработанные версии OpenGL могут иметь разные реализации до тех пор, пока их результаты соответствуют спецификации (и, следовательно, являются одинаковыми для пользователя).

Люди, разрабатывающие библиотеки OpenGL, обычно являются производителями видеокарт. Каждая приобретаемая вами видеокарта поддерживает определенные версии OpenGL, разработанные специально под эту линейку видеокарт. При использовании программного обеспечения от Apple библиотека OpenGL поддерживается, собственно, разработчиками Apple, а в Linux существует целый набор версий графических поставщиков и адаптации от опенсорс-сообщества этих библиотек. Это также означает, что всякий раз, когда OpenGL демонстрирует странное поведение, которого не должно быть, то это, скорее всего, вина производителей видеокарт (или тех, кто разрабатывал/поддерживает эту библиотеку).

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

Khronos публично размещает все спецификации документов для всех версий OpenGL

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

Что это за программа

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

Название расшифровывается как Open Graphics Library, то есть «Открытая графическая библиотека». Открытость инструмента означает, что им может воспользоваться любой разработчик без всякой маржи и лицензионных отчислений.

Инструмент кроссплатформенный: созданные с его помощью приложения будут работать в любой среде, которые осуществляют его поддержку.

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

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

О том, что такое DirectX и зачем он нужен, вы можете почитать вот тут.

Концепция OpenGL была разработана в 1982 году в университете Стэнфорда. Аппаратно прототип технологии впервые реализовала компания Silicon Graphics, создавшая конвейер для рендеринга. Ее разработки стали основой библиотек OpenGL.

Спецификация

На базовом уровне, OpenGL — это просто спецификация, то есть документ, описывающий набор функций и их точное поведение. Производители оборудования на основе этой спецификации создают реализации — библиотеки функций, соответствующих набору функций спецификации. Реализация использует возможности оборудования там, где это возможно. Если аппаратура не позволяет реализовать какую-либо возможность, она должна быть эмулирована программно. Производители должны пройти специфические тесты (conformance tests — тесты на соответствие) прежде чем реализация будет классифицирована как OpenGL-реализация. Таким образом, разработчикам программного обеспечения достаточно научиться использовать функции, описанные в спецификации, оставив эффективную реализацию последних разработчикам аппаратного обеспечения.

Эффективные реализации OpenGL существуют для Windows, Unix-платформ, PlayStation 3 и Mac OS. Эти реализации обычно предоставляются изготовителями видеоадаптеров и активно используют возможности последних. Существуют также открытые реализации спецификации OpenGL, одной из которых является библиотека Mesa. Из лицензионных соображений Mesa является «неофициальной» реализацией OpenGL, хотя полностью с ней совместима на уровне кода и поддерживает как программную эмуляцию, так и аппаратное ускорение при наличии соответствующих драйверов.

Спецификация OpenGL пересматривается консорциумом ARB (Architecture Review Board), который был сформирован в 1992 году. Консорциум состоит из компаний, заинтересованных в создании широко распространённого и доступного API. Согласно официальному сайту OpenGL, членами ARB с решающим голосом на ноябрь 2004 года являются производители профессиональных графических аппаратных средств SGI, 3Dlabs, Matrox и Evans & Sutherland (военные приложения), производители потребительских графических аппаратных средств ATI и NVIDIA, производитель процессоров Intel, и изготовители компьютеров и компьютерного оборудования IBM, Apple, Dell, Hewlett-Packard и Sun Microsystems, а также один из лидеров компьютерной игровой индустрии id Software. Microsoft, один из основоположников консорциума, покинула его в марте 2003 года. Помимо постоянных членов, каждый год приглашается большое количество других компаний, становящихся частью OpenGL ARB в течение одного года. Такое большое число компаний, вовлеченных в разнообразный круг интересов, позволило OpenGL стать прикладным интерфейсом широкого назначения с большим количеством возможностей.

Курт Экли (Kurt Akeley) и Марк Сигал (Mark Segal) являются авторами оригинальной спецификации OpenGL. Крис Фрэзиер (Chris Frazier) редактировал версию 1.1. Йон Лич (Jon Leech) редактировал версии с 1.2 по версию 2.0.

Понравилась статья? Поделиться с друзьями:
Гуру настройки
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: