OpenGL: каково соглашение с депрекацией?

Большинство ответов использует слово, "атомарное", как будто атомарные изменения - все, что необходимо. Они не, обычно.

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

Обычно Вы хотите, чтобы поток чтения видел последний значение переменной/свойства. То, что не гарантируется атомарностью . Как быстрый пример, вот плох способ остановить поток:

class BackgroundTaskDemo
{
    private bool stopping = false;

    static void Main()
    {
        BackgroundTaskDemo demo = new BackgroundTaskDemo();
        new Thread(demo.DoWork).Start();
        Thread.Sleep(5000);
        demo.stopping = true;
    }

    static void DoWork()
    {
         while (!stopping)
         {
               // Do something here
         }
    }
}

DoWork может циклично выполниться навсегда, несмотря на запись к логической переменной, являющейся атомарным - нет ничего, чтобы мешать JIT кэшировать значение stopping в DoWork. Для фиксации этого или необходимо заблокировать, сделать переменную volatile или использовать явный барьер памяти. Это все относится к свойствам строки также.

5
задан shoosh 14 October 2012 в 09:16
поделиться

3 ответа

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

Итак, они подводят черту: если вы хотите использовать шейдеры FF, вы не не получить никаких новых функций. Если вам нужна новая функциональность, вы не можете использовать шейдеры FF. Это очень похоже на то, что Microsoft сделала в D3D10: она добавила целый ряд новых функций, но в то же время полностью удалила шейдеры с фиксированными функциями. Считается, что набор разработчиков, которым нужны новые не шейдерные функции, но которым также не нужны программируемые шейдеры, очень невелик.

6
ответ дан 13 December 2019 в 19:32
поделиться

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

Я менее уверен, чем вы, что в обозримом будущем они не исчезнут с большого количества оборудования, поскольку OpenGL ES 2.0 не поддерживает конвейер FF (и поэтому не имеет обратной совместимости с OpenGL ES 1.x) . Мне кажется, что большая часть импульса с OpenGL в наши дни исходит от повсеместного внедрения OpenGL ES на мобильных платформах, и с отказом от функциональности FF возникнет значительное давление, чтобы отказаться от его использования.

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

1
ответ дан 13 December 2019 в 19:32
поделиться

Следует уточнить, что функция, помеченная как «устаревшая», фактически не удаляется. Например, контекст OpenGL 3.0 имеет все функции - ничего не пропало. Кроме того, некоторые поставщики будут поставлять драйверы, которые могут создавать контексты 3.1 и 3.2 с использованием профиля совместимости, который также будет включать устаревшие функции. Итак, внимательно посмотрите, какое оборудование производителя вы собираетесь поддерживать, и спросите о режиме совместимости ARB для старых функций. (Начиная с версии 3.2 существует также «основной» профиль, который позволяет производителям создавать более компактные и средние драйверы, если они хотят сделать такую ​​вещь)

Обратите внимание, что любая текущая карта действительно не имеет аппаратной секции FF. больше - они запускают только шейдеры. Когда вы запрашиваете поведение FF, среда выполнения GL создает шейдеры от вашего имени.

2
ответ дан 13 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: