Должен ли Direct3D использоваться поверх OpenGL в Windows? - PullRequest
10 голосов
/ 30 июня 2010

Поскольку Microsoft обычно немного склонна к Direct3D, будет ли сцена, использующая VBO в Direct3D, быстрее, чем та же сцена, использующая VBO в OpenGL, или она будет такой же, поскольку она зависит от драйвера графической карты?Спасибо

Ответы [ 9 ]

20 голосов
/ 30 июня 2010

С точки зрения производительности и при условии наличия достойных драйверов графических процессоров, в целом нет никакой разницы.

Некоторые операции по своей природе быстрее в OpenGL, чем в DirectX9, хотя DX10 исправил это.

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

При написании сетевого кода узким местом является сетевой адаптер, и он не 'Не имеет значения, написан ли ваш сокетный код в .NET, обычные сокеты Беркли в C или, возможно, используется некоторая библиотека Python.

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

Хотя есть веские причины предпочесть любой API.

DirectX имеет гораздо лучшую поддержку инструментов.Microsoft очень хорошо справляется с этим.Отладка и оптимизация кода DirectX намного проще с помощью таких инструментов, как PIX.Кроме того, Microsoft также предоставляет вспомогательную библиотеку D3DX, которая обеспечивает эффективную реализацию многих часто используемых функций.

Преимущество OpenGL в том, что он не привязан к конкретной ОС.DirectX9 работает только на Windows.DX10 и выше работает только в Vista и выше.

OpenGL работает в любой ОС, в которой был написан драйвер OpenGL.

В Windows ситуация иногда немного неловкая.Сама Windows поставляется только с древними реализациями OpenGL.(XP с версией 1.1, я полагаю, и Vista / 7 с версией 1.5).

Таким образом, приложения OpenGL в Windows полагаются на поставщика графических процессоров, чтобы обеспечить обновленную реализацию своими драйверами.ATI и NVidia предоставляют очень хорошие реализации, так что это не такая большая проблема.Драйверы Intel OpenGL обычно отстают как по качеству, так и по поддерживаемым функциям.

3 голосов
/ 30 июня 2010

См. Некоторые связанные вопросы -

OpenGL все еще лучше, чем Direct3D для неигровых игр?

OpenGL или Direct3D для нового игрового проекта Windows?Или что-то еще?

Microsoft сейчас очень склонна к Direct3D.Многие бюджетные интегрированные карты Intel не поставляются с драйверами OpenGL по умолчанию, или если они поддерживают, они поддерживают только более старые версии / спецификации OpenGL, такие как 1.2 / 1.4.Если вы ориентируетесь на такие машины (доля Intel на рынке графики составляет 50%), вам будет сложно воспользоваться более продвинутыми функциями, такими как шейдеры (которые стали доступны в OpenGL 1.5).Принимая во внимание, что вы сможете использовать подобные шейдеры в Direct3D из-за доступности более качественных драйверов для этих бюджетных карт.Конечно, с Direct3D работает только на Windows.

Если, с другой стороны, вам не нужно использовать шейдеры, вы можете использовать Direct3D или OpenGL.Хотя я бы больше склонялся к OpenGL.Он кроссплатформенный, и все поддерживают его, кроме Microsoft.Некоторые вещи, такие как рисование линий (различной ширины), также намного проще в OpenGL.OpenGL также имеет встроенный режим выбора, который гораздо более надежен, чем выбор лучей (особенно если вы хотите выбирать точки и линии).

Третий вариант - использовать абстрактный API или существующий механизм, который можетрендеринг в OpenGL и Direct3D.

2 голосов
/ 30 июня 2010

Это было бы примерно так же. Было время, когда DirectX имел явное преимущество в скорости перед OpenGL, но для большинства практических целей это древняя история.

0 голосов
/ 07 июля 2010

Раньше я использовал OpenGL, но сейчас я заинтересован в изучении мира DirectX.Причиной является выпуск DX11, который положил конец долгой затяжной войне с Windows.

Khronos Group вскоре выпустила OpenGL 4, чтобы дать отпор;к сожалению, в OGL4 половина новых функций отсутствует или отстает;и некоторые из них жизненно важны с точки зрения создания гибкой трехмерной структуры.

0 голосов
/ 30 июня 2010

Я бы выбрал DirectX. Это улучшается и развивается быстро - намного быстрее, чем комитет OGL может двигаться. Расширение, черт возьми, кто-нибудь?

0 голосов
/ 30 июня 2010

Используйте промежуточное ПО.Ogre хорош, если вы хотите что-то с большим количеством функций (загрузка 3D-моделей и анимаций и т. Д.).SDL хорош, если вы просто хотите простую обертку.

В ответ на ваш настоящий вопрос, все сводится к драйверам.И это зависит от производителя.Насколько я понимаю, сейчас GL не поддерживается всеми основными компаниями (nVidia, ATI, Intel), что является большой проблемой.

Лично я бы использовал промежуточное ПО, но опирался на тестирование / разработкув основном для D3D.

0 голосов
/ 30 июня 2010

Имейте в виду, что драйверы GL для Windows, как правило, довольно ненадежные и глючные.OEM-производители обычно очень мало работают с драйвером GL под Windows.Достаточно, чтобы последняя версия игры работала хорошо.Что будет неприятно, если вы делаете вещи по-другому.

Что вам нужно сделать, это написать слой абстракции между двумя и реализовать оба бэкенда.Это дает вам лучшее из обоих миров.Стабильность DirectX под Windows и кроссплатформенность OpenGL.Это также дает вам огромное преимущество, если вы захотите добавить туда какой-нибудь будущий рендеринг, если хотите.

Стоит также отметить, что X-Box и DirectX достаточно разные, чтобы означать, что вам понадобится отдельный сервер для обеих платформ, если вы все равно попытаетесь сделать это.

Лично мой движокподдерживает DX9, DX10, Open GL3, OpenGL ES2.1, и я гораздо счастливее иметь уровень абстракции:)

Редактировать: Согласно комментариям, я бы отметил, что драйверы nVidia являются наименьшими ошибочными окнамиДрайверы OpenGL.Практически у любого другого производителя есть проблемы.Даже у nVidia много проблем.По моему опыту, в большинстве случаев вы сталкиваетесь с драйверами, которые «просто работают» (тм) с DirectX.

0 голосов
/ 30 июня 2010

На самом деле, это действительно зависит от типа проекта, который вы делаете.

Если вы когда-нибудь захотите перенести его на другую платформу - не используйте DirectX. Если вам нужен полный контроль и быстро развивающаяся библиотека в Windows, DirectX - это то, что вам нужно. Если вы найдете графический движок со всеми необходимыми вам функциями - используйте его. Это проще, чем использовать обычный DX или OpenGL, особенно если он поддерживает цепочку инструментов (редактор уровней, импорт моделей из 3d-моделей, ...).

Если вы хотите изучать DX, выберите DX или SlimDX. Если вы хотите изучать OpenGL, перейдите на OpenGL.

0 голосов
/ 30 июня 2010

Вы можете попробовать это сами, если хотите. Ogre3D - отличная 3D-библиотека, где при запуске вы можете выбрать, хотите ли вы использовать DirectX или OpenGL. Если я правильно помню (прошло 3-4 года с тех пор, как я его использовал), у них была частота кадров и другие данные, даже в их примерах , где вы можете увидеть, какой из них быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...