Почему Direct3D работает только на Windows? - PullRequest
4 голосов
/ 11 апреля 2011

Что такое Direct3D? Это API, не так ли? Это реализуется Windows или видеокартами?

Если в видеокартах реализован API-интерфейс Direct3D, почему другие операционные системы не могут использовать ресурсы Direct3D с графической карты?

Если Direct3D реализован в Windows, он должен использовать ресурсы видеокарты, такие как OpenGL или OpenCL. Если вызовы Direct3D не относятся непосредственно к графической карте, они будут медленнее из-за промежуточных вызовов.

Пожалуйста, помогите мне понять, что такое Direct3D.

Ответы [ 4 ]

1 голос
/ 11 апреля 2011

Direct3D - это API, разработанный Microsoft и предназначенный для помощи разработчикам в рендеринге 3D-графики. OpenGL и Direct3D - это два отдельных API, но оба они должны взаимодействовать с видеокартой, используя драйверы, разработанные компаниями, производящими видеокарты. Оба API (Direct3D и OpenGL) должны оба проходить через драйвер для доступа к видеокарте, и их скорости зависят от их конструкции и их реализации в драйверах видеокарты.

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

Как вы уже знаете, Direct3D работает только в Microsoft и в Wine (по большей части), но его структура как API сильно отличается от структуры OpenGL. Direct3D использует структуры и включает в свой API больше элементов ООП, тогда как OpenGL действует как конечный автомат, не имея каких-либо структур или функций ООП. Direct3D часто может развиваться немного быстрее, чем OpenGL, с точки зрения функций, которые он официально поддерживает в своем API, поскольку он не предназначен для максимальной совместимости с широким спектром устройств; с другой стороны, OpenGL, как правило, проявляет большую инерцию, когда приходит к внедрению новых функций, из-за трудностей, возникающих при добавлении новых функций в его API (на Khronos Group большое влияние оказывает индустрия САПР, а также многие другие, поэтому должен обслуживать широкий спектр потребностей). Время, которое потребовалось Khronos Group для окончательного принятия асинхронных вызовов API в OpenGL, свидетельствует об этом и заставило многих людей потерять веру в OpenGL.

Однако OpenGL кроссплатформенный, одобрен Apple, и работает на всех операционных системах, в которых он реализован. Вы можете легко использовать его со многими популярными оконными инструментами (Qt, SDL, FreeGLUT, JogAmp, gtk и т. Д.) И можете быть уверены, что ваше приложение будет компилироваться в других операционных системах, если вы написали его правильно. OpenGL API, в отличие от Direct3D, является отраслевым стандартом с открытым исходным кодом.

Что касается производительности, то все еще остается спорным, какой из них быстрее: в зависимости от того, как вы структурируете свою программу или группируете свои вызовы, это может измениться. Тем не менее, производительность не должна учитываться в отношении того, какой API вы используете, если только вы не проверили свое приложение и не получили доказательств того, что выбор API является причиной вашего узкого места.

1 голос
/ 11 апреля 2011

Direct 3D - это графический API, созданный Microsoft. Это похоже на функцию OpenGL. OpenGL - это конкурирующий API-интерфейс для трехмерной графики, созданный в качестве открытого стандарта. D3D не нуждается в OpenGL для работы.

Производители карт решают, какие API они хотят реализовать; чаще всего включают DirectX (который включает в себя Direct3D) и, возможно, OpenGL.

Существует перенаправление, поскольку оно не идет непосредственно к карте, карты D3D в свою очередь вызывают драйверы, но это, как правило, незначительно.

0 голосов
/ 11 апреля 2011

Что такое Direct3D? Это API, есть не так ли? Это реализовано в Windows или видеокартами?

Да, Direct3D - это API. Он реализован (в основном) самой Windows. Тем не менее, Windows разгрузит значительную часть фактической работы на драйверы видеокарты и, в конечном счете, на саму карту gfx, поэтому можно также сказать, что карта gfx «реализует» D3D.

Если видеокарты реализуют Direct3D API, почему другие не могут операционные системы используют Direct3D ресурсы с видеокарты?

Они могут и делают, но только относительно небольшая (но часто критическая часть) функциональности D3D реализуется непосредственно аппаратным обеспечением карты, поэтому для реализации D3D требуется гораздо больше работы в программном обеспечении.

Если Direct3D реализован в Windows, он должен использовать ресурсы видеокарты, такие как OpenGL или OpenCL.

Нет, это недоразумение. OpenGL и OpenCL также являются API-интерфейсами и только частично реализуются аппаратным обеспечением gfx (так же, как D3D). Оборудование gfx обычно имеет (собственный) «родной» API, который используют драйверы gfx (как для D3D, так и для OpenGL).

Если вызовы Direct3D не напрямую видеокарта, это будет медленнее из-за промежуточных звонков.

Не обязательно какие-либо «промежуточные вызовы» - драйвер D3D использует собственный API карт, как описано выше.

0 голосов
/ 11 апреля 2011

Из Википедия :

Direct3D - это Microsoft DirectX API компонент подсистемы. Цель Direct3D должен абстрагировать связь между графикой приложение и графическое оборудование водители. Он представлен как тонкий абстрактный слой на уровне, сопоставимом в GDI (см. прилагаемую диаграмму). Direct3D содержит множество функций что GDI не хватает.

Direct3D - графика в непосредственном режиме API. Обеспечивает интерфейс низкого уровня к каждой функции 3D видеокарты (трансформации, отсечение, освещение, материалы, текстуры, глубина буферизации и так далее). Он также имел более высокий уровень Сохраненный компонент режима, который теперь имеет был официально прекращен.

...