Еще об OpenGL 3.0

12 августа 2008 года
Четвертой интересной особенностью OGL3.0 является стремление разработчиков стандарта сделать решительный шаг в сторону эффективно распараллеливающихся драйверов OpenGL на многоядерных процессорах.

Это важно, т.к. я наблюдал в профайлере, что драйвера видеокарты съедают 20-30% процессорного времени. Это довольно много. Если драйвера смогут эффективно использовать многоядерность, выйгрыш в скорости будет ощутимым и, что главное, абсолютно бесплатным для разработчика GL-приложений.

Так, помимо откровенно устаревших функций, устаревшими (deprecated) функциями были объявлены и некоторое количество функций, мешающих эффективно распараллелить работу драйвера. Вместо них предложены аналогичные функции, не имеющие подобных недостатков.

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

В противном случае драйверу необходимо было бы синхронизировать установку текущей текстуры среди параллельно работающих потоков. А любая синхронизация в мультитредовой архитектуре пока что зло для общей производительности.

С точки зрения разработчика, изменения не очень страшны, т.к. во-первых, в OGL3.0 старые функции все еще работают. Во-вторых, развести старые функции с новыми (чтобы можно было скомпилировать как OGL2.1-совместимое, так и OGL3.0-совместимое приложение) - работа на пару часов. Возможности современных языков программирования это вполне позволяют.

Paulik

August 13, 2008 - 00:19
Было очень интересно читать.

Пара вопросов: зачем компилировать с разной совместимостью? Разве общая совместиомость не осталась?

nappy

August 13, 2008 - 07:34
Все просто. Есть два профиля. Один с обратной совместимостью, другой без (без deprecated функций, режим совместимости с будующими версиями). Т.е. обратная совместимость есть.

С другой стороны для OGL3.0 нужно создавать отдельный контекст, отличным от текущего способом. На старых видеокартах, где поддержки OGL3.0 в драйверах или самих новых драйверов не предвидится, такой контекст создать будет нельзя. Значит поддержка старых версий OGL нужна.

Можно было бы просто создавать OpenGL 3.0 контекст в режиме обратной совместимости, а если не получится - старый контекст. Тогда можно было бы использовать один и тот же код.

Однако заменить устаревшие функции новыми тоже надо, да и возможные преимущества OGL3.0 в режиме совместимости с будующими версиями все-таки значительны.

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

Комментарий (HTML запрещен):

Введите цифровой код подтверждения:



Будь в курсе того, что думает Nappy! Подпишись на ленту записей блога в RSS!

Nappy
Вы любите программировать? Давайте обсуждать методы и технологии программирования, организацию работы над проектами и новые идеи!
Вас интересуют проблемы нашего родного образования? Подискутируем на тему того, как и чему надо учить!
Вы просто хорошо относитесь к Nappy? Тогда вам тоже здесь самое место!