Вопрос по directx, linux, drivers – Почему нет DirectX API для Linux?

14

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

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

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

Нет "отсутствия этой функциональности". Linux предоставляет другие, не принадлежащие Microsoft, непатентованные графические API. Ben Voigt
DirectX является собственностью & # x2122 ;. neverMind9
@BenVoigt Вы полностью упустили суть вопроса. Он спрашивает не об ускоренных функциях рендеринга трехмерной графики, которые есть у Linux, а о функциональных возможностях DirectX, которых у него нет. Eagle-Eye

Ваш Ответ

6   ответов
-1

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

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

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

1

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

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

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

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

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

6

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

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

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

Error: User Rate Limit Exceeded Brian
14

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

  • Vendor driver (provide low level API defined by DX)
  • DirectX library (use low level API defined by DX to access hardware, provide DirectX API)
  • Software (use DirectX API, ex. game)

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

1

DirectX представляет собой набор API:

  • Direct3D (drawing 3D graphics)
  • DirectX Graphics Infrastructure (enumerating adapters and monitors and managing swap chains)
  • Direct2D (drawing 2D graphics)
  • DirectWrite (fonts)
  • DirectCompute (GPU Computing)
  • DirectSound3D (playback of 3D sounds)
  • DirectX Media (DirectAnimation for 2D/3D web animation, DirectShow for multimedia playback and streaming media, DirectX Transform for web interactivity, and Direct3D Retained Mode for higher level 3D graphics)
  • DirectX Diagnostics (tool for diagnosing and generating reports on components related to DirectX, such as audio, video, and input drivers)
  • DirectX Media Objects (support for streaming objects such as encoders, decoders, and effects)
  • DirectSetup (installation of DirectX components, and the detection of the current DirectX version)

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

  • DirectDraw
  • DirectInput
  • DirectPlay
  • DirectSound
  • DirectMusic

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

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

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

0

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

Похожие вопросы