OpenGL 4.1 и 3.1+, каковы основные отличия? [закрытый]

Я понимаю, что OpenGL 4 и 3 довольно похожи, особенно 3.1 и 4.1. Поскольку оба они по существу выпущены вместе, может быть трудно понять обоснование OpenGL 4.0/4.1.

в предыдущих выпусках OpenGL незначительная версия увеличивается вверх, пока существенные изменения не накопятся в новую основную версию. OpenGL 3.x и 4.x введены обратно несовместимые изменения API, а затем OpenGL 3.2 и 3.3, Как говорят, являются специально ветвями серии 3 которые не являются совместимыми, В то время как 3.1 совместим с 4.1+

какие ключевые отличия OpenGL 4.1 предлагает по сравнению с OpenGL 3.1, которые гарантируют его классификацию под новой основной версией?

бонус: какие-либо различия обеспечивают повышение производительности в любых ситуациях по сравнению с GL3 или просто доступность?

Edit: некоторые дополнительные выводы, основанные на ответах


OpenGL 3.3 был сделан комплимент OpenGL 4.0, чтобы включить как можно больше функций в более старое оборудование. Выбор между OpenGL 3 и 4, 3.3, может быть лучшим выбором иногда. 4.1 добавил совместимость GL ES 2.0 однако и некоторые приятные функции.


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

пожалуйста, дайте мне знать, если вы видите какие-либо заблуждения или области для улучшения.

Keynotes (по-видимому, удалены из ответа при запросе на meta.. Для временной ссылки на то, каким был фактический ответ.)

Приложение G-K на в OpenGL 3.1 функции через OpenGL 4.1 особенности

Выпуск Группы Хронос OpenGL 4.0 может быть "легче читать" :)

  • Сэмплер Объектов
  • созданные массивы и шейдеры
  • texture_cube_map_array и texture_gather

  • GLSL 4.0 и динамический Лод

  • shader_subroutine и sample_shading
  • separate_shader_objects
  • увеличение необходимых размеров для текстуры/renderbuffers
  • 64 бит с плавающей запятой вершинных атрибутов
  • get_program_binary
  • +2 шейдеры тесселяции

2 ответов


вы можете получить все изменения из здесь.

приложения G-K просмотрите все изменения с OpenGL 3.1 на OpenGL 4.1, включая новые функции, то, что было устаревшим, что было полностью удалено и т. д.

и этой ссылке может быть "легче читать" :)


Если ваш вопрос "как рабочий процесс может быть лучше в 4.1", это просто не то, что 4.1.

во-первых, быстрое определение, чтобы убедиться, что мы говорим об одном и том же. Для меня "рабочий процесс" означает улучшения API и вещи, которые делают производительность лучше. Они не позволяют аппаратному обеспечению делать то, что вы не могли раньше; они просто облегчают работу программиста или позволяют получить более высокую производительность.

подавляющее большинство улучшений API, те которые не основаны на новых функциях, доступны для реализации 3.3 В качестве основных расширений. Поскольку они являются основными расширениями, вам даже не нужно менять свой код, чтобы удалить суффикс "ARB" из вашего кода 3.3, чтобы использовать их в коде 4.1. Все просто работает. В частности, я говорю о разделении программ (GL_ARB_separate_program_objects) и получении двоичных файлов скомпилированных программ (GL_ARB_get_program_binary). Оба поддерживаются на оборудовании 3.3; NVIDIA даже расширяет их до Чипы GeForce 6xxx.

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

существует не так много, что можно легко использовать для повышения производительности, которая уникальна для 4.1. Bindless rendering (GL_NV_vertex_buffer_unified_memory), вероятно, является самой большой производительностью улучшение, если это является узким местом для вас. Как вы, вероятно, заметили из названия, это расширение NVIDIA, а не core. Я уверен, что ARB работает над чем-то не совсем похожим на это для основной функции в будущей спецификации. И Bindless не является уникальным для 4.X аппаратное обеспечение; опять же, NVIDIA расширяет это до чипов GeForce 6xxx.

есть некоторые вещи в 4.x, который может улучшить аппаратное обеспечение, но все они в конечном итоге вращаются вокруг какой-то формы работы GPGPU. Косвенные перевода (GL_ARB_draw_indirect) было бы хорошим ускорением, если вы генерируете данные рендеринга из OpenCL. И Civilization V уже показала ценность использования технологий GPGPU (они используют DXCompute, но вы можете сделать это и с OpenCL) для распаковки текстур; это очень помогает в производительности загрузки, так как вам не нужно загружать столько данных с диска.

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

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

и еще одно: нет выбора между 3.1 и 3.3. Практически любое оборудование, которое может запустить 3.1, может запустите 3.3. Если это не так, то это потому, что производитель оборудования ослабляет свои драйверы OpenGL (я смотрю на вас, Intel).