OpenGL ES против OpenGL

92

В чем разница между OpenGL ES и OpenGL?

kml_ckr
источник
13
Какие версии OpenGL и OpenGL ES вы сравниваете?
Firas Assaad
3
Если вы используете какой-либо материал GL2, всегда основывайте его на GLES2. В GL2 есть разные способы делать что-то, но в GLES2 по большей части один. Также вы не столкнетесь с проблемами при переносе таким образом.
zezba9000
возможный дубликат OpenGL или OpenGL ES
Enamul Hassan
gamedev.stackexchange.com/questions/150/…
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功 08

Ответы:

55

Двумя наиболее существенными различиями между OpenGL ES и OpenGL являются удаление семантики вызова glBegin ... glEnd для примитивного рендеринга (в пользу массивов вершин) и введение типов данных с фиксированной точкой для координат и атрибутов вершин для лучшей поддержки вычислительные возможности встроенных процессоров, которым часто не хватает FPU

Посмотрите здесь: OpenGL_ES

Камачи
источник
19
Они также были удалены из последних версий OpenGL для настольных компьютеров и рабочих станций.
Бен Фойгт
2
Интересно сравнение между OGL 3 и GLES 2. В OGL 3 немедленный режим устарел (хотя все еще поддерживается). Большая часть (хотя и не вся) функциональности OGL 3 доступна в GLES 2.
nullspace
50

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

Когда вы используете обычный opengl, вы можете использовать glBegin и glEnd для включения геометрических примитивов, которые вам нужно нарисовать, но при использовании Opengl ES вам придется использовать буферы вершин. Я думаю, это из соображений производительности.

В настоящее время существует две версии Opengl ES: версия 1.1 может поддерживать только фиксированный конвейер рендеринга, а версия 2.0 поддерживает шейдер glsl. Однако у него нет фиксированного конвейера рендеринга. Другими словами, вам придется написать свой шейдер для всего.

Opengl ES в основном используется на мобильных телефонах и в Интернете (webgl). Согласно спецификации, ваш настольный драйвер opengl может поддерживать все opengl es apis.

Билл Ян
источник
3
Я не думаю, что вам необязательно использовать буферы вершин. Вы также можете использовать массивы вершин в непосредственном режиме. Я ошибся?
Gravity
Да, вам не обязательно использовать вершинные буферы,
Станислав Агеев
2
«Когда вы используете обычный opengl, вы можете использовать glBegin и glEnd для включения геометрических примитивов, которые вам нужно нарисовать», но не в том случае, если вы хотите, чтобы ваш код был совместим с прямой связью, а также если вы используете Mac, что я am;)
Jerfov2
39

Так же, как добавить, что OpenGL 3.3 и OpenGL ES 2.0 в основном совместимы, используя подмножество функций OpenGL 3.3. Мой собственный движок C ++ использует те же вызовы API с некоторыми определениями для Android / IOS / Windows / OSX / Linux.

Среди ключевых отличий:

  • отсутствие поддержки геометрических шейдеров
  • нет смешивания min / max (для этого может быть расширение)
  • нет примитива Quad List
  • более ограниченные форматы текстур (особенно с плавающей запятой)
  • glGetTexImage недоступен
  • нет обратной связи с преобразованием, как и для некоторых других дополнительных функций

Есть также много других отличий, но это покрывает несколько важных.

пустое пространство
источник
7
Я думаю, мы можем постепенно отредактировать этот пост, чтобы включить в него все отсутствующие вызовы функций. И версии для сравнения должны быть 3.3 и ES 2.0, так как они были выпущены в том же году
CoffeDeveloper
8

OpenGL ES означает, что открытая графическая библиотека для встраиваемых систем (OpenGL ES или GLES) является подмножеством прикладного программного интерфейса (API) рендеринга компьютерной графики OpenGL для рендеринга 2D и 3D компьютерной графики, например, используемой в видеоиграх, обычно с аппаратным ускорением с использованием графический процессор (GPU). Он разработан для встраиваемых систем, таких как смартфоны, компьютерные планшеты, игровые приставки и КПК.

Официальный сайт OpenGL | ES: http://www.opengl.org/

вы также можете получить дополнительную информацию в вики: http://en.wikipedia.org/wiki/OpenGL_ES

罗 大 柚
источник
6

Просмотрите обзор OpenGL ES здесь: http://www.khronos.org/opengles/

Короче говоря, ES - это подмножество Open GL для «встроенных систем». Конкретные различия будут зависеть от сравниваемых версий и наборов функций.

холтавольт
источник
5

Реестр OpenGL ES содержит подробные различия API между OpenGL ES и соответствующей версией OpenGL:

Однако нет документа, содержащего различия для OpenGL ES 3.0.

корчиться
источник
4

Я думаю, вы получите лучший ответ, если спросите: «В чем разница между OpenGL и OpenGL ES».

Между OpenGL ES 1.1 и ES 2.0, OpenGL 1.5 и 2.0 и OpenGL 3.0 и 4.0 есть существенные различия.

Как уже писали другие, ES был написан для встроенных систем. Он также представляет собой первую «уборку дома» спецификации GL с момента ее появления. В OpenGL было а) много способов сделать одно и то же (например, вы могли нарисовать квадрат / прямоугольник двумя разными способами и размножить пиксельное изображение двумя разными способами и т. Д.). ES проще, чем OpenGL, с меньшим количеством функций, как общее утверждение, потому что он разработан для менее сложного оборудования.

Я призываю вас не смотреть на OpenGL ES 1.1, поскольку это прошлое и не отражает архитектурное развитие OpenGL или OpenGL ES в будущем.

пользователь501138
источник
4

Терминология и версии довольно запутаны (особенно для новичков). Для более целостного представления об OpenGL и OpenGL-ES (GLES) см. OpenGL - Then and Now .

ap-osd
источник
1
Ссылка также содержит отличное руководство с примерами, хорошо объясняющее, как работает конвейер рендеринга OpenGL.
JustWe
Вот ссылка на руководство.
ap-
3

Основное различие между ними заключается в том, что OpenGL ES предназначен для встроенных систем, таких как смартфоны, а OpenGL - для настольных компьютеров. На уровне кодирования OpenGL ES не поддерживает функции с фиксированными функциями, такие как glBegin / glEnd и т. Д. OpenGL может поддерживать конвейер с фиксированными функциями (с использованием профиля совместимости).

Мэтт
источник
2

Современный ответ для ES 3.0 по сравнению с OpenGL 4.6 сильно отличается от принятого ответа. Теперь все, что связано с фиксированным конвейером, ушло.

ES для ВСТРОЕННЫХ СИСТЕМ гораздо менее надежен.

Стив Вятт
источник
1

OpenGL ES - это просто OpenGL api для встроенных систем (OpenGL ES относится к встроенным системам OpenGL). так что это подмножество OpenGL и широко используется в сотовых телефонах и некоторых системах виртуальной реальности, оно предназначено для менее сложного оборудования. OpenGL ES имеет меньше терминов и функций, чем OpenGL, подумайте об этом так: вы берете только то, что вам нужно для этой системы, потому что, если нам не нужна функция во всей нашей работе или оборудование не может с этим справиться, поэтому нет смысла добавлять эта функция, но при этом усложняет использование этого API из-за необходимости писать больше шейдеров и сложных кодов, чтобы сделать что-то простое, потому что OpenGL ES не предоставляет шейдеры в графическом конвейере как OpenGL. последняя версия OpenGL ES - 3.2, теперь она может обеспечивать поддержку тесселяции для дополнительных деталей геометрии, новых геометрических шейдеров. поэтому я советую вам начать изучение или использование OpenGL ES 3.0+ (в случае, если это ваш целевой язык), потому что сейчас и следующее поколение не будет использовать старые версии с более мощным оборудованием и видеокартами, и если ваша цель - OpenGL, начните с v3. 3+ или 4.0+. Если у вас есть больше времени, не проблема, чтобы быстро просмотреть старые версии, чтобы лучше понять, как были разработаны эти вещи и почему. вы можете проверить эту ссылку для получения более подробной информации:https://en.wikipedia.org/wiki/OpenGL_ES

Омар Ганноу
источник
0

Проще говоря, opengl - это настольная версия, а opengl es - для встраиваемых систем, таких как сотовые телефоны, где ограничения памяти и производительности больше, чем у компьютеров. opengl es было бы труднее использовать.

pratik_z
источник
0

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

OpenGL ES - это четко определенные подмножества настольного OpenGL.

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

См. Эту ссылку .

PS

WebGL разделяет спецификацию с OpenGL ES, то есть, если вы изучили настольный OpenGL, легко изучить другие (OpenGL ES, WebGL).

Jafffy
источник