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

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

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

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

Ответ 1

AFAIK, DirectX содержит 3 части

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

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

Ответ 2

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

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

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

ОБНОВЛЕНИЕ: В наши дни DXVK - это очень реальный и эффективный способ запуска приложений DirectX в Linux.

Ответ 3

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

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

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

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

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

Ответ 4

DirectX - это костюм API:

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

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

  • DirectDraw
  • DirectInput
  • DirectPlay
  • DirectSound
  • DirectMusic

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

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

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

Ответ 5

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

Ответ 6

DirectX - это подходящие продукты, предназначенные для целей Microsoft, поэтому для этого было бы очень необычно

На ум приходят еще две части программного обеспечения: SDL и OpenGL

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