OpenGL: What's the deal with deprecation?

Asked
Viewd4033

5

OpenGL 3.0 and 3.1 have deprecated quite a few features I find essential. In particular, the use of fixed function in shaders.

Can anyone explain what's really the deal with that?

Why do they find the need to deprecate such useful feature that its obvious everybody uses and that no sane hardware company is going to remove support for?

5 ответов

2

It should be clarified that a feature that is marked "deprecated" is not actually removed. For example, an OpenGL 3.0 context has all of the features - nothing is gone. Further, some vendors will ship drivers that can create 3.1 and 3.2 contexts using a compatibility profile which will also enable the deprecated features. So, look closely at what vendor hardware you are going to support and ask about the ARB compatibility mode for old features. (There is also the "core" profile as of 3.2, which allows vendors to create a more lean and mean driver if they wish to make such a thing)

Note that any current card really doesn't have an FF hardware section any more - they only run shaders. When you ask for FF behavior, the GL runtime is authoring shaders on your behalf..

  • “the GL runtime is authoring shaders on your behalf.”…. Do you have any references for that?

    shoosh05 августа 2009, 08:15
  • Not off the top of my head. Just conversations with IHV driver people.

    05 августа 2009, 22:45
2

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

Полагаю, Apple сошла с ума, потому что MacOSX 10.7 поддерживает только 3,2 ядра . Ни поддержки спецификации совместимости, ни расширения ARB_compatibility, ничего. Вы можете создать контекст 2.1 или основной контекст 3.2.

Однако, если вам нужны причины:

  1. Для полноты: что сказал Джесси Холл. ARB больше не нужно учитывать взаимодействие между фиксированной функцией и новыми функциями. Целочисленная математика, текстуры массивов и различные другие функции определены так, чтобы их нельзя было использовать с фиксированным конвейером функций. OpenGL действительно улучшился за последние 3 года с момента выхода GL 3.0; Темпы изменений АРБ весьма существенны. Было бы это возможно, если бы им пришлось найти способ заставить все эти функции взаимодействовать с фиксированной функцией? И если бы у них не было фиксированного взаимодействия функций, не стали бы вы жаловаться, что не можете получить доступ к новым функциям из своего старого кода? Что красиво ведет к:

  2. Он служит убедительным указанием на то, что следует использовать. Даже если контекст совместимости всегда доступен, вы можете посмотреть на ядро ​​OpenGL, чтобы увидеть, как следует подходить к решению проблем.

  3. Это делает возможную унификацию настольных GL и GL ES гораздо более разумной. ES 2.0 отбросил все старое и просто принял то, что вы могли бы назвать ядром GL 2.1. Конечная цель - иметь только один OpenGL. Для этого у вас должна быть возможность избавить рабочий стол GL от всего мусора.

0

OpenGL допускает как «основной», так и «совместимый» профиль. Таким образом, для большинства систем вы не потеряете никакого доступа к устаревшим или удаленным функциям.

Но если вы хотите обеспечить совместимость, лучше всего придерживаться основного. Вам не будет гарантирован профиль совместимости (даже если он есть на большинстве аппаратных средств и в текущем состоянии более вероятно, что вы столкнетесь с устаревшим OpenGL, а не только с одним ядром). Кроме того, OpenGL ES теперь является подмножеством OpenGL, можно написать программу OpenGL ES 2.x / 3.x и запустить ее в OpenGL 4.3 почти без изменений.

Игровые консоли, такие как PlayStation и Nintendo, поставлялись со своими собственными графическими библиотеками, а не с использованием OpenGL.

Они были основаны на OpenGL, но здесь урезаны по аналогии с ES (я не думаю, что ES 2.0 тогда был). Этим системам необходимо написать свои собственные графические драйверы и библиотеки, просить поставщика оборудования написать то, что в основном представляет собой целую загрузку устаревших библиотек обертывания, - это немного (все фиксированные функции просто в конечном итоге будут реализованы в шейдерах на каком-то этапе и вполне вероятно, что glBegin / glEnd все равно автоматически превратится в VBO).

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

1

Fixed function shaders are quite easily replaced with standard GLSL shaders so it's difficult to see why logically they shouldn't be deprecated.

I'm less certain than you that they won't be dropped from much hardware in the foreseeable future as OpenGL ES 2.0 doesn't support the FF pipeline (and so isn't backward compatible with OpenGL ES 1.x). It seems to me that much of the momentum with OpenGL these days is coming from the widespread adoption of OpenGL ES on mobile platforms and with FF functionality gone from there there will be some considerable pressure to move away from it's use.

Indeed I'd expect the leaner OpenGL ES implementation to replace standard OpenGL quite widely over the next few years, and FF functionality may disappear more because most hardware will implement OpenGL ES rather than because it's removed from hardware implementing the full OpenGL

6

As you said, no hardware company will remove support for fixed-function shaders, because there are so many existing applications that use them. What they don't want to do, though, is figure out how to specify the interactions between FF shaders and every future extension they add. Those interactions are very complicated (partly because FF shaders are so complicated), which leads to bugs and inconsistent implementations between vendors -- both of which are bad for developers and end users.

So they're drawing a line: if you want to use FF shaders, you don't get any of the new functionality. If you want new functionality, you can't use FF shaders. This is very similar to what Microsoft did in D3D10: it added a whole bunch of new functionality, but at the same time completely removed fixed-function shaders. The belief is that the set of developers who need the new non-shader functionality but who don't also need programmable shaders is very small.