Должен ли Direct3D использовать OpenGL в Windows?

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

Ответ 1

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

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

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

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

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

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

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

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

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

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

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

Ответ 2

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

OpenGL все еще лучше Direct3D для не-игр?

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

Изменить: в соответствии с комментариями я хотел бы указать, что драйверы nVidia являются наименее ошибочными драйверами OpenGL. Практически у каждого другого производителя есть проблемы. Даже у nVidia много проблем. Много раз, по моему опыту, вы в конечном итоге сражаетесь с водителем, где вещи "просто работают" (tm) с DirectX.

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

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