Почему нет DirectX API для Linux?

При рассмотрении реализации DirectX API на стороне драйвера в системах Windows для современных видеокарт мне было интересно, почему эта реализация недоступна в системах, отличных от Windows, особенно в Linux.

Поскольку очевидно отсутствие этой функциональности, я могу только предположить, что есть веская причина, к которой я слеп, но в моем примитивном понимании я просто рассматриваю вызовы DirectX как не более чем точки входа в функцию на аппаратном устройстве. И для протокола я имею в виду не уровень совместимости (особенно WINE, проект, которым я восхищаюсь каждый божий день), а библиотеку, выполняющую прямые аппаратные вызовы.

Можно ли создать версию DirectX с открытым исходным кодом? Возможно ли это, но неприлично сложно?


person Brian    schedule 20.06.2012    source источник
comment
Нет недостатка в этой функциональности. Linux предоставляет другие, не являющиеся собственностью Microsoft графические API.   -  person Ben Voigt    schedule 20.06.2012
comment
@BenVoigt Вы полностью упустили суть вопроса. Он не спрашивает об ускоренном рендеринге 3D-графики, который есть в Linux, а о функциях DirectX, которых нет.   -  person Eagle-Eye    schedule 14.11.2012
comment
DirectX является СОБСТВЕННЫМ™.   -  person neverMind9    schedule 03.05.2018
comment
Потому что DirectX — это проприетарное программное обеспечение, лицензированное Microsoft. Почему Microsoft делает это доступным в операционной системе, отличной от Windows, и в процессе дает потенциальным клиентам причины не использовать их ОС? В будущем могут быть такие причины, но я искренне сомневаюсь в этом.   -  person KeyC0de    schedule 07.08.2020
comment
devblogs.microsoft.com/directx/directx-heart-linux может быть это меняется   -  person munish    schedule 17.10.2020
comment
мир сегодня -news.com/   -  person munish    schedule 17.10.2020


Ответы (6)


Насколько я знаю, DirectX состоит из 3 частей.

  • Драйвер поставщика (предоставьте API низкого уровня, определенный DX)
  • Библиотека DirectX (используйте низкоуровневый API, определенный DX, для доступа к оборудованию, предоставьте API DirectX)
  • Программное обеспечение (используйте DirectX API, например, игру)

Нет драйвера, обеспечивающего низкоуровневый API, определенный DX в Linux, поэтому даже можно предоставить библиотеку DirectX, но она не будет работать без надлежащего драйвера поставщика, и я не вижу, собирается ли какой-либо поставщик. создать один для своей аппаратной платформы.

person Zang MingJie    schedule 20.06.2012

Почему бы просто не использовать OpenGL? Он поддерживает все функции, которые делает DirectX. У вас есть конкретная причина использовать DirectX? По какой-то причине Microsoft создала DirectX, и я думаю, они не видели в этом необходимости. чтобы позволить ему работать в Linux.

Вы можете запускать игры DirectX в Linux с помощью Wine. Вы можете программировать XNA в Linux, используя MonoGame. Но все они используют OpenGL для обеспечения рендеринга с аппаратным ускорением. Насколько я знаю, OpenGL был (и, вероятно, будет) единственным вариантом для Linux в обозримом будущем.

Можно ли написать собственную реализацию DirectX? Конечно, но это включает в себя написание драйверов, проприетарные знания и, вероятно, слишком большие затраты для того, чтобы кто-то ДЕЙСТВИТЕЛЬНО извлекал из этого выгоду.

РЕДАКТИРОВАТЬ: В наши дни DXVK — это очень реальный и эффективный способ запуска приложений DirectX в Linux.

person Ani    schedule 20.06.2012
comment
Вопрос возникает с точки зрения удобства использования, а не столько с точки зрения разработки. Если игровая индустрия использует DirectX, то я хотел бы знать, какие препятствия существуют для игровой индустрии при переносе существующих игр на Linux. Используя одно и то же оборудование, я могу запустить игру в одной ОС, но не в другой, поэтому по своей наивности я хотел бы представить, что это так же просто, как написать уровень API, а затем передать все драйверам. Очевидно, что этого не существует, поэтому мое понимание неверно, я просто хочу уточнить. - person Brian; 24.07.2012

DirectX — это набор API:

  • Direct3D (отрисовка 3D-графики)
  • Графическая инфраструктура DirectX (перечисление адаптеров и мониторов и управление цепочками обмена)
  • Direct2D (отрисовка 2D-графики)
  • DirectWrite (шрифты)
  • DirectCompute (вычисления на GPU)
  • DirectSound3D (воспроизведение 3D-звуков)
  • DirectX Media (DirectAnimation для 2D/3D веб-анимации, DirectShow для воспроизведения мультимедиа и потокового мультимедиа, DirectX Transform для веб-интерактивности и Direct3D Retained Mode для 3D-графики более высокого уровня)
  • Диагностика DirectX (инструмент для диагностики и создания отчетов о компонентах, связанных с DirectX, таких как аудио, видео и драйверы ввода)
  • Медиаобъекты DirectX (поддержка потоковых объектов, таких как кодировщики, декодеры и эффекты)
  • DirectSetup (установка компонентов DirectX и определение текущей версии DirectX)

Компоненты DirectX устарели, но все еще поддерживаются

  • Прямая отрисовка
  • Прямой ввод
  • Прямое воспроизведение
  • Прямой звук
  • Прямая музыка

Как видите, многие части API-интерфейса DirectX необходимо будет переписать с учетом функциональности драйверов, написанных для Linux. Кроме того, некоторые части костюма DirectX, вероятно, будут обращаться к ОС Windows, и этот код придется переписать для машины с Linux без нарушения копируемых частей DirectX или ОС Windows.

Да, вы могли бы написать набор API с открытым исходным кодом, который делает то же самое, что и DirectX для Linux, однако без большого знания звуковых и графических драйверов/поддержки их производителями для Linux это было бы очень сложной задачей.

Однако, если ваш вопрос был больше похож на «Могу ли я получить/написать что-нибудь, чтобы иметь возможность запускать игры и программы, созданные с помощью DirectX, для запуска в Linux?» по смыслу, короче нет из-за более вероятного нарушения авторских прав.

person Wintery    schedule 29.12.2014

Работа по созданию порта для DirectX создаст те же проблемы, что и в WINE. Он никогда не будет таким же, как в Windows. Исходя из этого принципа, вам придется изучить OpenGL и связанные с ним мультиплатформенные библиотеки.

В этот самый момент WINE будет вашим ближайшим средством, если вы хотите сделать что-то с кодом DirectX, который у вас уже есть. С другой стороны, я не уверен, каким образом Visual Studio или простая печать приблизит вас к свободному окружению. Библиотеки WINE не так уж далеки от нативных, но всегда существует эмуляция, что, по моему честному мнению, до определенного момента приемлемо.

Если я посмотрю на то, как великолепно Final Fantasy XIV работала с полными настройками на моем iMac (2011), я думаю, что не так уж плохо полагаться на реализацию WINE. Игра отрисовывалась точно так же, как на Bootcamp (Windows) на моем iMac.

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

Изменить: я также полностью согласен с ответом пользователя 956030.

person Community    schedule 20.06.2012

Ваш вопрос неверен в 2019 году. DXVK — это реализация реализации D3D11 и D3D10 для Linux с использованием Vulkan и Wine.

Также у mesa есть встроенная реализация Direct3D 9, но, насколько мне известно, никто не использует ее, кроме вина.

person Community    schedule 28.01.2019
comment
Также в течение долгого времени существовала реализация DirectX в WINE поверх OpenGL. - person Andrea; 31.03.2019
comment
dxvk теперь также является реализацией d3d9. - person Fuseteam; 26.02.2020

DirectX — это проприетарный продукт, разработанный для целей Microsoft, так что это было бы очень необычно.

На ум приходят еще две программы: SDL и OpenGL.

OpenGL предоставляет аппаратную альтернативу DirectX, а SDL работает с OpenGL, обеспечивая программную поддержку, которую вы ожидаете от DirectX.

person Steve    schedule 23.04.2017