В Windows чем OpenGL отличается от DirectX? - PullRequest
10 голосов
/ 10 сентября 2011

У меня нет опыта работы с графическим программированием.Я усомнился в этом, когда читал о графическом программировании.

Из того, что я понимаю, потому что Windows не предлагала DOS, как прямой аппаратный доступ, DirectX был создан.Это означает, что DirectX - единственный верный способ получить прямой (ish) доступ к оборудованию.Я не прав?

Если я не ошибаюсь, то OpenGL должен быть реализован либо с использованием самого DirectX, либо поверх DirectX.

Так не значит ли это, что в Windows OpenGL действительно DirectX?

Обратите внимание, что мои сомнения сводятся к тому, что именно написано в названии, и меня не интересует, почему один лучше другого и т. Д.

Ответы [ 4 ]

24 голосов
/ 10 сентября 2011

Из того, что я понимаю, поскольку Windows не предлагала DOS, например, прямой аппаратный доступ, был создан Direct X.

Вы правы, что Windows не предлагала DOS, как прямойаппаратный доступ.Фактически ни одна операционная система с защитой памяти не поддерживает.

И да, DirectX был создан, чтобы предложить a API для ускоренного доступа к определенным типам оборудования.DirectX - это a API для ускоренного доступа к оборудованию, а не THE (один-единственный).

Это означает, что Direct X является единственным надежным способом достиженияпрямой (ish) доступ к оборудованию.Я не прав?

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

Драйверы взаимодействуют с обычными программами, так называемым User Space через API.API-интерфейсы могут быть стандартизированы, затем могут быть строго определены или могут быть полностью проприетарными.

DirectX - это указанный API, спецификация была записана Microsoft.

Аналогичным образом OpenGL - это API, но вместо того, чтобы быть заданным одной сущностью, он в некоторой форме стандартизированв сотрудничестве с несколькими участниками.

Одним из примеров собственного API был Glide by 3Dfx, который в значительной степени был вдохновлен OpenGL.Фактически существует оболочка совместимости под названием «minigl», реализующая подмножество OpenGL, необходимое для работы движка Half-Life 1. на системах 3Dfx / Glide.

Разработчики драйверов поставщиков графических процессоров следуют спецификациям API,написание драйверов для DirectX, OpenGL или какого-то частного интерфейса.Каждый из этих API предоставляет доступ к драйверу и, следовательно, к оборудованию.И может быть несколько API для одного ресурса.Драйвер может реализовывать DirectX 3D, OpenGL и все остальное параллельно и предоставлять их всем в пространство пользователя.

Так что нет, OpenGL не построен поверх DirectX, если поставляется с драйвером графического процессора.Windows Vista и выше поставляются с эмуляцией OpenGL-1.4, созданной поверх DirectX, но она не поддерживает шейдеры, объекты буфера вершин и все другие свистки и колокольчики.Как только вы устанавливаете драйвер графического процессора с поддержкой OpenGL, это полностью заменяет эмуляцию OpenGL-1.4 фактической реализацией низкого уровня.

3 голосов
/ 10 сентября 2011

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

2 голосов
/ 10 сентября 2011

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

Windows поддерживает DirectX напрямую, это часть ОС, необходимая длясимпатичные эффекты отображения - их поддержка OpenGL более ограничена, они поддерживают только v1.1 (у нас сейчас версия 4), поэтому, чтобы сделать что-нибудь полезное, вам нужно использовать некоторые дополнительные расширения (например, glew) или производители видеокарт OpenGLSDK.

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

На практике единственными драйверами OpenGL в Windows, которые не являются полностью бесполезными, являются NVidia - поэтому высокопроизводительные приложения OpenGl для Windows в значительной степенитребуется карта NVidia.Это означает, что на Windows легко программировать OpenGL - вы просто придерживаетесь NVidias docs.

2 голосов
/ 10 сентября 2011

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

Выбор был OpenGL или изобрели новый уровень, различные причины привели к последнему.

Vista + может конвертировать OpenGL в DirectX, и наоборот, Wine может конвертировать DirectX в OpenGL.

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